Certifikační autorita s OpenSSL

Jak už to tak bývá, ne všechno si pamatuju, a tak si dělám poznámky, abych neobjevoval znova již objevené :). Dneska je již samozřejmostí, vše alespoň trochu důležité šifrovat či podepisovat, i když následující návod využijeme spíše na svých serverech pro generování certifikátů služeb, např. HTTPS, POP3S, IMAPS, SMTPS, FTPS, ... nebo taky pro OpenVPN, kde se klient prokazuje certifikátem.

K čemu všemu slouží elektronický podpis, certifikační autority a v našem případě nejrozšířenější X.509 certifikáty se dozvíte třeba zde.

Uvedl bych zde několik postřehů:

  • všechny privátní klíče ponechané na serveru musí být 400 (r--------)
  • pokud není nutné jinak, chraňte privátní klíče heslem
  • pro používání certifikátu v poštovních klientech je nutné do openssl.cnf přidat
extendedKeyUsage        = clientAuth,emailProtection

Pro usnadnění práce používám několik skriptů.

ca_req

vygeneruje žádost a privátní klíč

openssl req -new -out cert.req -keyout cert.key -nodes

ca_sign

podepíše žádost -> certifikát

openssl ca -out cert.crt -verbose -infiles cert.req
cat cert.crt cert.key > cert.pem
chmod 600 cert.key cert.pem

ca_export_outlook

vygeneruje .p12 soubor včetně privátního klíče vhodný pro import do poštovního klienta

openssl pkcs12 -export -in cert.crt -inkey cert.key -out cert.p12

Soubor xx.pem se nám uloží do adresáře new_certs, přesuneme ho do certs. Soubory .pem a .p12 je vhodné si schovat, ostatní se musí vymazat.

Prodloužení platnosti certifikátu

Ze starého certifikátu můžeme za pomoci privátního klíče vygenerovat zpět žádost o certifikát. Použijeme pro to příkaz

openssl x509 -x509toreq -in cert.pem -signkey key.pem -out cert.req

Pro podepsání této žádosti je nutné ještě odvolat původní certifikát, což provedeme

openssl ca -revoke cert.pem

Nyní podepíšeme nový certifikát za použití skriptu ca_sign a jsme téměř hotoví. Teď totiž přijde trošku náročnější práce, vygenerovat všechny potřebné soubory, nahrát je místo starých a restartovat odpovídající služby.

Jak vytvořit .pem .crt nebo .key

Máme několik druhů souborů:

  1. certifikát (pouze veřejný klíč) - pojmenování zpravidla .crt nebo cert.pem
  2. certifikát včetně privátního klíče - .pem, práva 600
  3. privátní klíč - .key nebo key.pem

Jednotlivé soubory je mezi sebou možné konvertovat.

Pokud chceme ze souboru dostat privátní klíč a uložit ho někam, použijeme:

openssl rsa -in cert.pem -out cert.key

Pokud chceme ze souboru dostat veřejný klíč včetně informací o něm:

openssl x509 -in cert.pem -out cert.crt -text

Nyní pokud chceme spojit veřejný a privátní klíč do stejného souboru:

cat cert.crt > cert.pem
cat cert.key >> cert.pem

Při prodlužování doby platnosti budeme tyto operace pravděpodobně potřebovat, neboť v souborech, kde jsou obě části dohromady, máme uloženu aktuální privátní část aktuálního klíče, ale starý certifikát. Postup bude vypadat nějak takto:

openssl rsa -in old.pem -out cert.key
openssl x509 -in new.pem -out cert.pem -text
cat cert.key >> cert.pem
chmod 600 cert.key cert.pem

Komentáře

Prodloužení platnosti self-signed certifikátu

Stejně jako u jiného certifikátu vytvoříme z certifikátu zpět request:

openssl x509 -x509toreq -in server.crt -signkey server.key -out server.req

Z requestu vyrobíme 5 let platný self-signed certifikát:

openssl x509 -out server.crt -signkey server.key -req -in server.req -out server.crt -days 1825

dobrý článek, docela mi

dobrý článek, docela mi do začátku pomohl, nicméně, pak jsem objevil XCA, což je velmi dobře udělané GRAFICKÉ rozhraní pro správu certifikátů, CRl a podobně.

Celkově lze říct, že openSSl je mocný a schopný nástroj, nicméně i v tomto OpenSource projektu se již objevily chybičky a asi i kompromitace, no, u těch propietárních SSL produktů jsem si kompromitaci téměř jist.