Tvorba, správa a konverze SSL certifikátů s pomocí OpenSSL
OpenSSL představuje jeden z nejrozšířenějších nástrojů pro práci s SSL certifikáty. Umožňuje jejich vytváření, konverzi a správu.
V praxi se setkáte s mnoha situacemi, kde bude potřeba OpenSSL využít různými způsoby. Proto jsem pro vás sestavil praktický přehled nejčastěji používaných příkazů.
V tomto článku se zaměřím na ty příkazy OpenSSL, které vám nejvíce pomohou v reálných situacích.
Některé zkratky, které se vztahují k certifikátům, jsou:
- SSL – Secure Socket Layer (zabezpečená soketová vrstva)
- CSR – Certificate Signing Request (žádost o podpis certifikátu)
- TLS – Transport Layer Security (zabezpečení transportní vrstvy)
- PEM – Privacy Enhanced Mail (formát kódování certifikátu)
- DER – Distinguished Encoding Rules (formát kódování certifikátu)
- SHA – Secure Hash Algorithm (bezpečný hashovací algoritmus)
- PKCS – Public-Key Cryptography Standards (standardy šifrování veřejným klíčem)
Poznámka: Pokud nemáte s těmito pojmy zkušenosti, doporučuji kurz o provozu SSL/TLS.
Generování nového soukromého klíče a žádosti o podpis certifikátu
openssl req -out etechblog.cz.csr -newkey rsa:2048 -nodes -keyout etechblog.cz.key
Tento příkaz vytvoří CSR a 2048bitový soubor klíčů RSA. Pokud plánujete použít tento certifikát na serveru Apache nebo Nginx, je nutné odeslat CSR certifikační autoritě. Ta vám následně poskytne podepsaný certifikát, nejčastěji ve formátu der nebo pem, který pak musíte nakonfigurovat na webovém serveru.
Vytvoření certifikátu s vlastním podpisem
openssl req -x509 -sha256 -nodes -newkey rsa:2048 -keyout gfselfsigned.key -out gfcert.pem
Výše uvedený příkaz vygeneruje certifikát s vlastním podpisem a soubor klíče s 2048bitovým RSA. Dále je použita funkce sha256, která je v současnosti považována za nejbezpečnější.
Tip: Ve výchozím nastavení je certifikát s vlastním podpisem platný pouze jeden měsíc. Proto je vhodné definovat parametr –days pro prodloužení jeho platnosti.
Příklad: Vytvoření vlastního podpisu s platností dva roky.
openssl req -x509 -sha256 -nodes -days 730 -newkey rsa:2048 -keyout gfselfsigned.key -out gfcert.pem
Ověření obsahu CSR souboru
openssl req -noout -text -in etechblog.cz.csr
Ověření je klíčové, abyste si byli jisti, že certifikační autoritě odesíláte CSR s požadovanými detaily.
Vytvoření soukromého klíče RSA
openssl genrsa -out private.key 2048
Pokud potřebujete vygenerovat soukromý klíč RSA, můžete použít tento příkaz. Pro silnější šifrování je zde uvedena velikost 2048 bitů.
Odstranění přístupové fráze ze soukromého klíče
openssl rsa -in certkey.key -out nopassphrase.key
V případě, že používáte přístupovou frázi v souboru s klíčem a používáte Apache, musíte heslo zadávat při každém spuštění. Pokud vás toto obtěžuje, můžete pomocí uvedeného příkazu odstranit přístupovou frázi z existujícího klíče.
Ověření platnosti soukromého klíče
openssl rsa -in certkey.key –check
Pokud máte pochybnosti o validitě souboru s klíčem, můžete jej zkontrolovat tímto příkazem.
Ověření obsahu certifikátu
openssl x509 -in certfile.pem -text –noout
Pro ověření informací v certifikátu jako je CN, OU atd., můžete použít tento příkaz, který vám zobrazí detaily certifikátu.
Zobrazení informací o certifikační autoritě
openssl x509 -in certfile.pem -noout -issuer -issuer_hash
Každý certifikát je podepsán certifikační autoritou. Tento příkaz vám zobrazí informace o ní.
Zjištění hashe certifikátu
openssl x509 -noout -hash -in bestflare.pem
Převod DER formátu do PEM
openssl x509 –inform der –in sslcert.der –out sslcert.pem
Certifikační autorita vám obvykle poskytne certifikát ve formátu .der. Pokud ho potřebujete použít ve formátu .pem (např. pro Apache), použijte tento příkaz.
Převod PEM formátu do DER
openssl x509 –outform der –in sslcert.pem –out sslcert.der
Pokud potřebujete převést formát .pem na .der, použijte tento příkaz.
Převod certifikátu a soukromého klíče do PKCS#12 formátu
openssl pkcs12 –export –out sslcert.pfx –inkey key.pem –in sslcert.pem
Pokud potřebujete použít certifikát s Java aplikací nebo jinou aplikací, která přijímá pouze formát PKCS#12, použijte tento příkaz, který vytvoří jeden pfx soubor obsahující certifikát i klíč.
Tip: Můžete také přidat řetězový certifikát pomocí parametru –chain, jak je uvedeno níže.
openssl pkcs12 –export –out sslcert.pfx –inkey key.pem –in sslcert.pem -chain cacert.pem
Vytvoření CSR s pomocí existujícího soukromého klíče
openssl req –out certificate.csr –key existing.key –new
Pokud nechcete vytvářet nový soukromý klíč a namísto toho chcete použít existující, můžete použít tento příkaz.
Zobrazení obsahu certifikátu ve formátu PKCS12
openssl pkcs12 –info –nodes –in cert.p12
PKCS12 je binární formát, takže jeho obsah nelze zobrazit v textovém editoru. Tento příkaz vám umožní zobrazit obsah souboru PKCS12.
Převod formátu PKCS12 na certifikát PEM
openssl pkcs12 –in cert.p12 –out cert.pem
Pro použití existujícího formátu pkcs12 s Apache, nebo pokud jen potřebujete mít certifikát ve formátu pem, bude tento příkaz užitečný.
Test SSL certifikátu na dané URL
openssl s_client -connect yoururl.com:443 –showcerts
Tento příkaz často používám pro ověření SSL certifikátu na konkrétní URL. Je to velmi užitečné pro kontrolu detailů protokolu, šifry a samotného certifikátu.
Zjištění verze OpenSSL
openssl version
Pokud zodpovídáte za bezpečnost OpenSSL, je ověření verze jednou z prvních věcí, které byste měli udělat.
Zjištění data vypršení platnosti certifikátu v PEM souboru
openssl x509 -noout -in certificate.pem -dates
Tento příkaz je užitečný, pokud plánujete zavést nějaký monitoring pro kontrolu platnosti certifikátů. Zobrazí vám data v syntaxi notBefore a notAfter. Pro ověření, zda certifikát vypršel nebo je stále platný, se podívejte na notAfter.
Příklad:
[[email protected] opt]# openssl x509 -noout -in bestflare.pem -dates notBefore=Jul 4 14:02:45 2015 GMT notAfter=Aug 4 09:46:42 2015 GMT [[email protected] opt]#
Zjištění data vypršení platnosti certifikátu na dané URL
openssl s_client -connect secureurl.com:443 2>/dev/null | openssl x509 -noout –enddate
Další užitečný příkaz pro vzdálené monitorování data vypršení platnosti certifikátu SSL na konkrétní URL.
Příklad:
[[email protected] opt]# openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -enddate notAfter=Dec 8 00:00:00 2015 GMT
Ověření, zda je na URL akceptováno SSL V2 nebo V3
Pro ověření SSL V2 použijte:
openssl s_client -connect secureurl.com:443 -ssl2
Pro ověření SSL V3:
openssl s_client -connect secureurl.com:443 –ssl3
Pro ověření TLS 1.0:
openssl s_client -connect secureurl.com:443 –tls1
Pro ověření TLS 1.1:
openssl s_client -connect secureurl.com:443 –tls1_1
Pro ověření TLS 1.2:
openssl s_client -connect secureurl.com:443 –tls1_2
Pokud zabezpečujete webový server a potřebujete ověřit, zda je SSL V2/V3 povoleno, použijte uvedené příkazy. Pokud je protokol aktivován, zobrazí se „CONNECTED“, jinak „handshake failed“.
Ověření, zda je na URL akceptována konkrétní šifra
openssl s_client -cipher 'ECDHE-ECDSA-AES256-SHA' -connect secureurl:443
Pokud pracujete na bezpečnostních problémech a výsledky bezpečnostních testů ukazují, že jsou akceptovány některé slabé šifry, můžete tento příkaz použít k ověření.
Samozřejmě je nutné upravit šifru a URL, proti které chcete testovat. Pokud je šifra akceptována, dostanete „CONNECTED“, jinak „handshake failed“.
Doufám, že výše uvedené příkazy vám pomohou lépe se orientovat v OpenSSL a efektivně spravovat SSL certifikáty pro vaše webové stránky.