Certifikáty s veřejným klíčem

Většina vývojářů se dříve či později bude muset vypořádat s certifikáty. Ale co je to vlastně certifikát? Má to něco společného s ověřováním, že? V tomto příspěvku se pokusíme vysvětlit, co to vlastně certifikát je.

Jako zodpovědný a bezpečnostně uvědomělý vývojář samozřejmě používáte pro veškerou komunikaci protokol HTTPS, ale uskalí tohoto přístupu může být, že při připojení k serveru se může objevit chyba: "Certifikát není důvěryhodný".

Certifikát je jednou ze součástí infrastruktury veřejného klíče (PKI). Kryptografie s veřejným klíčem, jako je RSA, umožňuje dvěma stranám navázat šifrované spojení, aniž by musely předem sdílet tajný šifrovací klíč. Více o asymetrické kryptografii v samostatném článku.

Ja může Alice poznat, že veřejný klíč patří Bobovi, a ne někomu jinému, kdo chce, aby si myslela, že je Bob? Tady přichází na scénu certifikáty! Certifikát je něco, co obsahuje Bobův veřejný klíč a říká, že "toto je Bobův veřejný klíč". Aby však toto tvrzení bylo důvěryhodné, potřebujeme nějakou důvěryhodnou třetí stranu, která může zaručit, že se skutečně jedná o Bobův veřejný klíč. K tomu slouží certifikační autority (CA), jako jsou Buypass, Let's Encrypt a DigiCert, jejichž úkolem je ověřit, že veřejný klíč skutečně patří deklarovanému vlastníkovi, a poté vydat certifikát, který to tvrdí. Pokud důvěřujeme certifikační autoritě, která certifikát vydala, pak můžeme věřit, že se skutečně jedná o Bobův veřejný klíč a že skutečně hovoříme s Bobem, pokud je schopen dešifrovat zprávy zašifrované jeho veřejným klíčem.

Kryptografie s veřejným klíčem je bohužel velmi náročná na zdroje. TLS (nebo HTTPS, což jednoduše znamená HTTP šifrované pomocí TLS/SSL) používají kryptografii veřejného klíče pouze během počátečního handshake pro odsouhlasení tajného symetrického šifrovacího klíče a pro ověření toho, s kým hovoří. Autentizace při handshake je založena na schopnosti stran dešifrovat zprávy, které byly zašifrovány jejich veřejným klíčem, nikoli na schopnosti předložit platné certifikáty (certifikáty jsou veřejnou informací).

Řešením původně zmíněného problému "Certifikát není důvěryhodný" je, jak již možná víte, přidání certifikátu certifikační autority, která vydala certifikát předložený rozhraním API, do úložiště důvěryhodnosti vaší aplikace, pokud se jedná o certifikační autoritu, které důvěřujete.

Související