Ich sehe eine Menge Fragen wie „wie bekommt man eine Zertifikatskette“ oder „was ist die richtige Reihenfolge der Zertifikatskette“. Lassen Sie uns ein wenig Licht ins Dunkel bringen.
TL;DR Die Zertifikatskette beginnt mit Ihrem Zertifikat, gefolgt von einem Zwischenzertifikat oder einem Stammzertifikat. Der Aussteller eines jeden Zertifikats in der Kette sollte mit dem Betreff des nächsten bis hin zum Root-CA-Zertifikat übereinstimmen, wobei der Betreff dem Aussteller entspricht.
Zuallererst: Damit ein SSL-Zertifikat vertrauenswürdig ist, sollte es von einer Zertifizierungsstelle ausgestellt werden, die sich im vertrauenswürdigen Speicher des Geräts befindet, das Sie verwenden (Betriebssystemspeicher oder Anwendungsspeicher wie bei Firefox).
Lassen Sie uns einen Blick auf ein Zertifikat werfen:
Für meine Domäne (siehe Pfeile) versucht das System den Aussteller meines Zertifikats im Store zu finden und wenn es nicht gefunden wird (in meinem Beispiel ist es das nicht), versucht es den Aussteller des Ausstellers meines Zertifikats zu finden und so weiter und so fort.
Die Beziehung zwischen den Zertifikaten erzeugt eine Zertifikatskette, in der das Zertifikat einer Ressource entweder von einer Stammzertifizierungsstelle (die auf Ihrem System installiert ist) oder von einer Zwischenzertifizierungsstelle (die von einer der Stammzertifizierungsstellen oder einer „oberen“ Zwischenzertifizierungsstelle ausgestellt wurde) ausgestellt werden muss.
Sehr oft erhalten wir Zertifikatsdateien (z.B. eine Reihe von .crt) ohne spezifische „Zertifikatsketten“-Datei.
Um die Kette (neu) zu erstellen, sollten Sie von Ihrer Zertifikatsdatei ausgehen, in meinem Fall ist es STAR_my_domain.crt
openssl x509 -text -noout -in STAR_my_domain.crt
Wir sind an zwei Feldern der Ausgabe interessiert: Subject und Issuer.
Das erste in der Kettendatei sollte das Zertifikat Ihrer Domain sein (es gibt Ausnahmen, z.B. für AWS Certificate Manager sollten Sie Ihr Zertifikat und die Kette ohne Ihr Zertifikat separat einreichen)
Es gibt zwei Arten von CAs: Root und Intermediate. Jedes Zertifikat einer Zwischen-CA hat unterschiedliche Felder für Issuer und Subject. Das Zertifikat der Stammzertifizierungsstelle hat die gleichen Felder für Aussteller und Betreff.
Das zweite Zertifikat sollte das Zertifikat des Ausstellers Ihres Zertifikats sein und so weiter bis zum Stammzertifikat.
In meinem Fall sieht die Kette so aus:
An erster Stelle steht mein Zertifikat (STAR_mydomain.crt)
Issuer: C=US, ST=DE, L=Wilmington, O=Corporation Service Company, CN=Trusted Secure Certificate Authority 5
Subject: my subject
An zweiter Stelle in der Kette (TrustedSecureCertificateAuthority5.crt). Hinweis: Subject ist gleich dem Issuer der vorherigen Datei:
Issuer: C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority
Subject: C=US, ST=DE, L=Wilmington, O=Corporation Service Company, CN=Trusted Secure Certificate Authority 5
Die dritte ist USERTrustRSAAddTrustCA.crt:
Issuer: C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root
Subject: C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority
Die letzte ist AddTrustExternalCARoot.crt. Hinweis: Issuer = Subject, bedeutet, dass es sich um die Root-CA handelt. Es besteht keine Notwendigkeit, das Root-CA-Zertifikat zur Kette hinzuzufügen. Es bremst es nicht, aber es erhöht die Anzahl der Handshakes und die Menge der übertragenen Daten.
Issuer: C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root
Subject: C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root
Um eine Datei mit der Zertifikatskette zu erstellen, können Sie Folgendes ausführen:
$cat STAR_mydomain.crt TrustedSecureCertificateAuthority5.crt USERTrustRSAAddTrustCA.crt > Certificate_Chain.crt
Für Dienste wie AWS Certificate Manager:
cat TrustedSecureCertificateAuthority5.crt USERTrustRSAAddTrustCA.crt > Certificate_Chain.crt
Die Datei sollte wie folgt aussehen:
-----BEGIN CERTIFICATE-----
content of your domain certificate
-----END CERTIFICATE-----
...
-----BEGIN CERTIFICATE-----
content of any intermediate CA certificate
-----END CERTIFICATE-----
Um zu überprüfen, ob mit Ihrer Zertifikatskette alles in Ordnung ist, können Sie einen beliebigen Online-Dienst wie z. B. DigiCert verwenden.
UPDATE: Informationen aktualisiert nach mehreren Problemen mit AddTrust External CA Root Ablauf am 30. Mai 2020. Es besteht keine Notwendigkeit, ein Root-Zertifikat hinzuzufügen. Es wird nicht empfohlen, es sei denn, Sie verwenden ein selbstsigniertes Zertifikat.