11.7. A tanúsítvány felépítése

A PKI a gyakorlatban sok különböző szolgáltató közreműködését jelenti, amit alkalmazások széles skálája vesz igénybe. Mindez szükségessé teszi az illeszkedő infrastruktúra komponensek, eszközök, protokollok és alkalmazások szabványosítását.

A felmerült igények nyomán, mivel a szabványosítás folyamatainak egészét nem felügyelte egy központi szervezet, több kezdeményezés született az eljárás különböző részeire, amik az idők folyamán az ipar de facto szabványaivá váltak. Az RSA cég, mely tevékenyen közreműködött a nyilvános kulcsú kriptográfián alapuló technológiák terjesztésében, ugyanezen technológiák szabványosításában is szerepet vállalt. Ezen törekvések eredményeképpen születtek meg a PKCS ajánlások (Public Key Cryptography Standard – Nyilvános Kulcsú Kriptográfiai Szabvány). Az International Telecommunication Unit (ITU) nemzetközi távközlési szervezet nevéhez fűződik az X.509 jelű ajánlás, amely a nyilvános kulcsú tanúsítványok formátumát határozza meg. Az Internet Engineering Task Force (IETF) pedig PKIX nevű szabványkészletével járult hozzá a folyamathoz. A PKIX készlet az RFC 2459 jelű dokumentum révén kapcsolódik az ITU ajánlásaihoz, nevezetesen az X.509 szabványnak megfelelő tanúsítvány leírását adja meg.

Ebben a részben az X509 -es szabványnak megfelelő tanúsítványokról lesz szó. Első lépésben áttekintjük, hogy a tanúsítványainknak milyen feltételeknek kell eleget tennie, hogy a publikus kulcsú infrastruktúrában fel tudjuk őket használni, szó lesz az X509 -es szabvány kialakulásáról. Végül a tanúsítvány egyes részeit és a felépítését vesszük górcső alá. A struktúra ismertetéséhez az ASN.1 jelölésrendszert fogjuk használni. Annak ellenére, hogy a jelölés erősen technikai jellegű, nagy előnye, hogy egyrészt lehetővé teszi a formális leírást és fogódzót ad az egyébként igen összetett szerkezet áttekintéséhez, megértéséhez, a másrészt jelenleg is érvényes RFC 2459-es ajánlás is ezt a jelölésrendszert használja, így ez a gyakorlat a továbbolvasáskor is segítséget jelenthet. A struktúra ismertetése előtt először kitérünk az X509 -es tanúsítványok formátumában gyakran előforduló építőelemekre.

11.7.1. Az X509 szabvány áttekintése

Publikus kulcsú infrastruktúrában a tanúsítványok feladata elsősorban egy adott publikus kulcs és az ahhoz tartozó titkos kulcs összekapcsolása. Ugyanakkor a tanúsítványoktól elvárjuk, hogy rendelkezzen mindazokkal a tulajdonságokkal, amikkel mondjuk egy személyi igazolvány vagy egy bankkártya. Elvárjuk, hogy az egyes személyek szervezetek azonosítását, kezelését épp olyan, de inkább nagyobb biztonsággal el tudjuk végezni, mint ahogy azt az offline megfelelőikkel természetesen és magától értetődően tesszük. Elvárjuk tőlük mindazt a biztonságot és kényelmet és természetesen azt, hogy ezt a modern hálózati környezetben hajtsa végre. Mindezek alapján az elvárásainkat egy "ideális" elektronikus tanúsítványtól kilenc pontban foglaljuk össze (citep1.21):

1. Legyen tisztán digitális objektum, legyen automatikusan feldolgozható és a világhálón továbbítható.

2. Tartalmazza a titkos kulcs tulajdonosának nevét, a céget vagy szervezetet, amelyhez az egyén tartozik, és tartalmazzon kapcsolat-felvételi információkat.

3. Azonnal meg lehessen állapítani, hogy a tanúsítványt mikor adták ki.

4. Egy megbízható harmadik fél állítsa ki és ne pedig az, akinek az identitását a tanúsítvány igazolni hivatott.

5. Mivel egy tanúsítványkiadó több tanúsítványt is kiadhat, akár ugyanazon felhasználónak is, szükséges, hogy ezeket meg lehessen különböztetni.

6. Könnyen megállapítható legyen, hogy a szóban forgó tanúsítvány eredeti, vagy pedig hamisítvány.

7. Ellenállónak kell lennie módosításokkal szemben. Nem szabad, hogy bárki is meg tudja változtatni a tartalmát.

8. Ha a tanúsítvány már lejárt, azt azonnal meg lehessen állapítani.

9. A tanúsítványból azt is azonnal látni lehessen, hogy milyen alkalmazásoknál használható.

Az első pontnál említett automatikus feldolgozás megköveteli, hogy a tanúsítványnak legyen egy közös megegyezésen alapuló szabványos formátuma. Jelenleg az általánosan elfogadott tanúsítványformátum az X509 és a későbbiekben erről lesz szó.

Az X509-es tanúsítvány az 1988-ban kiadott CCITT X509 -es ajánlásról kapta a nevét. Ebben az ajánlásban definiálták ugyanis a szabvány első verzióját. Ez a tanúsítvány még kizárólag az X500 Directory -hoz készült, annak az azonosítását volt hivatott kezelni. Később a hangsúly eltolódott egy általánosabb megközelítés felé. Idővel két a szabvány két további verziója látott napvilágot. A második verzió egyetlen újítást hozott, mégpedig a nevek újrafelhasználhatóságát. Napjainkban a legtöbb alkalmazás a harmadik verziót használja (X509v3). A harmadik verzió több kiterjesztést is definiál a formátumhoz, amelyek különböző plusz információk feltűntetését teszik lehetővé a tanúsítványban. Ezeknek a kiterjesztéseknek a használatát az egyes alkalmazások hivatottak kezelni és a vonatkozó megoldások alkalmazásról alkalmazásra változnak. Az Internetes Tanúsítványokat és a használatukat kiegészítő visszahívási listák formátumát szabványosító dokumentumot (RFC 2459) az IETF (Internet Engineering Task Force) 1999 márciusában adatta ki.

11.7.2. ASN.1 építőelemek

Objektumazonosítók

Az objektumazonosítók (Object Identifier - OID) egészek egy sorozatát jelentik amelyek egyértelműen azonosítanak valamilyen objektumot (szereplőt, szervezetet, algoritmust, bármit). Az IETF által szabványosított jelölésben az objektumazonosítót alkotó egészeket pontok választják el. Az azonosítókat alkotó egészek felépítése hierarchikus. A pontokkal elválasztott jelölésben ez a hierarchia teljesen hasonló például a domain nevek alkotta hierarchiához. Például: ha az 1.2.3.1 objektumazonosító az 1.2.3 OID alá tartozik a hierarchiában. Az objektumazonosító ASN.1 jelölése:

usdod ::= OBJECT IDENTIFIER { 1 3 6 }

Az X509 -es szabványban nem csak az egyes személyek, entitások azonosítására használunk objektumazonosítókat, de az egyes algoritmusokhoz is OID -ket rendelünk. A hierarchikus felépítés miatt az egyes tanúsítványkiadóknak körültekintően kell eljárni az objektumazonosítók kiosztásakor, hogy a létrehozott entitások ne okozzanak ellentmondást, inkonzisztenciát a rendszerben. Minden entitás a saját maga alá tartozó objektum azonosítókra való tekintettel felelős a hierarchia megtartásáért.

Algoritmusazonosítók

Az algoritmusazonosító információt hordoz az alkalmazott kriptográfiai algoritmusról, tartalmazza az algoritmus objektumazonosítóját és az esetleg szükséges paramétereket. Az algoritmusazonosító ASN.1 jelölése:

AlgorithmIdentifier :: SEQUENCE {

algorithm OBJECT IDENTIFIER,

parameters ANY DEFINED BY algorithm OPTIONAL }

Az X509-es szabványban az algoritmus azonosítókat használhatják mind a tanúsítvány aláírására használt algoritmus meghatározására illetve annak a publikus kulcsú algoritmusnak a megadására, amellyel a tanúsítványban szereplő kulcsot (illetve annak a párját) használni kívánjuk.

Könyvtársztring

A szabványban használatos sztringek megadására használt ASN.1 típus. Elsődleges célja, hogy karakterkódolástól és nyelvtől függetlenül lehessen vele szöveges információkat megadni. A Könyvtársztring ASN.1 jelölése:

DirectoryString ::= CHOICE {

teletexString TeletexString (SIZE (1..MAX)),

printableString PrintableString (SIZE (1..MAX)),

universalString UniversalString (SIZE (1..MAX)),

utf8String UTF8String (SIZE (1..MAX)),

bmpString BMPString (SIZE (1..MAX)) }

A fenti definíció azt jelenti, hogy ezen típus megadásakor választhatunk az öt alternatíva között.

printableString: a legtöbb nyomtatható ASCII karaktert tartalmazza.

TeletexString: a T.61 karakterkészletet használja. A legtöbb nyugat-európai nyelv abc-jét képes reprezentálni.

BMPString: 16 bites karakterkódolást alkalmaz, sok különböző nyelvet támogat.

UTF8String, UniversalString: több bájtos karakterkódolásokat használnak. Minden nyelvet támogatnak.

Alkalmazott típustól függetlenül két különböző könyvtársztring lehet egyenlő. Az összehasonlítás úgy történik, hogy a sztringeket előbb UTF8String-gé konvertáljuk és összehasonlítjuk. Fontos megjegyezni, hogy a PrintableString -ek összehasonlításakor a kis és nagy betűk nem számítanak.

Megkülönböztetett nevek

A megkülönböztetett nevek célja, hogy egy általános, hierarchikus elnevezési konvenciót alkosson. Mint a többi hierarchiánál, a nevek kiosztásáért és egyediségéért a neveket kiosztó egység felel. A megkülönböztetett nevek attribútum név, érték párokból áll. A legelterjedtebb formátum az X500 elnevezési konvenció. Pl.:

c=HU; st=Hungary; l=Debrecen; o=Debreceni Egyetem; ou=Informatikai Kar; cn=Teszt Elek

Itt a c az országkódra (Country), az st az államra (State), az l a helységnévre (Location name), az ou a szervezeti egységre (Organisational Unit), a cn pedig az egyszerű névre (Common Name) utal. A név megadásakor lehetőség van ennél több vagy akár kevesebb atribútumot tartalmazó név rögzítésére is. Az internetes domainneveket követő formátum például:

dc=hu; dc=unideb; dc=inf; cn=Teszt Elek

Itt a dc a domain komponenst (Domain Component) jelenti.

A megkülönböztetett nevek ASN.1 jelölése (ref rfc):

Name ::= CHOICE {

RDNSequence

}

RDNSequence ::= SEQUENCE OF RelativeDistinguishedName

ReletiveDistinguishedName ::= SET OF AttributeTypeAndValue

AttributeTypeAndValue ::= SEQUENCE {

type AttributeType,

value AttributeValue }

AttributeType ::= OBJECT IDENTIFIER

AttributeValue ::= ANY DEFINED BY AttributeType

Általános nevek

Az Általános név választási lehetőséget ad hét elterjedt elnevezési struktúra között, illetve lehetővé teszi saját névstruktúra létrahozását és annak az alkalmazását. Az általános nevek ASN.1 jelölése (ref rfc):

GeneralName ::= CHOICE {

otherName [0] OtherName,

rfc822Name [1] IA5String,

dNSName [2] IA5String,

x400Address [3] ORAddress,

directoryName [4] Name,

ediPartyName [5] EDIPartyName,

uniformResourceIdentifier [6] IA5String,

iPAddress [7] OCTET STRING,

registeredId [8] OBJECT IDENTIFIER }

OtherName ::= SEQUENCE {

type-id OBJECT IDENTIFIER,

value [0] EXPLICIT ANY DEFINED BY type-id }

EDIPartyName ::= SEQUENCE {

nameAssigner [0] DirectoryString OPTIONAL,

partyName [1] DirectoryString }

Idő

Dátumok és idő megadására szolgál. ASN.1 jelölése (ref rfc):

Time ::= CHOICE {

utcTime UTCTime, -- YYMMDDHHMMSSZ

generalTime GeneralizedTime -- YYYYMMDDHHMMSSZ

}

Az időformátumok végén a Z betű mindkét esetben "Zulu" szóra utal, nevezetesen hogy a greenwichi időt kell megadni.

A tanúsítvány felépítése

A szabvány szerint az X509 tanúsítvány három részből áll. A teljes tanúsítványt magában foglalja egy úgynevezett "módosításjelző boríték" (tamper-evident). Ez a gyakorlatban annyit jelent, hogy mindent, ami ezen a borítékon belül van, azt digitálisan aláírunk. A borítékon belül van a tanúsítvány tartalom és ez pedig opcionálisan tartalmazhat egy vagy több tanúsítvány kiegészítést.

Módosításjelző boríték

A borítékot a tanúsítvány tartalom, a tanúsítvány tartalom aláírása és az aláíró algoritmus azonosítója alkotja. A módosításjelző boríték a tanúsítvány legkülső rétege. Az X509 tanúsítvány ASN.1 jelölése (ref rfc):

Certificate ::= SEQUENCE {

tbsCertificate TBSCertificate,

signatureAlgorithm AlgorithmIdentifier,

signatureValue BIT STRING }

Tanúsítvány tartalom

Ez a tanúsítvány tényleges tartalmi része, tartalmazza a publikus kulcsot és a publikus kulcshoz tartozó privát kulcs tulajdonosának identitását. A boríték ASN.1 definíciójában a TBSCertificate utal erre a részre. Pontos szintaxisa (ref rfc):

TBSCertificate ::= SEQUENCE {

version [0] EXPLICIT Version DEFAULT v1,

serialNumber CertificateSerialNumber,

signature AlgorithmIdentifier,

issuer Name,

validity Validity,

subject Name,

subjectPublicKeyInfo SubjectPublicKeyInfo,

issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,

subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,

extensions [3] EXPLICIT Extensions OPTIONAL

}

Version ::= INTEGER { v1(0), v2(1), v3(2) }

CertificateSerialNumber ::= INTEGER

Validity ::= SEQUENCE {

notBefore Time,

notAfter Time }

UniqueIdentifier ::= BIT STRING

SubjectPublicKeyInfo ::= SEQUENCE {

algorithm AlgorithmIdentifier,

subjectPublicKey BIT STRING }

Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension

Extension ::= SEQUENCE {

extnID OBJECT IDENTIFIER,

critical BOOLEAN DEFAULT FALSE,

extnValue OCTET STRING }

version

Ez a mező jelenti az alkalmazott X509 szabványverziót. A szabvány három verziója visszafelé kompatibilis ezért ha nem adunk meg explicit verziót akkor a formátumot a legalacsonyabb alkalmazható szabványverziónak kell tekinteni. A második verzióban vezették be az egyedi azonosítókat ezért ennek a mezőnek a jelenléte megköveteli a 2-es verziószámot. Ugyanígy mivel a harmadik verzióban vezették be a tanúsítvány kiterjesztések használatát, így ezen mezők jelenlétében alapértelmezetten 3-as verziószámúnak kell tekinteni a tanúsítványra vonatkozó szabványt. A manapság használatos tanúsítványok legtöbbje a 3-as verziójú X509 szabványt követi.

serialNumber

Sorozatszám. Egy egész érték, ami az adott hitelességszolgáltató által kiadott tanúsítványok között egyedileg azonosítja a tanúsítványt.

signature

Az aláíró algoritmus azonosítója, megegyezik a boríték szereplő signatureAlgorithm értékével. Ennek a mezőnek a szerepe, hogy az aláíró algoritmus megváltoztatásának észlelését lehetővé tegye. Vegyük észre, hogy mivel a módosításjelző borítékon belül található ezért megváltoztatása esetén az aláírás ellenőrzése sikertelen lesz, míg a boríték signatureAlgorithm értékének megváltoztatását semmi sem jelzi.

issuer

Kiadó. A tanúsítványt kiadó hitelességszolgáltató megkülönböztetett neve. Habár a szabvány tetszőleges megkülönböztetett név használatát lehetővé teszi, a gyakorlatban használt tanúsítványok nagy része a megkülönböztetett névről szóló bekezdésben hozott példákhoz hasonló jellegű neveket használnak.

validity

Érvényesség. A mező értéke egy időintervallumot definiál, amelyen belül a tanúsítvány érvényes.

subject

Alany. A tanúsítványban szereplő publikus kulcshoz tartozó titkos kulcs birtokosának megkülönböztetett neve. Habár a szabvány tetszőleges megkülönböztetett név használatát lehetővé teszi, a gyakorlatban használt tanúsítványok nagy része a megkülönböztetett névről szóló bekezdésben hozott példákhoz hasonló jellegű neveket használnak.

subjectPublicKeyInfo

A publikus kulcsra vonatkozó információ. Ez a mező tartalmazza a publikus kulcsot és azon kriptográfiai algoritmus azonosítóját, amivel összefüggésben a kulcsot fel lehet használni.

issuerUniqueID, subjectUniqueID

Ezek a mezők az X509 szabvány második verziójában jelentek meg és a nevek újrafelhasználhatóságát hivatottak megoldani. A gyakorlatban azonban nem terjedt el ez a megoldás így ezek a mezők legtöbbször üresek.

extensions

Kiterjesztések. Ezek a mezők a szabvány harmadik verziójában jelentek meg és választ adnak egy sor olyan kérdésre, amelyek az alkalmazások során felmerülhetnek, de a tanúsítványtörzs nem tartalmaz rájuk vonatkozó információkat. Ezen túl lehetőséget adnak az adott tanúsítvány felhasználásának kifinomult szabályozására és az adott publikus kulcsú infrastruktúrát érintő részletes és hatékony szabályzatok megvalósítására.

Tanúsítvány kiterjesztések

A kiterjesztések három komponensből állnak: kiterjesztés azonosító, kritikusság és érték. A kiterjesztés azonosító egy objektumazonosító és egyedileg azonosítja az adott kiterjesztést. A kritikusság az adott kiterjesztés fontosságát jelzi: ha egy adott alkalmazás nem tudja értelmezni az adott kiterjesztést akkor, ha a kiterjesztés nem volt kritikus akkor figyelmen kívül hagyja azt, míg ha a szóban forgó kiterjesztés kritikus, akkor megtagadja a tanúsítvány felhasználását. A szabvány lehetővé teszi saját definiálású kiterjesztések használatát, amelyek segítségével tetszőleges bonyolultságú szabályozás illetve tetszőleges részletességű információ köthető egy tanúsítványhoz. A következőkben néhány fontosabb szabványos tanúsítvány kiterjesztésről lesz szó.

Basic Constraints

Ez a kiterjesztés megválaszolja azt a kézenfekvő kérdést, hogy a szóban forgó entitás amit a tanúsítvány a benne szereplő tanúsítvány által reprezentált kulcspárhoz köt a publikus kulcsú infrastruktúrában a egy tanúsítványkiadó vagy pedig végfelhasználó szerepét játssza. Ebben a kiterjesztésben lehet korlátozni továbbá a hitelesítési útvonalban szereplő CA-k számát. Ez egyben az útvonalon szereplő kereszt hitelesítések számát is jelenti, így ez a kiterjesztés fontos szerepet játszik az egyes bizalmi modellek implementálásában.

A kiterjesztés ASN.1 jelölése (ref rfc):

id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 }

BasicConstraints ::= SEQUENCE {

cA BOOLEAN DEFAULT FALSE,

pathLenConstraint INTEGER (0..MAX) OPTIONAL }

Issuer Alternative Name, Subject Alternative Name

Mint ahogy az elnevezési konvencióknál arról szó volt, az X500 Directory elnevezési konvenciói nem terjedtek el általánosan, ezért az egyes publikus kulcsú infrastruktúrákat logikus lépés már létező elnevezési hierarchiák köré felépíteni. Ezen mezők segítségével adhatók meg a tulajdonos és a kiadó a kapcsolódó elnevezési konvenció(k)ban kapott neve(i). Ez a lehetőség végfelhasználó esetében különösen hasznos: ip címeket, URL -eket illetve e-mail címeket is rendelhetünk a segítségével a tanúsítványainkhoz.

A kiterjesztések ASN.1 jelölése (ref rfc):

id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 }

IssuerAltName ::= GeneralNames

id-ce-subjectAltName OBJECT IDENTIFIER ::= { id-ce 17 }

SubjectAltName ::= GeneralNames

GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName

Name Constrains

A különböző bizalmi modellekben rendszerint szükség van arra, hogy az egyes hierarchiákon belül szereplő gyökér CA -k és alárendelt hitelesítő szervezetek felosszák egymás között a rendelkezésre álló névteret. Ez a kiterjesztés lehetővé teszi, hogy ezen felosztásra irányuló szabályozásokat is kikényszerítsük. A kiterjesztés két lehetőséget biztosít egy CA adott név feletti illetékességének meghatározására. Megadhatunk engedélyezett illetve tiltott részfákat a névtérben. Egy CA akkor illetékes, ha a szóban forgó név benne van az engedélyezett részfában, de nincs benne a tiltott részfában.

A kiterjesztés ASN.1 jelölése (ref rfc):

NameConstraints ::= SEQUENCE {

permittedSubtrees [0] GeneralSubtrees OPTIONAL,

excludedSubtrees [1] GeneralSubtrees OPTIONAL }

GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree

GeneralSubtree ::= SEQUENCE {

base GeneralName,

minimum [0] BaseDistance DEFAULT 0,

maximum [1] BaseDistance OPTIONAL }

BaseDistance ::= INTEGER (0..MAX)

Kulcs attribútumok

A gyakorlati alkalmazások során gyakori, hogy az egyes szereplőknek több különböző kulcspárja van. Mindegyik kulcspár egy külön feladat ellátására szolgál. A tanúsítványtörzs csupán az algoritmust és az algoritmus paramétereket tartalmazza és nem ad választ arra a kérdésre, hogy hogyan különböztessük meg az ugyanazon szereplőhöz tartozó tanúsítványokat.

Key Usage: ezzel a kiterjesztéssel megadható, hogy a kulcs milyen jellegű felhasználásra alkalmas, milyen típusú biztonsági követelményeket képes kielégíteni:

keyCertSign: a kulccsal ellenőrizhető a kulcs párjával aláírt tanúsítványok hitelessége.

cRLSign: a kulccsal ellenőrizhető a kulcs párjával aláírt visszavonási listák hitelessége.

non-Repudiation: a kulccsal ellenőrizhető a párjával aláírt letagadhatatlan aláírások hitelessége.

digitalSignature: a kulccsal ellenőrizhető a párjával aláírt aláírások hitelessége (akkor kell használni, ha a fenti három közül egyik kategóriába sem esik a felhasználás).

keyEncipherment: a kulcs felhasználható titkos kulcs továbbítására kulcscsere protokollokban.

dataEncipherment: a kulcs felhasználható nyers adatok titkosítására. Ez az érték nem fedi a kulcs felhasználhatóságát kulcscsere vagy kulcsmegállapodás protokollokban.

keyAgreement: a kulcs felhasználható titkos kulcsok előállítására kulcsmegállapodás protokollokban.

encipherOnly: a titkos kulcs, ami egy olyan kulcsmegállapodás során született, amiben a tanúsítványban szereplő publikus kulcs felhasználásra került, kizárólag adatok titkosítására lehet használni.

decipherOnly: A titkos kulcs ami egy olyan kulcsmegállapodás során született amiben a tanúsítványban szereplő publikus kulcs felhasználásra került. Kizárólag titkosított adatok dekódolására lehet használni.

A szabvány szerint az egyes kulcsfelhasználási módok bármilyen kombinációját lehetővé teszi, ezért ezek megadásánál különösen nagy körültekintéssel kell eljárni, hiszen egyes kombinációk nyilvánvalóan ellentmondásosak vagy értelmezhetetlenek.

A kiterjesztés ASN.1 jelölése (ref rfc):

id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 }

KeyUsage ::= BIT STRING {

digitalSignature (0),

nonRepudiation (1),

keyEncipherment (2),

dataEncipherment (3),

keyAgreement (4),

keyCertSign (5),

cRLSign (6),

encipherOnly (7),

decipherOnly (8) }

Extended Key Usage

A kulcs használatára pontos meghatározást ad. Lehetőséget ad arra, hogy olyan felhasználási módokat is kikössünk a kulcs felhasználására, amik a szabványos Key Usage kiterjesztésben nem adhatóak meg. Megadhatjuk például, hogy a tanúsítványt TLS azonosítás során lehet használni és ott is csak valamely szerver azonosítására.

A kiterjesztés ASN.1 jelölése [31]:

id-ce-extKeyUsage OBJECT IDENTIFIER ::= {id-ce 37}

ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId

KeyPurposeId ::= OBJECT IDENTIFIER

Private Key Validity

A tanúsítványban megadott érvényességi időtartam alapvetően a tanúsítványra vonatkozik. Ennek a kiterjesztésnek a segítségével elválaszthatjuk a tanúsítvány érvényességét a titkos kulcsétól. Előfordulhat például, hogy azt szeretnénk, hogy a privát kulccsal csak egy korlátozott időtartamig lehessen érvényes aláírásokat osztani, viszont ezen időtartam leteltével is szeretnénk az időközben érvényesen kiosztott aláírásokat ellenőrizni. A mező értelmezéséhez természetesen szükség van egy az aláíráshoz csatolt időbélyeghez is.

A kiterjesztés ASN.1 jelölése [31]:

id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::= { id-ce 16 }

PrivateKeyUsagePeriod ::= SEQUENCE {

notBefore [0] GeneralizedTime OPTIONAL,

notAfter [1] GeneralizedTime OPTIONAL }

SubjectKeyIdentifier

A több vagy nagyon specifikus nyilvános kulcsú infrastruktúra használata esetén könnyen előfordulhat, hogy egy alanynak több tanúsítványa is van, amelyek mindegyike más és más alkalmazási lehetőségekkel bír. Ezen kiterjesztés célja, hogy egy alany több kulcsa közül könnyebben ki lehessen választani az éppen szükségeset. Az egyszerűség és az azonosítók (nagy valószínűséggel) különbözősége kedvéért ennek az értéke általában a publikus kulcs egy hash értéke.

A kiterjesztés ASN.1 jelölése [31]:

KeyIdentifier ::= OCTET STRING

id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 }

SubjectKeyIdentifier ::= KeyIdentifier

AuthorityKeyIdentifier

Ez a kiterjesztés a hitelesítési útvonal megkonstruálását segíti. Mint ahogyan arról már korábban szó volt, egy hitelesítő szervezet több aláíró kulccsal is rendelkezhet a biztonsági követelményeknek és a különböző céloknak megfelelően. Ezen kiterjesztés azonosítja az adott tanúsítvány aláírására szolgáló kulcshoz tartozó tanúsítványt a CA összes tanúsítványa között. Ezen mező hiányában a CA összes tanúsítványát ki kellene próbálni, amíg a megfelelőt meg nem találjuk. Az érték lehet a megfelelő CA tanúsítvány sorozatszáma (serialNumber) és a benne szereplő sorozatszám együttesen, illetve egy tetszőleges sztring, ha az a CA vonatkozó tanúsítványában SubjectKeyIdentifier -ként szerepel.

A kiterjesztés ASN.1 jelölése [31]:

id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= {id-ce 35}

AuthorityKeyIdentifier ::= SEQUENCE {

keyIdentifier [0] KeyIdentifier OPTIONAL,

authorityCertIssuer [1] GeneralNames OPTIONAL,

authorityCertSerialNumber[2] CertificateSerialNumber OPTIONAL }

Eljárásmódra vonatkozó információk

Az X509-es szabvány első két verziójában az alkalmazott eljárásmódot implicit értelmezték. A tanúsítványokban semmiféle erre vonatkozó információ nem szerepelt. A különböző eljárásmódokhoz más és más CA-kat léptettek üzembe és az eljárásmódok az egyes CA-khoz tartoztak, a tanúsítványkiadó megkülönböztetett neve azonosította azokat. A minden eljárásmódhoz külön CA létesítése illetve az egyes eljárásmódok többlépcsős azonosítása és kezelése meglehetősen körülményes és alacsony hatásfokú volt. Ezt hivatottak kiküszöbölni az eljárásmódra vonatkozó kiterjesztések.

CertificatePolicies

Az eljárásmódok kezelését szolgáló kiterjesztés. CA tanúsítványok esetében itt vannak feltűntetve a CA által megvalósított eljárásmódok, irányelvek, amelyeknek a betartásáért a CA szavatol. A felhasználó vagy a felhasználó alkalmazás hivatott eldönteni, hogy az adott esetben mely eljárásmódok számítanak elfogadhatónak.

Felhasználói tanúsítvány esetében ez a kiterjesztés a tanúsítvány által kielégített eljárásmódokat tartalmazza. Egy eljárásmód tartalmazhat arra vonatkozó megkötéseket, hogy a tanúsítványt milyen alkalmazásban lehet használni illetve esetlegesen az alkalmazott eljárásmód általános erejéről, biztonságáról is.

Ez a kiterjesztés erősen korlátozza a különböző nyilvános kulcsú infrastruktúrák közötti átjárhatóságot. Lehetőség van a teljes mértékben megbízható CA-k esetében az anyPolicy eljárásmód megadására is.

A kiterjesztés ASN.1 jelölése [31]:

id-ce-certificatePolicies OBJECT IDENTIFIER ::= {id-ce 32}

CertificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation

PolicyInformation ::= SEQUENCE {

policyIdentifier CertPolicyId,

policyQualifiers SEQUENCE SIZE (1..MAX) OF

PolicyQualifierInfo OPTIONAL }

CertPolicyId ::= OBJECT IDENTIFIER

PolicyQualifierInfo ::= SEQUENCE {

policyQualifierId PolicyQualifierId,

qualifier ANY DEFINED BY policyQualifierId }

PolicyQualifierId ::=

OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )

CPSuri ::= IA5String

UserNotice ::= SEQUENCE {

noticeRef NoticeReference OPTIONAL,

explicitText DisplayText OPTIONAL}

NoticeReference ::= SEQUENCE {

organization DisplayText,

noticeNumbers SEQUENCE OF INTEGER }

DisplayText ::= CHOICE {

visibleString VisibleString (SIZE (1..200)),

bmpString BMPString (SIZE (1..200)),

utf8String UTF8String (SIZE (1..200)) }

PolicyMappings

Ez a kiterjesztés teszi lehetővé az együttműködés két különböző eljárásmódot megvalósító CA által lefedett PKI terület között. A felhasználók illetve azok alkalmazásai többnyire csak a saját CA-juk által megvalósított eljárásmódokat ismerik el. A különböző területek közötti együttműködéshez szükség van egy leképezésre a két CA által megvalósított eljárásmódok között. Ez a kiterjesztés tartalmazza a fordítótáblát a kiadó CA saját eljárásmódjai és azon eljárásmódok között, amik azokkal egyenértékűnek tekinthetők. Egy bejegyzéssel a kiadó CA szavatol azért, hogy ha a bejegyzésben szereplő saját eljárásmód megfelel egy adott alkalmazásnak, akkor a feltűntetett másik eljárásmód is elég biztonságos az adott alkalmazás szempontjából. Ez utóbbi rendszerint egy másik CA valamely eljárásmódját jelenti.

A kiterjesztés ASN.1 jelölése [31]:

id-ce-policyMappings OBJECT IDENTIFIER ::= { id-ce 33 }

PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {

issuerDomainPolicy CertPolicyId,

subjectDomainPolicy CertPolicyId }

PolicyConstraints

Ezzel a kiterjesztéssel tovább lehet szigorítani az eljárásmódokkal szemben támasztott követelményeket. A kiterjesztés két mezőből áll: requireExplicitPolicy és inhibitPolicyMapping. Mindkét mező egy megszorítást jelent a tanúsítványlánc felépítésére nézve. Az értékük egy-egy egész érték, amely azt jelzi, hogy a hitelesítési lánc felépítése során hányadik tanúsítványnál lépnek életbe. Ha tehát az egyik ilyen mező értéke n, akkor a tanúsítványláncban az első n tanúsítványra az adott megszorítás nem vonatkozik.

A requireExplicitPolicy egy megkövetelt eljárásmód explicit megadását írja elő a tanúsítványokban, míg az inhibitPolicyMapping a PolicyMappings kiterjesztést érvényteleníti.

A kiterjesztés ASN.1 jelölése [31]:

id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 }

PolicyConstraints ::= SEQUENCE {

requireExplicitPolicy [0] SkipCerts OPTIONAL,

inhibitPolicyMapping [1] SkipCerts OPTIONAL }

SkipCerts ::= INTEGER (0..MAX)

CRLDistributionPoints

Ahhoz, hogy egy tanúsítvány érvényességéről meggyőződjünk a kibocsájtó CA tanúsítványán kívül egyéb információkra is szükségünk van. Az eredeti elképzelés szerint minden szükséges információ elérhető egy globális X500 könyvtáron keresztül. Az X500 könyvtár technológia nem terjedt el széles körben így egy globális X500 könyvtár sem áll rendelkezésre, amin keresztül bármely megkülönböztetett névhez egyértelműen megtalálhatók a vonatkozó információk. Jelenleg több különböző protokoll és megoldás szolgáltatja a szükséges pluszinformációkat így a visszahívási listákat is (Certificate Revocation List - CRL). Könnyen előfordulhat, hogy egy tanúsítványlánc felépítésekor több különböző tanúsítványtárhoz több különböző protokollon keresztül kell hozzáférnünk.

A CRLDistributionPoints kiterjesztés lehetővé teszi, hogy információkat adjunk meg a vonatkozó tanúsítványtár elérhetőségére és elérési metódusára vonatkozólag. A kiterjesztésben több elosztási pont megadható, mindegyikhez megadható a neve az elérési helye és módja illetve, hogy milyen indokkal visszavont tanúsítványokat szolgáltat. Ha az indok mező elmarad, akkor az elosztási pontnak minden visszavont tanúsítványt tartalmaznia kell a visszavonási indokra való tekintet nélkül.

A kiterjesztés ASN.1 jelölése [31]:

id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::= { id-ce 31 }

cRLDistributionPoints ::= {

CRLDistPointsSyntax }

CRLDistPointsSyntax ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint

DistributionPoint ::= SEQUENCE {

distributionPoint [0] DistributionPointName OPTIONAL,

reasons [1] ReasonFlags OPTIONAL,

cRLIssuer [2] GeneralNames OPTIONAL }

DistributionPointName ::= CHOICE {

fullName [0] GeneralNames,

nameRelativeToCRLIssuer [1] RelativeDistinguishedName }

ReasonFlags ::= BIT STRING {

unused (0),

keyCompromise (1),

cACompromise (2),

affiliationChanged (3),

superseded (4),

cessationOfOperation (5),

certificateHold (6) }

FreshestCRL

A CA-k nem készítenek új visszavonási listát minden egyes tanúsítvány visszavonáskor, hanem csupán egy, a legutóbbihoz képest jelentkező módosításokat tartalmazó kisebb úgynevezett delta CRL -t tesznek közzé. A rendes visszavonási listákat csak megadott időközönként frissítik.

Ez a kiterjesztés szintaktikájában és értelmezésében megegyezik a CRLDistributionPoints kiterjesztésével. Azon elosztási pontokkal kapcsolatos információkat tartalmazza, amelyek a delta CRL -eket szolgáltatják.

AuthorityInfoAccess

Ez a kiterjesztés egyéb a hitelesítési szolgáltatóval kapcsolatos információk elérhetőségét tartalmazza. Jelenleg két, az útvonal felépítését szolgáló információkat közvetítő szolgáltatás elérhetősége adható meg vele. Az egyik (id-ad-caIssuers) segítségével azon egyéb CA-k listája kérhető le, amelyek a kibocsájtó CA számára tanúsítványt adtak ki. A hozzáférés módjánál ugyan lehetőség van HTTP, FTP, DAP segítségével való hozzáférés előírására is, a gyakorlatban azonban leginkább az LDAP segítségével való hozzáférés a legelterjedtebb. A másik szolgáltatás segítségével a CA által kiadott tanúsítványok státuszinformációi kérdezhetőek le (id-ad-ocsp).

id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= {id-pe 1}

AuthorityInfoAccessSyntax ::=

SEQUENCE SIZE (1..MAX) OF AccessDescription

AccessDescription ::= SEQUENCE {

accessMethod OBJECT IDENTIFIER,

accessLocation GeneralName }

id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }

id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }

SubjectDirectoryAttributes

Ez a kiterjesztés lehetővé teszi, hogy jogosultságokkal (authorization) kapcsolatos információkat kapcsoljunk a tanúsítványhoz. Habár a lehetőség fennáll, a mező alkalmazása a gyakorlatban mégis ellenjavallt. A jogosultságok élettartama rendszerint rövidebb, mint a tanúsítványoké ezért a kiterjesztés alkalmazása a tanúsítvány élettartamát csökkenti. Másik probléma, hogy a jogosultságokkal kapcsolatos információkért és folyamatokért rendszerint nem a CA a felelős, így a kiterjesztés alkalmazása további adminisztrációs terhet és felelősséget terhel a CA-ra.