Wie fügt man Ubuntu eine Zertifizierungsstelle hinzu?


166

Meine Arbeit hat beschlossen, eine eigene Zertifizierungsstelle ( Certificate Authority, CA) auszustellen , um verschiedene Aspekte unserer Arbeit sicher abzuwickeln, ohne für Zertifikate zu bezahlen.

  • E-Mails kryptografisch signieren
  • E-Mail-Inhalte verschlüsseln
  • Greifen Sie beispielsweise auf das firmeneigene IRC- Client-Zertifikat zu.
  • Die Schlüssel ehemaliger Mitarbeiter automatisch widerrufen

Sie haben mir eine .pemDatei geschickt und ich bin nicht sicher, wie ich sie zu meiner Ubuntu-Installation hinzufügen soll. Die gesendeten Anweisungen lauteten: "Ein Doppelklick auf einen Mac sollte ihn installieren." 

Wie gehe ich vor? Muss ich etwas mit dem tun OpenSSL eine erstellen .key, .csroder .crtDatei?


2
Der Kommentar "Die gesendeten Anweisungen lauteten: \" Ein Doppelklick darauf auf einem Mac sollte es installieren. \ "" machte meinen Tag
mzoll

Antworten:


231

CA installieren

Kopieren Sie Ihr Zertifikat in das PEM-Format (das Format, ----BEGIN CERTIFICATE----in dem es enthalten ist) /usr/local/share/ca-certificatesund benennen Sie es mit einer .crtDateierweiterung.

Dann lauf sudo update-ca-certificates.

Vorsichtsmaßnahmen: Diese Installation betrifft nur Produkte, die diesen Zertifikatspeicher verwenden. Einige Produkte verwenden möglicherweise andere Zertifikatspeicher. Wenn Sie diese Produkte verwenden, müssen Sie dieses CA-Zertifikat auch diesen anderen Zertifikatspeichern hinzufügen. ( Firefox-Anweisungen , Chrome-Anweisungen , Java-Anweisungen )

CA testen

Sie können überprüfen, ob dies funktioniert hat, indem Sie nach dem Zertifikat suchen, das Sie gerade hinzugefügt haben /etc/ssl/certs/ca-certificates.crt(eine lange Liste aller verknüpften vertrauenswürdigen Zertifizierungsstellen ).

Sie können OpenSSLs s_client auch verwenden, indem Sie versuchen, eine Verbindung zu einem Server herzustellen, von dem Sie wissen, dass er ein Zertifikat verwendet, das von der soeben installierten Zertifizierungsstelle signiert wurde.

$ openssl s_client -connect foo.whatever.com:443 -CApath /etc/ssl/certs

CONNECTED(00000003)
depth=1 C = US, ST = Virginia, O = "Whatever, Inc.", CN = whatever.com, emailAddress = admin@whatever.com
verify return:1
depth=0 C = US, ST = Virginia, L = Arlington, O = "Whatever, Inc.", CN = foo.whatever.com
verify return:1
---
Certificate chain
 0 s:/C=US/ST=Virginia/L=Arlington/O=Whatever, Inc./CN=foo.whatever.com
   i:/C=US/ST=Virginia/O=Whatever, Inc./CN=whatever.com/emailAddress=admin@whatever.com

... snip lots of output ...

    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1392837700
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

Als Erstes muss die Zertifikatskette am oberen Rand der Ausgabe gesucht werden. Dies sollte die Zertifizierungsstelle als Aussteller (neben i:) anzeigen . Dies zeigt an, dass der Server ein von der zu installierenden Zertifizierungsstelle signiertes Zertifikat vorlegt.

Zweitens suchen Sie nach dem verify return codeEnde, auf das festgelegt werden soll 0 (ok).


3
Dieser funktioniert tatsächlich
Sabareesh Kkanan

1
Vielen Dank, dass Sie festgestellt haben, dass Firefox / Chrome nicht den Standard-Zertifikatspeicher verwenden.
Tim Strijdhorst

4
Beachten Sie, dass Update-CA-Zertifikate (wahrscheinlich beabsichtigt) sehr heikel sein können. mycert.pem.crt hat NICHT funktioniert, mycert.crt jedoch. Ich denke auch, dass es / usr / local / share / ca-Zertifikate sein muss, nicht / usr / share / ca-Zertifikate (trotz der Kommentare in der /etc/ca-certificates.conf).
Labyrinth

2
Vielen Dank für den crtErweiterungskommentar, der das Geheimnis war, um diese Arbeit für mich zu bekommen. Ich erhielt ein Zertifikat mit einer certErweiterung und war verwirrt, warum nichts funktionierte.
Ransom Briggs

3
Eine Einschränkung: s_clientSNI wird standardmäßig nicht gesendet, und der Server benötigt möglicherweise SNI, insbesondere wenn er virtuelle Hosts / Sites mit unterschiedlichen Zertifikaten unterstützt. für diesen Fall hinzufügen -servername foo.whatever.com. Oder wenn es sich um einen Webserver handelt (moderne Versionen von) curloder wgetder SNI automatisch macht.
Dave_thompson_085

66

man update-ca-Zertifikate :

update-ca-certificates  is  a  program  that  updates   the   directory
/etc/ssl/certs to hold SSL certificates and generates certificates.crt,
a concatenated single-file list of certificates.

It reads the file /etc/ca-certificates.conf. Each line gives a pathname
of  a  CA  certificate  under /usr/share/ca-certificates that should be
trusted.  Lines that begin with "#" are comment lines and thus ignored.
Lines  that  begin with "!" are deselected, causing the deactivation of
the CA certificate in question.

Furthermore   all   certificates   found   below   /usr/local/share/ca-
certificates are also included as implicitly trusted.

Aus dem oben Gesagten würde ich schließen, dass der bevorzugte Weg, lokale Zertifikatdateien in den vertrauenswürdigen Speicher zu bekommen, darin besteht, sie dort abzulegen /usr/local/share/ca-certificatesund dann auszuführen update-ca-certificates. Sie müssen nicht /etc/ssl/certsdirekt berühren .


23
Das Benennen der Zertifikate mit .crt-Erweiterungen schien ebenfalls erforderlich zu sein.
Phyzome

Danke für den Hinweis @phyzome - hätte sonst mein Zertifikat nicht hinzufügen können.
Seiyria

1
Ich musste hinzufügen --fresh, um es zum Laufen zu bringen. zBupdate-ca-certificates --fresh
Elijah Lynn

15

Ich hatte das gleiche Problem und musste die .pemDatei kopieren /usr/local/share/ca-certificatesund umbenennen als .crt. Die .cerDatei kann einfach .pemmit openssl konvertiert werden , wenn Sie zum Beispiel die nicht haben .pem.

Nach dem Kopieren der Datei müssen Sie ausführen sudo update-ca-certificates.


openssl x509 -inform DER -in certificate.cer -out certificate.crt
Webwurst

14

Die anderen Antworten in Bezug auf update-ca-certificatessind für Anwendungen korrekt, die aus dem Systemzertifikatsspeicher lesen. Für Chrome und Firefox und wahrscheinlich auch für einige andere muss das Zertifikat in der nssdb abgelegt werden, dem Backend für die Mozilla NSS-Bibliothek.

Von https://code.google.com/p/chromium/wiki/LinuxCertManagement :

Verwenden Sie beispielsweise, um einem Stammzertifizierungsstellenzertifikat für die Ausstellung von SSL-Serverzertifikaten zu vertrauen

certutil -d sql: $ HOME / .pki / nssdb -A -t "C ,," -n <Zertifikatsname> -i <Zertifikatsname>

Wo <certificate nickname>ist beliebig und <certificate filename>ist Ihre PEM- oder CRT-Datei.

Andere hilfreiche Referenzen:


Vielen Dank. Es funktioniert unter Ubuntu 16.04 für Chrome 53.0.2785.143, aber Firefox 49 scheint eine separate Speicherdatenbank zu haben und muss hinzugefügt werden über: Einstellungen # Erweitert [Zertifikate anzeigen] -> [Autoritäten] -> [Importieren] Weitere Informationen zum Firefox-Zertifikatspeicher. askubuntu.com/a/248326/535154
mauron85

Übrigens, wenn Sie cert vor dem ersten Start von Chrome installieren möchten (dh solange .pki / dir noch fehlt), müssen Sie zuerst die nssdb erstellen:mkdir -p $HOME/.pki/nssdb && chmod -R 0700 $HOME/.pki && certutil -d sql:$HOME/.pki/nssdb -N --empty-password
akavel

Es gibt eine Möglichkeit, Chrome und Firefox zum Lesen aus dem Systemzertifikatsspeicher zu bewegen. Siehe meine Antwort: superuser.com/a/1312419/506107
wheeler

11

Für neuere Builds, die auf Debian basieren, müssen Sie möglicherweise Folgendes ausführen:

sudo dpkg-reconfigure ca-certificates

HINWEIS: sudo dpkg-reconfigure ca-certificates ruft update-ca-certificates intern auf

Natürlich müssen Sie das Zertifikat (.crt-Datei) noch nach / usr / share / ca-certificates kopieren, bevor Sie dies tun können :)


4

Aufbauend auf der Antwort von dwmw2 können Sie Anwendungen, die NSS für die Zertifikatverwaltung verwenden, anweisen , den System- Truststore zu verwenden.

libnss3Standardmäßig wird ein schreibgeschützter Satz von Stammzertifizierungsstellenzertifikaten ( libnssckbi.so) mitgeliefert. Daher müssen Sie diese meistens manuell zum lokalen Benutzervertrauensspeicher in hinzufügen $HOME/.pki/nssdb. p11-kitbietet einen Drop-In-Ersatz an libnssckbi.so, der als Adapter für die in installierten systemweiten Stammzertifikate fungiert /etc/ssl/certs.

Bearbeiten:

Es scheint mehr Versionen von da libnssckbi.sodraußen zu geben als nur in libnss3. Das Folgende ist ein Skript, um sie alle zu finden, zu sichern und durch Links zu ersetzen p11-kit:

sudo apt-get update && sudo apt-get install -y p11-kit libnss3
find / -type f -name "libnssckbi.so" 2>/dev/null | while read line; do
    sudo mv $line ${line}.bak
    sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so $line
done

Originalanleitung:

Installieren Sie dazu p11-kitund libnss3(falls noch nicht geschehen):

sudo apt-get update && sudo apt-get install -y p11-kit libnss3

Dann sichern Sie die vorhandenen libnssckbi.sovon libnss3:

sudo mv /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so.bak

Erstellen Sie zum Schluss den symbolischen Link:

sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so

Um zu bestätigen, dass es funktioniert, können Sie ausführen ll /usr/lib/x86_64-linux-gnu/nss/libnssckbi.sound es sollte den Link zeigen:

lrwxrwxrwx 1 root root 49 Apr  9 20:28 /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so -> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

Wenn Sie jetzt ein Zertifikat zum CA-Speicher hinzufügen update-ca-certificates, stehen diese Zertifikate jetzt Anwendungen zur Verfügung, die NSS ( libnss3) verwenden, z. B. Chrome.


1

Wie bereits erwähnt, haben verschiedene Anwendungen, die NSS verwenden, einen eigenen Zertifikatspeicher. Unter Ubuntu müssen Sie certutilIhre Zertifizierungsstellen manuell für jede Anwendung und jeden Benutzer hinzufügen.

In anderen Distributionen wie Fedora funktioniert so etwas wie Just Works ™ und Sie sollten einen Fehler gegen alle Anwendungen melden, die den CAs, mit denen Sie installieren, nicht automatisch vertrauen update-ca-trust.

Sie können dies auch in Ubuntu beheben, indem Sie das p11-kit-modulesPaket installieren und dann das in NSS integrierte Trust Roots- Modul p11-kit-trust.sodurch ersetzen , indem Sie beispielsweise eine symbolische Verknüpfung von /usr/lib/firefox/libnssckbi.sonach erstellen/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

Dazu wird das System konfigurierte Vertrauen Wurzeln bekommt, nicht einige hartcodierte diejenigen. Beachten Sie, dass Ubuntu mehrere verschiedene Kopien dieser libnssckbi.so-Bibliothek mit den fest codierten Vertrauensstämmen liefert und Sie alle ersetzen müssen!

vgl. https://bugs.launchpad.net/ubuntu/+source/nss/+bug/1647285


Als ich das tat sudo find / -type f -name "libnssckbi.so", fand es libnssckbi.soan drei Stellen: /usr/lib/thunderbird/, /usr/lib/firefox/, und /usr/lib/x86_64-linux-gnu/nss/. Sie sagen also, dass ich die libnssckbi.soin allen drei Ordnern verknüpfen soll p11-kit-trust.so?
Wheeler

1
Okay, habe gerade bestätigt, dass das Verlinken /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so-> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.sowie ein Charm funktioniert hat. Ich konnte ein Zertifikat hinzufügen /usr/local/share/ca-certificates, ausführen sudo update-ca-certificatesund PRESTO, Chrome begann, die selbstsignierten Zertifikate zu akzeptieren.
Wheeler

0

Ernsthaft dumme Antwort hier hinzuzufügen, aber ich hatte 2 Stunden damit verbracht, mit Certutils unter Linux hin und her zu gehen ... Ich war mir sicher, dass alles korrekt war:

hutber@hutber-mint /var/www/asos-mvt-framework $ certutil -L -d sql:${HOME}/.pki/nssdb

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

anyproxy                                                     CT,, 
rootCA                                                       CT,, 
myasos                                                       CT,, 

Trotzdem funktionierte in Chrom nichts. Ich habe alles versucht, am Ende ....

Restarting Chrome

War der Schlüssel zu meinem Erfolg, nachdem ich folgte: Steven Montags Rat

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.