Vidím spoustu dotazů typu „jak získat řetězec certifikátů“ nebo „jaké je správné pořadí řetězce certifikátů“. Pojďme si na to trochu posvítit.
TL;DR Řetězec certifikátů začíná vaším certifikátem, po kterém následuje zprostředkující certifikát nebo certifikát kořenové certifikační autority. Vydavatel libovolného certifikátu v řetězci by se měl rovnat subjektu dalšího až po certifikát kořenové certifikační autority, kde se subjekt rovná vydavateli.
Především – aby byl SSL certifikát důvěryhodný, měl by být vydán certifikační autoritou, která je v důvěryhodném úložišti zařízení, které používáte (úložiště operačního systému nebo úložiště aplikací jako u Firefoxu).
Podívejme se na jeden z certifikátů:
Pro mou doménu (viz šipky) se systémy pokusí najít vydavatele mého certifikátu ve Store a pokud ho nenajdou (v mém příkladu není), pokusí se najít vydavatele vydavatele mého certifikátu a tak dále a tak dále.
Vazba mezi certifikáty vytváří řetězec certifikátů, kde certifikát prostředku musí být vydán buď kořenovou certifikační autoritou (jednou z nainstalovaných v systému), nebo zprostředkující certifikační autoritou (vydanou jednou z kořenových certifikačních autorit nebo „vyšší“ zprostředkující certifikační autoritou).
Velmi často dostáváme soubory certifikátů (např. svazek .crt) bez konkrétního souboru „řetězce certifikátů“.
Pro (znovu)vytvoření řetězce je třeba začít od souboru certifikátu, v mém případě je to STAR_my_domain.crt
openssl x509 -text -noout -in STAR_my_domain.crt
Zajímají nás dvě pole z výstupu: Subjekt a Vydavatel.
První v souboru řetězce by měl být certifikát vaší domény (existují výjimky. např. pro AWS Certificate Manager byste měli předložit svůj certifikát a řetězec bez svého certifikátu zvlášť)
Existují dva typy certifikačních autorit: kořenová a zprostředkující. Každý certifikát zprostředkující certifikační autority má jiná pole Issuer a Subject. Certifikát kořenové CA má stejná pole Issuer a Subject.
Druhý by měl být certifikát vydavatele vašeho vydavatele certifikátu a tak dále až po kořenový.
V mém případě vypadá řetězec takto:
První jde můj certifikát (STAR_mydomain.crt)
Issuer: C=US, ST=DE, L=Wilmington, O=Corporation Service Company, CN=Trusted Secure Certificate Authority 5
Subject: my subject
Druhý v řetězci (TrustedSecureCertificateAuthority5.crt). Poznámka: Subject se rovná Issuer předchozího souboru :
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
Třetí je 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
Poslední je AddTrustExternalCARoot.crt. Poznámka: Issuer = Subject, což znamená, že se jedná o kořenovou certifikační autoritu. Certifikát kořenové certifikační autority není třeba do řetězce přidávat. Nebrzdí ho, ale zvyšuje množství handshaků a množství přenášených dat.
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
Pro vytvoření souboru s řetězcem certifikátů můžete spustit:
$cat STAR_mydomain.crt TrustedSecureCertificateAuthority5.crt USERTrustRSAAddTrustCA.crt > Certificate_Chain.crt
Pro takové služby, jako je AWS Certificate manager:
cat TrustedSecureCertificateAuthority5.crt USERTrustRSAAddTrustCA.crt > Certificate_Chain.crt
Soubor by měl vypadat:
-----BEGIN CERTIFICATE-----
content of your domain certificate
-----END CERTIFICATE-----
...
-----BEGIN CERTIFICATE-----
content of any intermediate CA certificate
-----END CERTIFICATE-----
Pro kontrolu, zda je s řetězcem certifikátů vše v pořádku, můžete použít některou z online služeb, jako např. poskytuje DigiCert.
DOPLNĚNO: Informace aktualizovány po četných problémech s vypršením platnosti kořenového certifikátu AddTrust External CA 30. května 2020. Není třeba přidávat kořenový certifikát. Nedoporučuje se, pokud nepoužíváte samopodepsaný.