Hinzufügen eines selbstsignierten Zertifikats zur "vertrauenswürdigen Liste"

88

Ich habe ein selbstsigniertes Zertifikat für meinen Build-Server erstellt und möchte dem Zertifikat auf meinem Computer global vertrauen, da ich den Schlüssel selbst erstellt habe und keine Warnungen mehr sehen kann.

Ich bin auf Ubuntu 12.04. Wie kann ich das Zertifikat nehmen und es global vertrauen, damit Browser (Google Chrome), CLI-Dienstprogramme (wget, curl) und Programmiersprachen (Python, Java usw.) der Verbindung zu https://mysite.com vertrauen, ohne zu fragen Fragen?

Naftuli Kay
quelle
Alle TLS sollten über OpenSSL übertragen werden, sodass Sie hier nach Dokumentation suchen können. In diesem Fall: gagravarr.org/writing/openssl-certs/… sieht nützlich aus.
msw

Antworten:

88

Die einfache Antwort darauf ist, dass so ziemlich jede Anwendung anders damit umgeht.

Auch OpenSSL und GNUTLS (die am häufigsten verwendeten Bibliotheken zur Verarbeitung von Zertifikaten, die zur Verarbeitung signierter Zertifikate verwendet werden) verhalten sich bei der Behandlung von Zertifikaten unterschiedlich, was das Problem ebenfalls erschwert. Auch Betriebssysteme verwenden unterschiedliche Mechanismen, um die von den meisten Websites verwendete "Stammzertifizierungsstelle" zu verwenden.

Abgesehen davon, als Beispiel Debian. Installieren Sie das ca-certificatesPaket:

apt-get install ca-certificates

Anschließend kopieren Sie die öffentliche Hälfte Ihres nicht vertrauenswürdigen CA-Zertifikats (das Sie zum Signieren Ihrer CSR verwenden) in das CA-Zertifikatverzeichnis (als Root):

cp cacert.pem /usr/share/ca-certificates

Und um das Verzeichnis mit Ihrem Zertifikat neu zu erstellen, führen Sie es als root aus:

dpkg-reconfigure ca-certificates

und wählen Sie die askOption, scrollen Sie zu Ihrem Zertifikat, markieren Sie es für die Aufnahme und wählen Sie OK.

Die meisten Browser verwenden ihre eigene CA-Datenbank. Daher müssen Tools wie certutilzum Beispiel zum Ändern ihres Inhalts verwendet werden (unter Debian, das im libnss3-toolsPaket enthalten ist). Mit Chrome führen Sie beispielsweise Folgendes aus:

certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n "My Homemade CA" -i /path/to/CA/cert.file

In Firefox können Sie nach dem Zertifikat auf der Festplatte suchen, es als Zertifikatdatei erkennen und es dann in die Liste der Stammzertifizierungsstellen importieren.

Die meisten anderen Befehle, z. B. curlBefehlszeilenschalter, mit denen Sie auf Ihre Zertifizierungsstelle zeigen können,

 curl --cacert  /path/to/CA/cert.file https://...

oder löschen Sie die SSL-Validierung vollständig

 curl --insecure https://...

Der Rest muss einzeln untersucht werden, wenn der ca-certificatesgleiche Trick ihn nicht für diese bestimmte Anwendung sortiert.

Drav Sloan
quelle
Wie hier erwähnt , ist das Hinzufügen von CA-Zertifikaten für Java ebenfalls eine separate Angelegenheit.
Naftuli Kay
2
Nach dem Kopieren des Zertifikats nach / usr / share / ca-certificates wird es in der dpkg-reconfigure ca-certificatesListe nicht angezeigt. Was mache ich falsch?
Georges Dupéron
19
@ GeorgesDupéron Das ist mir passiert. Ich habe das Problem gelöst, indem ich das Zertifikat von whatever.pemin umbenannt habe whatever.crt.
Hallo Welt
2
Zu Ihrer Information, ich hatte eine Zertifizierungsdatei namens .cer, und das hat nicht funktioniert. Ich musste es in umbenennen, .crtdamit es erkannt wurde.
Tri Nguyen
54

Nicht interaktiver Ansatz

Für die Verwendung in einem nicht interaktiven Kontext (z. B. einem Kochrezept) können Sie die folgende Sequenz verwenden.

sudo cp my.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
  • Getestet und funktioniert unter Debian 5/6 & Ubuntu 14.04.
  • Weitere Informationen finden Sie unter man update-ca-certificates

Diese Methode ist der Methode von @ Drav vorzuziehen, da sie /usr/share/normalerweise für Dateien reserviert ist, die vom Betriebssystem / hinzugefügt werden apt-get.

oDDsKooL
quelle
4
Es ist besser, die Dateien zu kopieren, /usr/local/share/ca-certificates/wie in den Manpages erwähnt
oder
3
Zu Ihrer Information, das A muss ein sein .crt, ich fand, .certdass es hinzugefügt wurde, aber nicht half
KCD
6

Fügen Sie auf Fedora 23 die .pem- oder .der-Datei hinzu, /etc/pki/ca-trust/source/anchors/und führen Sie sie aus sudo update-ca-trust extract.

Siehe man update-ca-trustfür Details, zB ob / etc oder / usr verwendet werden soll.

user7610
quelle
4

In Centos:

cp *.pem /etc/pki/ca-trust/source/anchors/
update-ca-trust extract
Libelle
quelle
Wann openssl connectsoll ich diesen Ordner / anchors angeben? Ich self signed certs
erhalte
2

Nicht interaktiver Ansatz (18. Oktober)
für neuere debian-basierte Systeme

Es gibt einen Unterschied zwischen dem Hinzufügen eines Zertifikats zum Speicher des Hosts und dem Aktivieren, damit die Anwendungen diese tatsächlich nutzen. Ein im Store vorhandenes Zertifikat wird nicht unbedingt verwendet (obwohl ich zugeben muss, dass immer noch viele Pakete es falsch machen).
Dies kann verwirrend werden, wenn Sie ein Paket /etc/ca-certificate.confeinrichten, das Ihr Zertifikat in Betracht zieht und es einfach ablehnt, obwohl es es enthält wurde ohne Fehler hinzugefügt. Sie müssen update-ca-certificatesexplizit angeben, dass das Zertifikat durch Hinzufügen zu /etc/ca-certificate.confoder aktiviert (nicht nur kopiert, sondern auch aktiviert) werden soll /etc/ca-certificate/update.d.

CERT=mycert.crt
cp /mypath/to/$CERT /usr/share/ca-certificates/$CERT
    # notice the + sign which tells to activate the cert!!!
echo "+$CERT" >/etc/ca-certificates/update.d/activate_my_cert
dpkg-reconfigure ca-certificates;

Jetzt wird es verwirrend, da es eine Möglichkeit gibt, einem Zertifikat implizit zu vertrauen, indem Sie einen anderen Pfad verwenden:

CERT=mycert.crt
cp /mypath/to/$CERT /usr/local/share/ca-certificates/$CERT
update-ca-certificates;
3ronco
quelle