OpenSSL je open-source kryptografická knihovna, která obsahuje řadu příkazů používaných v protokolu TLS a infrastruktuře veřejných klíčů. OpenSSL byl vydán v roce 1998 a je k dispozici pro systémy Windows, Linux, macOS a BSD. Příkaz OpenSSL vám pomůže provádět různé úkoly včetně žádosti o podpis certifikátu (CSR), generování soukromých klíčů a certifikace SSL.
OpenSSL je důležitý, protože zajišťuje správnou implementaci SSL. Získání SSL správným způsobem je zásadní pro bezpečnost vašeho webu. Navíc Google, který je předním vyhledávačem, dává přednost webům s implementovanými SSL certifikáty. Některé prohlížeče jako Chrome a Firefox mohou váš web označit jako Nezabezpečený, pokud nemáte správný SSL certifikát. Proto je nanejvýš důležité provozovat váš web přes šifrovaný HTTPS protokol.
Nejprve to nejdůležitější
Tento návod je průvodce ve stylu taháku, který obsahuje některé, ale pravděpodobně ne všechny příkazy OpenSSL, které můžete používat v každodenních scénářích.
První část vysvětluje vše, co potřebujete vědět o žádostech o podpis certifikátu (CSR). Pokud jste s nimi však již obeznámeni, můžete přejít do jakékoli jiné sekce, která se týká toho, čeho se snažíte dosáhnout. Každá sekce obsahuje úryvek příkazového řádku k dosažení toho, co uvádí podnadpis.
Začněme!
Sekce 1: Porozumění žádostem o podpis certifikátu (CSR)
Žádost o podpis certifikátu je nezbytným předpokladem pro získání SSL certifikátu od certifikační autority (CA). CSR obsahuje veřejný klíč z páru klíčů a některé další informace. Ty je třeba vložit do certifikátu během procesu podepisování.
Během generování CSR budete vyzváni k zadání identifikačních údajů, které jsou známé jako Distinguished Name (DN). DN obsahuje pole nezbytná pro certifikát, jako je Common Name (CN), což je přesný plně kvalifikovaný doménový název (FQDN) hostitele, který bude certifikát používat. Ostatní pole DN slouží pro další informace, jako je země, stát, název lokality a název organizace nebo firmy, pokud generujete certifikáty specifické pro vaše podnikání. Výzvy můžete přeskočit tím, že informace poskytnete ze souboru nebo prostřednictvím příkazového řádku.
Podívejte se na příklad výzvy k zadání informací CSR na snímku obrazovky níže:
|
1 2 3 4 5 6 7 |
Země Název (2 písmenný kód) [AU]:CH Stát nebo Provincie Název (celý název) [Some-State]:Zürich Lokalita Název (např, město) []:Old Town Organizace Název (např, společnost) [Internet Widgits Pty Ltd]:Example Cloudsigma Společnost Organizační Složka Název (např, sekce) []:Cloud Technology Běžný Název (e.g. server FQDN nebo VAŠE jméno) []:cloudsigma.com E-mailová adresa []:info@cloudsigma.com |
Informace můžete poskytnout v jednorádkovém příkazu, abyste se vyhnuli výzvám, a to přidáním příznaku -subj, jak je znázorněno níže, a zadáním informací pro jednotlivá pole:
|
1 |
-subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Výše uvedený příkaz přebírá stejné informace, jaké jsou zobrazeny v příkladu kódu s výzvami k zadání informací CSR.
Sekce 2: Generování žádostí o podpis certifikátu
V této sekci se budeme zabývat příkazy OpenSSL, které můžete použít ke generování CSR a soukromých klíčů. CSR jsou nezbytné pro vyžádání SSL certifikátů od certifikační autority (CA).
Generování soukromého klíče a žádosti o podpis certifikátu
Tuto metodu můžete použít, pokud chcete, aby certifikační autorita vydala SSL certifikát k zabezpečení vašeho Apache nebo Nginx server pro obsluhu provozu přes HTTPS, tj. HTTP s TLS. CSR vygenerovaný tímto příkazem lze odeslat certifikační autoritě (CA) a požádat o SSL certifikát podepsaný CA. Můžete postupovat podle našich podrobných návodů, jak nastavit vaše Apache nebo Nginx servery na Ubuntu.
Zadejte do terminálu následující příkaz pro vygenerování 2048bitového soukromého klíče (domain.key) a CSR (domain.csr) od nuly:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr |
Odpovězte na výzvy svými konkrétními informacemi pro CSR. Volitelně můžete k příkazu přidat příznak -subj, abyste se výzvám vyhnuli:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Příznak -newkey rsa:2048 určuje, že klíč by měl být vygenerován pomocí 2048bitového algoritmu RSA. Příznak -nodes značí, že soukromý klíč nebude šifrován heslem. Je zde také možnost -new, která sice není zahrnuta, ale je implicitně předpokládána, což značí, že se generuje nový CSR.
Generování žádosti o podpis certifikátu (CSR) z existujícího soukromého klíče
Pokud již máte soukromý klíč, můžete k vygenerování CSR použít tuto metodu. Poté jej použijete k vyžádání SSL certifikátu od CA. Zadejte následující příkaz pro vygenerování nového CSR (domain.csr) pomocí existujícího soukromého klíče (domain.key):
|
1 |
openssl req -key domain.key -new -out domain.csr |
Odpovězte na výzvy svými konkrétními informacemi pro CSR. Volitelně můžete k příkazu přidat příznak -subj k příkazu, abyste se vyhnuli výzvám:
|
1 |
openssl req -key domain.key -new -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Příznak -key určuje existující soukromý klíč (domain.key), který se má použít k vygenerování nového CSR. Příznak -new značí, že se generuje nový CSR.
Generování žádosti o podpis certifikátu (CSR) z existujícího certifikátu a soukromého klíče
Pokud již máte existující certifikát, který byste chtěli použít k vygenerování CSR, můžete použít tuto metodu. Tato metoda může být užitečná, pokud vy nebo vaše CA ztratíte původní CSR a potřebujete jej vygenerovat pomocí dříve zadaných informací CSR, aniž byste je museli zadávat znovu. Příkaz extrahuje informace z existujícího certifikátu. Zadejte do terminálu následující příkaz pro vytvoření nového CSR (domain.csr) pomocí existujícího certifikátu (domain.crt) a existujícího soukromého klíče (domain.key):
|
1 |
openssl x509 -in domain.crt -signkey domain.key -x509toreq -out domain.csr |
Volba -x509toreq značí, že k vygenerování CSR používáte certifikát X509.
Sekce 3: Generování SSL certifikátů
V některých situacích můžete chtít použít SSL certifikát bez potíží se získáváním certifikátu podepsaného CA. Tato sekce vysvětluje, jak můžete podepsat své vlastní certifikáty. Je to platné a zdarma. Tyto certifikáty se označují jako samopodepsané certifikáty, a jsou poměrně běžné.
Samopodepsaný certifikát je podepsán vlastním soukromým klíčem. Jak samopodepsané certifikáty, tak certifikáty podepsané CA fungují stejně dobře pro šifrování dat a webového provozu. U samopodepsaných certifikátů však uživatelé obvykle ve svých prohlížečích obdrží varování, že certifikát není důvěryhodný. Samopodepsané certifikáty proto můžete používat pro webové stránky, které si s uživateli nevyměňují citlivé informace, nebo na neprodukčních serverech. Níže naleznete příkazy OpenSSL, které můžete použít k vygenerování samopodepsaných certifikátů.
- Generování samopodepsaného certifikátu
Tuto metodu můžete použít ke generování SSL certifikátu pro zabezpečení vašeho serveru Apache nebo Nginx. Tím zajistíte, že provoz bude probíhat přes HTTPS nebo HTTP přes TLS, aniž byste museli žádat certifikační autoritu (CA) o podepsání certifikátu:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt |
Odpovězte na výzvy zadáním konkrétních informací pro CSR. Volitelně můžete k příkazu přidat příznak -subj, abyste se vyhnuli výzvám:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Příznak -x509 označuje vytvoření certifikátu podepsaného sám sebou (self-signed). Volba -days 365 určuje počet dní, po které bude certifikát platný. V tomto případě je to 365 dní. Můžete si také zvolit jiný počet dní. Tento příkaz vygeneruje dočasné CSR pro uložení informací, které byste měli s certifikátem asociovat.
- Generování certifikátu podepsaného sám sebou z existujícího soukromého klíče
Tato metoda vám pomůže vygenerovat certifikát podepsaný sám sebou z vašeho již existujícího soukromého klíče. Pro vygenerování certifikátu podepsaného sám sebou (domain.crt) pomocí existujícího soukromého klíče (domain.key):
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt |
Zadejte do výzev své konkrétní informace pro CSR. Volitelně můžete k příkazu přidat příznak -subj, abyste se vyhnuli výzvám:
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Příznak -x509 označuje vytvoření certifikátu podepsaného sám sebou. Volba -days 365 určuje počet dní, po které bude certifikát platný. V tomto případě je to 365 dní. Můžete si také zvolit jiný počet dní. Volba -new spustí výzvu k zadání informací pro CSR.
Sekce 4: Zobrazení certifikátů
Certifikáty a soubory CSR jsou kódovány a ukládány s příponou .pem. Zkratka znamená Privacy-Enhanced Mail. Jedná se o formát souboru pro ukládání a odesílání kryptografických klíčů, certifikátů a dalších klíčových dat. Soubory PEM nejsou pro lidi snadno čitelné. V této sekci najdete příkazy, které můžete použít k zobrazení záznamů ze zakódovaných souborů PEM.
- Zobrazení souborů CSR
Zadejte následující příkaz pro zobrazení a ověření obsahu CSR (domain.csr) ve vašem terminálu:
|
1 |
openssl req -text -noout -verify -in domain.csr |
Například výše uvedený příkaz může vypsat něco takového:

- Zobrazení záznamů certifikátu
Zadejte následující příkaz pro zobrazení obsahu certifikátu (domain.crt):
|
1 |
openssl x509 -text -noout -in domain.crt |
Výše uvedený příkaz může vypsat něco takového:

- Ověření, zda byl certifikát podepsán certifikační autoritou
Chcete-li ověřit, zda byl certifikát (domain.crt) podepsán konkrétním certifikátem CA (ca.crt), zadejte následující příkaz:
|
1 |
openssl verify -verbose -CAfile ca.crt domain.crt |
Sekce 5: Soukromé klíče
Pokud hledáte příkazy OpenSSL potřebné pro vytváření a ověřování soukromých klíčů, tato sekce je pro vás.
- Vytvoření soukromého klíče
Chcete-li vytvořit heslem chráněný 2048bitový soukromý klíč (domain.key), zadejte do terminálu následující příkaz:
|
1 |
openssl genrsa -des3 -out domain.key 2048 |
Příkaz vás vyzve k zadání hesla pro dokončení procesu. Viz snímek obrazovky níže:

- Ověření soukromého klíče
Chcete-li ověřit platnost soukromého klíče (domain.key), zadejte do terminálu následující příkaz:
|
1 |
openssl rsa -check -in doména.klíč |
Poté budete muset zadat heslo. Pokud je soukromý klíč šifrovaný a zadáte správné heslo, na terminálu se zobrazí nešifrovaný klíč. Viz snímek obrazovky níže:

- Ověření, zda soukromý klíč odpovídá certifikátu a CSR
Pokud chcete zkontrolovat, zda soukromý klíč (domain.key) odpovídá certifikátu (domain.crt) a CSR (domain.csr), zadejte do terminálu následující příkazy:
|
1 2 3 |
openssl rsa -noout -modulus -in domain.key | openssl md5 openssl x509 -noout -modulus -in domain.crt | openssl md5 openssl req -noout -modulus -in domain.csr | openssl md5 |
Pokud si všimnete, že výstup výše uvedených příkazů je identický, pak je možné, že soukromý klíč, certifikát a CSR spolu souvisí.
- Šifrování soukromého klíče
Pokud máte nešifrovaný soukromý klíč (unencrypted.key) a chcete získat šifrovanou verzi klíče (encrypted.key), zadejte do terminálu následující příkazy:
|
1 |
openssl rsa -des3 -in unencrypted.key -out encrypted.key |
Příkaz vás vyzve k zadání hesla pro zašifrování soukromého klíče.
- Dešifrování soukromého klíče
Pokud máte šifrovaný soukromý klíč (encrypted.key) a chcete získat jeho dešifrovanou verzi (decrypted.key), zadejte do terminálu následující příkaz:
|
1 |
openssl rsa -in encrypted.key -out decrypted.key |
Příkaz vás vyzve k zadání hesla pro šifrovaný klíč. Pokud zadáte správné heslo, bude dešifrován. Výstup bude uložen do decrypted.key.
Část 6: Převod formátů certifikátů
Možná jste si všimli, že dosud jsme pracovali s X.509 certifikáty, které jsou kódovány v ASCII PEM. I když je to v pořádku, existuje celá řada dalších typů kódování certifikátů a kontejnerů, které můžete použít. V některých aplikacích můžete dávat přednost určitým formátům před jinými. Některé různé formáty navíc mohou obsahovat více položek, jako je soukromý klíč, CSR a certifikát podepsaný certifikační autoritou (CA), v jednom souboru. OpenSSL můžete také použít k převodu mezi různými formáty certifikátů. Čtěte dále a dozvíte se některé příkazy OpenSSL pro převod formátů certifikátů.
- Převod PEM na DER
DER (Distinguished Encoding Rules) je binární kódování pro X.509 certifikáty a soukromé klíče. Chcete-li převést certifikát kódovaný v PEM (domain.crt) na certifikát kódovaný v DER (domain.der), zadejte následující příkaz:
|
1 |
openssl x509 -in domain.crt -outform der -out domain.der |
Většinu případů použití formátu kódování DER najdete v programovacím jazyce Java. Postupujte podle tohoto návodu pro rychlé nastavení Javy na vašem serveru Ubuntu.
- Převod DER na PEM
Chcete-li převést certifikát kódovaný v DER (domain.der) na certifikát PEM (domain.crt), zadejte následující příkaz:
|
1 |
openssl x509 -inform der -in domain.der -out domain.crt<code> |
- Převod PEM na PKCS7
Možná budete chtít přidat certifikáty PEM, například domain.crt a ca-chain.crt do souboru PKCS7 (domain.p7b). Zde je příkaz, jak toho dosáhnout:
|
1 |
openssl crl2pkcs7 -nocrl -certfile domain.crt -certfile ca-chain.crt -out domain.p7b |
Můžete použít volbu -certfile vícekrát k určení certifikátů, které se mají přidat do souboru PKCS7. Soubory PKCS7 jsou relevantní především pro úložiště klíčů Java (Java Key stores) a Microsoft IIS. Jsou známé také jako soubory P7B, jedná se o soubory ASCII, které mohou obsahovat certifikáty a certifikáty podepsané certifikační autoritou (CA).
- Převod PKCS7 na PEM
Chcete-li převést soubor PKCS7 (domain.p7b) na soubor kódovaný v PEM (domain.crt), zadejte do terminálu následující příkaz:
|
1 |
openssl pkcs7 -in domain.p7b -print_certs -out domain.crt |
- Převod PEM na PKCS12
Chcete-li zkombinovat soukromý klíč (domain.key) a certifikát (domain.crt) do PKCS12 soubor (domain.pfx), zadejte následující příkaz:
|
1 |
openssl pkcs12 -inkey domain.key -in domain.crt -export -out domain.pfx |
Příkaz vás vyzve k zadání exportních hesel, která můžete volitelně ponechat prázdná. K souboru PKCS12 můžete připojit více certifikátů tak, že je spojíte do jednoho souboru PEM (domain.crt). PKCS12 je také známý jako PFX a nejčastěji se používá v Microsoft IIS.
- Převod PKCS12 na PEM
Chcete-li převést soubor PKCS12 (domain.pfx) na formát kódovaný v PEM (domain.combined.crt), zadejte následující příkaz:
|
1 |
openssl pkcs12 -in domain.pfx -nodes -out domain.combined.crt |
Soubor PEM vytvořený výše uvedeným příkazem obsahuje všechny položky, které soubor PKCS12 obsahoval.
Sekce 7: Kontrola verze OpenSSL
Verze jakéhokoli spuštěného softwaru může ovlivnit možnosti aplikací, které používáte. Proto je nutné verzi zjistit. Totéž platí pro OpenSSL. Některé možnosti příkazového řádku mohou v jedné verzi chybět a v jiné být k dispozici. Chcete-li zobrazit verzi OpenSSL, kterou používáte, zadejte následující příkaz:
|
1 |
openssl version -a |
Níže je uveden výstup, který jsme obdrželi při spuštění výše uvedeného příkazu během vytváření tohoto návodu:
|
1 2 3 4 5 6 7 8 |
OpenSSL 1.1.1i 8 Dec 2020 built on: Sat Dec 19 15:39:47 2020 UTC platform: linux-x86_64 options: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr) compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG OPENSSLDIR: "/usr/local/ssl" ENGINESDIR: "/usr/local/lib/engines-1.1" Seeding source: os-specific |
Níže naleznete skutečný snímek obrazovky:

Závěr
V tomto návodu jsme si vysvětlili, co je OpenSSL, probrali jsme žádosti o podpis certifikátu (CSR) a některé z klíčových příkazů OpenSSL, které můžete použít ve svém serverovém prostředí.
Chybí nám nějaký zásadní příkaz, nebo máte potíže s některým z příkazů při nastavení serveru na CloudSigma? Neváhejte kontaktovat náš tým zákaznické podpory 24/7 na chatu v reálném čase a probrat to.
Příjemnou práci!
Komentáře
Zatím žádné komentáře. Buďte první.