Zpět na blog

Základy OpenSSL: Práce se soukromými klíči, žádostmi o podpis certifikátu a SSL certifikáty

Základy OpenSSL: Práce se soukromými klíči, žádostmi o podpis certifikátu a SSL certifikáty

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:

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:

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:

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:

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):

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:

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):

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:

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:

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):

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:

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:

Například výše uvedený příkaz může vypsat něco takového:

Viewing CSR files

  • Zobrazení záznamů certifikátu

Zadejte následující příkaz pro zobrazení obsahu certifikátu (domain.crt):

Výše uvedený příkaz může vypsat něco takového:

OpenSSL

  • 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:

 

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:

Příkaz vás vyzve k zadání hesla pro dokončení procesu. Viz snímek obrazovky níže:

Creating a Private Key

  • 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:

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:

Verifying a Private Key

  • 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:

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:

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:

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:

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:

 

  • 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:

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:

 

  • 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:

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:

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:

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:

Níže naleznete skutečný snímek obrazovky:

OpenSSL

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!

author

Manpreet Singh

Autor · CloudSigma

Preslav Dobrev je kreativní designér ve společnosti CloudSigma, který se zaměřuje na konzistentní firemní identitu prostřednictvím tradičních i inovativních marketingových kanálů. Je zdatný v propojování umělecké vize se strategickým marketingem za účelem vytváření působivých příběhů značky.

Komentáře

Zatím žádné komentáře. Buďte první.