Certifikát se často přirovnává k občanskému průkazu. Zatímco občanský průkaz se vydává v tištěné podobě, tak certifikát se popisuje jako struktura v jazyce ASN.1 a mezi počítači se přenáší v kódování DER (podmnožina BER). Certifikát je možné vypsat i v textovém tvaru, ale s tímto případem se setkáváme zřídka - např. certifikát samotné certifikační autority může být vytištěn v textovém tvaru a ověřen (neelektronickým) notářem a podepsán rukou psaným podpisem.
Zásadní rozdíl mezi občanským průkazem a certifikátem je, že občanský průkaz neobsahuje šifrovací klíč.
Všeobecně se používá struktura certifikátu zavedená doporučením ITU (dříve CCITT) X.509. Původní verze číslo 1 certifikátu X.509 z roku 1988 byla postupně rozšířena až do dnes nejběžnější verze 3.
Verze 1 certifikátu X.509 definuje tzv. certifikát, kdežto další verze definují tzv. "rozšířené certifikáty". Rozšířené certifikáty mohou obsahovat další volitelné informace - tzv. OPTIONS.
Kromě certifikátů podle doporučení X.509 a kódovaných v DER se v praxi můžeme setkat i s certifikáty jiných formátů - např. EDI či PKSC#7. Forma takový certifikátu je sice jiná, ale princip zůstává stejný.
Nejprve si popíšeme strukturu certifikátu, později si teprve objasníme princip mechanizmu použití certifikátu.
Struktura certifikátu je vcelku logická - v mohém připomíná údaje z
občanského průkazu:
Položka struktury certifikátu | Přirovnání k položce občanského průkazu | ASN.1 syntaxe |
Certificate ::= SIGNED SEQUENCE{ | ||
Verze
|
Verze (federální, červený český, karta, ...) | version [0] Version DEFAULT v1988, |
Sériové číslo | Číslo a série občanského průkazu | serialNumber SerialNumber, |
Algoritmus použitý pro podpis | Razítko (beran) přes fotografii | signature Signature, |
Vydal (identifikace certifikační autority podle X.500) | Vydal | issuer Name, |
Platnost od-do | Platnost | validity Validity, |
Jméno a adresa (identifikace vlastníka) | Jméno a adresa | subject Name, |
Veřejný klíč | - | subjectPublicKeyInfo SubjectPublicKeyInfo} |
Kde:
SEQUENCE {
coMaBytPodepsano OCTED STRING,
identifikatorAlgoritmu AlghoritmIdentifier,
podpis
OCTED STRING}
kde AlghoritmIdentifier určuje algoritmus s jeho parametry, který je
použit k podpisu:
AlgorithmIdentifier ::== SEQUENCE {
Nyní píšeme o certifikátech verze 1. Certifikáty vyšších verzí ("rozšířené
certifikáty") jsou rozšířeny o další volby. V předchozí definici tyto volby
nejsou uvedeny.
Příklad
(SerialNumber):
INTEGER
:2D
02 01 2d
Doba platnosti certifikátu bývá řádově v týdnech až měsících.
Příklad (Validity):
SEQUENCE
30 1e
UTCTIME
:970804050456Z
17 0d 39 37 30 38 30 34 30
35 30 34 35 36 5a
UTCTIME
:980203050456Z
17 0d 39 38 30 32 30 33 30
35 30 34 35 36 5a
Příklad (issuer):
SEQUENCE
SET
SEQUENCE
OBJECT
:countryName
PRINTABLESTRING
:CZ
SET
SEQUENCE
OBJECT
:organizationName
PRINTABLESTRING
:PVT a.s.
SET
SEQUENCE
OBJECT
:commonName
PRINTABLESTRING
:CA-PVT1
SET
SEQUENCE
OBJECT
:emailAddress
IA5STRING
:ca-oper@p70x03.brn.pvt.cz
Příklad (subject):
SEQUENCE
SET
SEQUENCE
OBJECT
:countryName
PRINTABLESTRING
:CZ
SET
SEQUENCE
OBJECT
:stateOrProvinceName
PRINTABLESTRING
:2
SET
SEQUENCE
OBJECT
:localityName
PRINTABLESTRING
:Ceske Budejovice
SET
SEQUENCE
OBJECT
:organizationName
PRINTABLESTRING
:PVT,a.s.
SET
SEQUENCE
OBJECT
:organizationalUnitName
PRINTABLESTRING
:VCU
SET
SEQUENCE
OBJECT
:commonName
PRINTABLESTRING
:Libor Dostalek
SET
SEQUENCE
OBJECT
:emailAddress
IA5STRING
:dostalek@pvt.net
SET
SEQUENCE
OBJECT
:2 5 4 12
PRINTABLESTRING
:+42 38 7747 361
Příklad (SubjectPublicKeyInfo):
SEQUENCE
30 5c
SEQUENCE
30 0d
OBJECT
:rsaEncryption
06 09 2a 86 48 86 f7
0d 01 01 01
NULL
05 00
BIT STRING
03 4b 00 30 48 02 41 00 e4
50 9e 79 da 4c 68 70 ad 60 46 2b
ea 9d bc 81 a2 04 6c 9a 3c
d6 5f 9e a5 e5 6e d5 ee 49 4a 91
1d 78 44 69 c2 18 0e d3 15
7c ae 30 75 13 9e ea 59 9d 96 bd
c3 b8 c7 3b e3 bf e8 4f b4 a3 3b
65 02 03 01 00 01
SEQUENCE
30 82 02 31
SEQUENCE
30 82 01 9a
INTEGER
:2D
02 01 2d
SEQUENCE
30 0d
OBJECT
:md5withRSAEncryption
06 09 2a 86 48 86 f7 0d 01
01 04
NULL
05 00
SEQUENCE
30 5c
SET
31 0b
SEQUENCE
30 09
OBJECT
:countryName
06 03 55 04 06
PRINTABLESTRING :CZ
13 02 43 5a
SET
31 11
SEQUENCE
30 0f
OBJECT
:organizationName
06 03 55 04 0a
PRINTABLESTRING :PVT
a.s.
13 08 50 56 54
20 61 2e 73 2e
SET
31 10
SEQUENCE
30 0e
OBJECT
:commonName
06 03 55 04 03
PRINTABLESTRING :CA-PVT1
13 07 43 41 2d
50 56 54 31
SET
31 28
SEQUENCE
30 26
OBJECT
:emailAddress
06 09 2a 86 48
86 f7 0d 01 09 01
IA5STRING
:ca-oper@p70x03.brn.pvt.cz
16 19 63 61 2d
6f 70 65 72 40 70 37 30 78 30 33 2e 62 72 6e
2e 70 76 74 2e
63 7a
SEQUENCE
30 1e
UTCTIME
:970804050456Z
17 0d 39 37 30 38 30 34 30
35 30 34 35 36 5a
UTCTIME
:980203050456Z
17 0d 39 38 30 32 30 33 30
35 30 34 35 36 5a
SEQUENCE
30 81 a9
SET
31 0b
SEQUENCE
30 09
OBJECT
:countryName
06 03 55 04 06
PRINTABLESTRING :CZ
13 02 43 5a
SET
31 0a
SEQUENCE
30 08
OBJECT
:stateOrProvinceName
06 03 55 04 08
PRINTABLESTRING :2
13 01 32
SET
31 19
SEQUENCE
30 17
OBJECT
:localityName
06 03 55 04 07
PRINTABLESTRING :Ceske
Budejovice
13 10 43 65 73
6b 65 20 42 75 64 65 6a 6f 76 69 63 65
SET
31 11
SEQUENCE
30 0f
OBJECT
:organizationName
06 03 55 04 0a
PRINTABLESTRING :PVT,a.s.
13 08 50 56 54
2c 61 2e 73 2e
SET
31 0c
SEQUENCE
30 0a
OBJECT
:organizationalUnitName
06 03 55 04 0b
PRINTABLESTRING :VCU
13 03 56 43 55
SET
31 17
SEQUENCE
30 15
OBJECT
:commonName
06 03 55 04 03
PRINTABLESTRING :Libor
Dostalek
13 0e 4c 69 62
6f 72 20 44 6f 73 74 61 6c 65 6b
SET
31 1f
SEQUENCE
30 1d
OBJECT
:emailAddress
06 09 2a 86 48
86 f7 0d 01 09 01
IA5STRING
:dostalek@pvt.net
16 10 64 6f 73
74 61 6c 65 6b 40 70 76 74 2e 6e 65 74
SET
31 18
SEQUENCE
30 16
OBJECT
:2 5 4 12
06 03 55 04 0c
PRINTABLESTRING :+42
38 7747 361
13 0f 2b 34 32
20 33 38 20 37 37 34 37 20 33 36 31
SEQUENCE
30 5c
SEQUENCE
30 0d
OBJECT
:rsaEncryption
06 09 2a 86 48 86 f7
0d 01 01 01
NULL
05 00
BIT STRING
03 4b 00 30 48 02 41 00 e4
50 9e 79 da 4c 68 70 ad 60 46 2b
ea 9d bc 81 a2 04 6c 9a 3c
d6 5f 9e a5 e5 6e d5 ee 49 4a 91
1d 78 44 69 c2 18 0e d3 15
7c ae 30 75 13 9e ea 59 9d 96 bd
c3 b8 c7 3b e3 bf e8 4f b4
a3 3b 65 02 03 01 00 01
SEQUENCE
30 0d
OBJECT
:md5withRSAEncryption
06 09 2a 86 48 86 f7 0d 01 01 04
NULL
05 00
BIT STRING
03 81 81 00 71 7d e6 c8 40 20 b1 9d 5b
72 63 f6 15 7e c0 1c
b7 57 5b 9b 1a c1 91 e6 fd 67 ec 4d ee
2f c5 73 75 d8 2e 28
3c ad a8 37 71 f5 a0 c0 3a 9b 9e df 0b
2b 3b c5 b7 e1 73 96
b3 b5 a8 89 bb 9a 26 25 58 da b6 ea b9
58 dc a1 a9 58 f3 68
58 62 53 93 2a ea 5f cd 3f 58 08 54 e4
1f 65 40 ea a0 2f dc
d7 1e 11 3a e5 0a b4 5a ef f7 af 24 60
c8 18 1e 6d 28 85 7a
6d 74 45 95 5a bc 11 e3 81 57 1e 8f
Po vynechání komentářů, nadbytečných řádků a mezer získáme hexadecimálně vyjádřený certifikát:
308202313082019a02012d300d06092a864886f70d0101040500305c310b30090603550406130243
5a3111300f060355040a130850565420612e732e3110300e0603550403130743412d505654313128
302606092a864886f70d010901161963612d6f706572407037307830332e62726e2e7076742e637a
301e170d3937303830343035303435365a170d3938303230333035303435365a3081a9310b300906
035504061302435a310a3008060355040813013231193017060355040713104365736b6520427564
656a6f766963653111300f060355040a13085056542c612e732e310c300a060355040b1303564355
311730150603550403130e4c69626f7220446f7374616c656b311f301d06092a864886f70d010901
1610646f7374616c656b407076742e6e657431183016060355040c130f2b34322033382037373437
20333631305c300d06092a864886f70d0101010500034b003048024100e4509e79da4c6870ad6046
2bea9dbc81a2046c9a3cd65f9ea5e56ed5ee494a911d784469c2180ed3157cae3075139eea599d96
bdc3b8c73be3bfe84fb4a33b650203010001300d06092a864886f70d010104050003818100717de6
c84020b19d5b7263f6157ec01cb7575b9b1ac191e6fd67ec4dee2fc57375d82e283cada83771f5a0
c03a9b9edf0b2b3bc5b7e17396b3b5a889bb9a262558dab6eab958dca1a958f368586253932aea5f
cd3f580854e41f6540eaa02fdcd71e113ae50ab45aeff7af2460c8181e6d28857a6d7445955abc11
e381571e8f
Jenže pro komunikaci mezi počítači je běžnější kódování Base64. Výsledný certifikát je pak doplněn závorkami "-----BEGIN CERTIFICATE-----" a "-----END CERTIFICATE-----". Tomuto tvaru certifikátu se někdy také říká PEM-formát:
-----BEGIN CERTIFICATE-----
MIICMTCCAZoCAS0wDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQ1oxETAPBgNV
BAoTCFBWVCBhLnMuMRAwDgYDVQQDEwdDQS1QVlQxMSgwJgYJKoZIhvcNAQkBFhlj
YS1vcGVyQHA3MHgwMy5icm4ucHZ0LmN6MB4XDTk3MDgwNDA1MDQ1NloXDTk4MDIw
MzA1MDQ1NlowgakxCzAJBgNVBAYTAkNaMQowCAYDVQQIEwEyMRkwFwYDVQQHExBD
ZXNrZSBCdWRlam92aWNlMREwDwYDVQQKEwhQVlQsYS5zLjEMMAoGA1UECxMDVkNV
MRcwFQYDVQQDEw5MaWJvciBEb3N0YWxlazEfMB0GCSqGSIb3DQEJARYQZG9zdGFs
ZWtAcHZ0Lm5ldDEYMBYGA1UEDBMPKzQyIDM4IDc3NDcgMzYxMFwwDQYJKoZIhvcN
AQEBBQADSwAwSAJBAORQnnnaTGhwrWBGK+qdvIGiBGyaPNZfnqXlbtXuSUqRHXhE
acIYDtMVfK4wdROe6lmdlr3DuMc747/oT7SjO2UCAwEAATANBgkqhkiG9w0BAQQF
AAOBgQBxfebIQCCxnVtyY/YVfsAct1dbmxrBkeb9Z+xN7i/Fc3XYLig8rag3cfWg
wDqbnt8LKzvFt+FzlrO1qIm7miYlWNq26rlY3KGpWPNoWGJTkyrqX80/WAhU5B9l
QOqgL9zXHhE65Qq0Wu/3ryRgyBgebSiFem10RZVavBHjgVcejw==
-----END CERTIFICATE-----