V nedávno publikovaném článku Skryté vnady protokolu SSL byly naznačeny digitální certifikáty a práce s nimi, následující řádky a odstavce se na tuto problematiku zaměří z větší blízkosti. Jelikož opakování je matkou moudrosti, tak pouze pro připomenutí uveďme, že certifikáty jednoznačně spojují šifrovací klíče s jejich vlastníky a dovolují v dostatečné míře ověřit, komu patří.
Pravděpodobně nejznámějším typem digitálních certifikátů současnosti je X.509 (RFC 3280), původně návrh ITU-T uvedený v roce 1988 ve spojitosti se standardem X.500 (definuje adresářové služby). Struktura certifikátu X.509 verze 3 je následující (v závorkách jsou uvedeny odpovídající RFC ekvivalenty):
- Číslo verze (version)
- Sériové číslo (serialNumber)
- ID podpisového algoritmu (signature)
- Vydavatel (issuer)
- Platnost (validity)
- Od (notBefore)
- Do (notAfter)
- Subjekt (subject)
- Informace o veřejném klíči subjektu (subjectPublicKeyInfo)
- Algoritmus veřejného klíče subjektu (algorithm)
- Veřejný klíč subjektu (subjectPublicKey)
- Jednoznačná identifikace vydavatele (issuerUniqueID)
- Jednoznačná identifikace subjektu (subjectUniqueID)
- Rozšíření certifikátu (extensions)
- ID podpisového algoritmu certifikátu (signatureAlgorithm)
- Digitální podpis certifikátu (signatureValue)
Jak naznačuje horizontální oddělovač před posledními dvěma položkami, je celý certifikát (tedy všechny jeho prvky) digitálně podepsanou posloupností. Tento fakt je lépe vidět z části formálního zápisu v abstraktním jazyce ASN.1:
Certificate ::= SEQUENCE { bsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signatureValue BIT STRING } TBSCertificate ::= SEQUENCE { . . . } Číslo verze certifikátu (version) neodpovídá ničemu jinému než použité variantě X.509 a může nabývat hodnot 0 (verze 1), 1 (verze 2), nebo konečně 2 (verze 3). Sériové číslo certifikátu (serialNumber) musí z definice být celé číslo.
Identifikátor podpisového algoritmu (signature) obsahuje dvě položky, a sice označení algoritmu (např. DSA) spolu s jím požadovanými parametry (bližší informace o používaných identifikátorech viz RFC 3279). Použitý algoritmus musí být shodný s podpisovým algoritmem celého certifikátu (signatureAlgorithm).
Položka Vydavatel (issuer) obsahuje identifikaci organizace, která certifikát vydala a podepsala, a podobně prvek Subjekt (subject) identifikuje toho, komu byl certifikát vydán. K tomu se používají speciální jedinečná jména (definováno v X.501), jež se označují jako Distinguished name (DN). Jedinečné jméno se skládá z posloupnosti relativních jedinečných jmen (Relative Distinguished Name) tvaru identifikátor = hodnota, kde identifikátory na levé straně rovnosti mohou být například Country ©, Organization (O), Common Name (CN) apod. Výsledkem je pak kýžená stromová struktura:
Webový prohlížeč pak samozřejmě dovoluje tyto informace u každého certifikátu také zobrazit:
Položky jednoznačné identifikace vydavatele (issuerUniqueID) a předmětu (subjectUniqueID) byly zavedeny „až“ v X.509 verze 2 a slouží k řešení problémů s několikanásobným použitím stejných hodnot issuer či subject. Konečně rozšíření (extensions)spatřila světlo světa spolu s třetí verzí X.509 a dovolují přidat k certifikátu další položky. Vlastní testovací certifikát s omezenou dvoutýdenní dobou platnosti si lze na počkání vytvořit například na stránkách První certifikační autority, a.s., kdy vám během několika málo chvil vytvořený certifikát bude doručen e-mailem.
Webové prohlížeče samozřejmě umožňují nové certifikáty importovat, exportovat a spravovat. Fyzický soubor s certifikátem lze rozeznat, například podle následujících přípon:
- .CER, .DER certifikát kódovaný podle DER (Distinguished Encoding Rules, používá se pro zakódování dat před jejich podepsáním)
- .PEM údaje certifikátu kódovány v Base64 a uzavřeny mezi řetězce -----BEGIN CERTIFICATE----- a -----END CERTIFICATE-----
- .P7B, .P7C, .PK7 údaje kódovány podle PKCS#7 (Public Key Cryptography Standard, RFC 2315) a uzavřeny mezi řetezce -----BEGIN PKCS7----- a -----END PKCS7-----
- .PFX, .P12 údaje kódovány dle PKCS#12