Jak snadno poznat zda certifikát a soukromý klíč patří k sobě

Generování žádosti o certikát je snadné a poměrně přímočaré. Většinou se generuje pár klíčů, jeden soukromý a jeden veřejný. Ten veřejný, společně s dalšími informacemi, tvoří žádost o certifikát, který se pošle na autoritu a ta jej podepíše (podepíše právě ty další informace jako common name apod.). I když se to nedoporučuje, jeden soukromý klíč může sloužit pro více certifikátů.

Soukromý klíč a podepsaný certifikát tak tvoří nerozlučný pár, jeden bez druhého je k ničemu. Je tedy nutno ověřit, zda daný certifikát (nebo i více certifikátů jednoho soukromého klíče) a soukromý klíč patří k sobě. Je vhodné to udělat před každou instalací nového páru certifikátu a klíče do serveru, protože pokud vzájemně nesouhlasí (což se při velkém počtu certifikátů a klíčů může snadno stát, obzvláště u autorit, které certifikáty pojmenovávají svým interním seriovým číslem a nikoliv podle common name), Apache Webserver po reloadu už nenaběhne a zbytečně se tak způsobí nedostupnost všech hostovaných webů.

Tohle je taková drobná nepříjemnost pro administátora. SSL pro Apache Webserver je přídavný modul, samotný Apache s certifikáty nepracuje. Ostatně SSL modulů s různou funkcionalitou a podporovanými protokoly, zejména u TLS, je vícero. Proto ani příkaz configtest nesrovnalost v certifikátech neodhalí. Takže, po neúspěšném startu Apache (kterému nenastartoval požadovaný modul mod_ssl), je nutné prohledat error log. Tam je to sice poměrně snadno nalezitelné, ale weby jsou nějakou tu minutku nedostupné.

Pár klíče a certifikátu lze snadno prověřit pomocí dvojice příkazů openssl, oba vypisují modul klíče (modul je společná část obou klíčů, viz generování klíčů v RSA).

Modul z certifikátu:

$ openssl x509 -in www.domena.cz.crt -noout -modulus
Modulus=C59385291A1A9C063B9E...

Modul ze soukromého klíče:

$ openssl rsa -in www.domena.cz.key -noout -modulus
Modulus=C59385291A1A9C063B9E...

Pokud jsou moduly stejné, jedná se platný pár soukromého klíče a certifikátu.

Příspěvek byl publikován v rubrice SSL. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

6 komentářů: Jak snadno poznat zda certifikát a soukromý klíč patří k sobě

  1. lzap napsal:

    cat www.domena.cz.crt www.domena.cz.key > www.domena.cz.both.crt

    Ačkoli ne každý software s tím takto umí pracovat, může to být trošku zrádné.

    • Heron napsal:

      Jasně, ale tohle můžeš udělat až ve chvíli, kdy víš, který certifikát patří ke kterému klíči.

      Potom taky, to je třebas u intermediate certifikátů, Apache je akceptuje také v jednom souboru, ale pouze v tom pořadí, jak jde jejich hierarchie (certificate chain). (Tohle je taky „prdel“, každý prohlížeč se chová v případě, že server nedodá certificate chain trochu jinak, některý si je umí dotáhnout, jiné si je v případě prvního použití nacachují apod. Dost špatně se to debuguje. Jde to i pomocí openssl ale je to opruz.)

      • lzap napsal:

        Jo pravda, ty jich máš asi víc :-) My naštěstí jen pár kousků většinou. Parafrázoval bych kolegu: „Certs are easy!“ :-D

        • Heron napsal:

          Certs are really easy, ale ty věci okolo jsou opruz.

          Už aby se zavedla podpora v prohlížečích pro certifikáty uložené v DNS. Nepřijde mi úplně správné (od certifikačních autorit) si účtovat 1700Kč za nejlevnější certifikát bez ověření. Vlastně to vybírají jen za to, že mají root CA v prohlížeči.

          http://www.nic.cz/page/1149/vysel-dalsi-internetovy-standard-podepsany-cz.nic/

          Tohle umožní komukoliv si do DNS uložit certifikáty svých serverů, což bude jednak levné, ale hlavně to může umožnit rozmach SSL komunikace (každý web bude moci mít platný certifikát) a také DNSSECu.

    • Heron napsal:

      Tyjo, hloupej WordPress. Chtěl jsem to upravit, aby to nebyl odkaz a http://, ale ono je to uložený správně. Asi to dělá šablonovancí systém při renderu stránky. Tak tohle neopravím.

  2. Pingback: Jak poznat, zda certifikát podepsala daná autorita | Heronovo

Komentáře nejsou povoleny.