openssl-Zertifikatserweiterungen

Zertifikatserweiterungen (Extensions) bestimmen den Verwendungszweck eines Zertifikats. Beim Signieren eines CSR werden die in einer openssl-Konfigurationsdatei unter dem Parameter x509_extensions hinterlegten Werte in das anschließend erstellte Zertifikat geschrieben.

Folgende Erweiterungen werden standardmäßig unterstützt. Darüberhin haben verschiedene Hersteller eigene Erweiterungen registiert, beispielsweise existieren „Netscape Certificate Extensions“.

– Basic Contrains
– Key Usage
– Extended Key Usage
– Subject Key Identifier
– Authority Key Identifier
– Subject Alternative Name
– Issuer Alternative Name
– Certificate Policies
– CRL Distribution Point

Für fast jede der Erweiterungen kann ein Critical Bit gesetzt werden. Ist dieses Flag gesetzt und wird die Bedingung nicht erfüllt bzw. kann sie nicht überprüft werden, ist kein Verbindungsaufbau möglich bzw. die Verbindung wird als nicht-vertrauenswürdig deklariert.

Basic Contrains (Basiseinschränkungen)
Bei CA-Zertifikaten muss CA:TRUE gesetzt sein bei nicht-CA-Zertifikaten ist laut RFC2459 der Parameter wegzulassen. Pathlen gibt an wieviel CA-Ebenen unterhalb der aktuellen CA maximal möglich sind. Ist pathlen:0 gesetzt, kann die CA nur Anwendungs- bzw. Benutzerzertifikate signieren.

basicConstraints = [critical,] CA:[, pathlen:N]

Key Usage (Schlüsselverwendung)
Beschriebt den Verwendungszweck der RSA-Schlüsseldatei und welche CSR signiert werden dürfen.

decipherOnly: Ist keyAgreement gesetzt, darf der Public-Key innerhalb eines Schlüsselaustausche zur Entschlüsselung von Daten verwendet werden. Andernfalls undefiniert.

encipherOnly: Ist keyAgreement gesetzt, darf der Public-Key innerhalb eines Schlüselaustausches zur Verschlüsselung von Daten verwendet werden. Andernfalls undefiniert.

cRLSign: Public-Key kann verwendet werden, um CRLs zu verifizieren.

keysCertSign: Public-Key kann verwendet werden, um Zertifikate zu verifizieren.

keyAgreement: Zur Verwendung beim Schlüsselaustausch.

dataEncipherment: Zur Verwendung von „normalen“ Daten, also kein Schlüsseln.

keyEncipherment: Public-Key wird zum Schlüsselmanagement verwendet.

nonRepudiation: Key zur Prüfung von „bewußten“ Signaturen (außer CRLs und bei Zertifikaten).

digitalSignature: Key zur Prüfung von „automatischen“ Signaturen (außer CRLs und bei Zertifikaten).

keyUsage = [critical,] [decipherOnly,] [encipherOnly,] [cRLSign,] [keysCertSign,] [keyAgreement,] [dataEncipherment,] [keyEncipherment,] [nonRepudiation,] [digitalSignature]

Extended Key Usage (Erweiterte Schlüsselverwendung)
Wird zusätzlich oder anstelle von Key Usage verwendet.

RFC2459-Extensions
serverAuth: Authentisierung von Web-Servern durch Web-Clients

clientAuth: Authentisierung von Web-Clients durch Web-Server

codeSigning: Key zur Signierung von Programm-Code

emailProtection: Key zur Verwendung mit S/MIME-Software

timStamping: Signierung von Objekt-Hashwerten und zugehörigen vertrauenswürdigen Zeitstempeln

Microsoft-Extensions
msCodeInd: Individual Code Signing
msCodeCom: Commercial Code Signing
msCTLSign: Trust List Sign
msSGC: Server-Zertifikat mit „Global Server ID“
msEFS: Verschlüsselung von symmetrischen Keys zur Dateisystem-Verschlüselung

Netscape-Extensions
nsSGC: Server-Zertifikat mit „Global Server ID“

keyUsage = [critical,] [serverAuth,] [clientAuth,] [codeSigning,] [emailProtection,] [timeStamping,] [msCodeInd,] [msCodeCom,] [msCTLSign,] [msSGC,] [msEFS,] [nsSGC,] [OID]

Subject Key Identifier (Schlüsselkennung des Antragstellers)
Dies ist der Hash-Wert des Public-Keys des Zertifikats.

subjectKeyIdentifier = hash

Authority Key Identifier
Der Schlüssel eines Zertifikats kann mit dieser Erweiterung auf zwei unterschiedliche Arten identifiziert werden. Entweder wird keyIdentifier oder es werden die anderen beiden Werte gesetzt.

keyIdentifier: identifiziert einen Schlüssel über das KeyIdentifier-Feld (Hash-Wert)

authorityCertIssuer:

authorityCertSerialNumber:

authorityKeyIdentifier =

Subject Alternative Name (Alternativer Antragstellername)
Kann verwendet werden alternative Bezeichner im Zertifikat zu hinterlegen.

email: E-Mail-Adresse als weiteren Bezeichner für ein Subjekt in das Zertifikat aufnehmen.

URL: URL/DNS-Namen als weiteren Bezeichner für ein Subjekt in das Zertifikat aufnehmen.

RID: URIs und registrierte IDs (RIDs) als weiteren Bezeichner für ein Subjekt in das Zertifikat aufnehmen.

IP: IP-Adresse als weiteren Bezeichner für ein Subjekt in das Zertifikat aufnehmen.

subjectAltName=][, URL:http://my.url.here/][, RID:1.2.3.4][, IP:1.2.3.4]>

Issuer Alternative Name (Alternativer Ausstellername)
Hiermit werden die Angaben aus dem Subject Alternative Name kopiert.

issuer: issuer:copy

URL: URL/DNS-Namen als weiteren Bezeichner für ein Subjekt in das Zertifikat aufnehmen.

RID: URIs und registrierte IDs (RIDs) als weiteren Bezeichner für ein Subjekt in das Zertifikat aufnehmen.

IP: IP-Adresse als weiteren Bezeichner für ein Subjekt in das Zertifikat aufnehmen.

issuerAltName=][, URL:http://my.url.here/][, RID:1.2.3.4][, IP:1.2.3.4]>

Certificate Policies

ia5org: Option für die verwendung mit dem Internet Explorer
OID: Liste von akzeprierten OID (Object Identifier)
@polsect: verweist auf die Sektion polsect in der openssl.cnf
[ polsect ]
policyIdentifier=OID
CPS=“http://www.ca.de/policy.html“
userNotice=@notice

[ notice ]
explicitText=“Nur zur Verschluesselung von E-Mail (S/MIME)“
organisation=“CA Org.“
noticeNumbers=4, 2

certificatePolicies=[ia5org,]OID[, OID, ...][,@polsect]

CRL Distribution Point
Ort an dem die Widerrufstliste (CRL) abgerufen werden kann.

URI: URL unter der die Widerrufsliste (CRL) abgerufen wird. openssl unterstützt derzeit nur URIs. Grundsätzlich sind alle unter subjectAltName verwendeten Methoden möglich.

crlDistributionPoint=URI:http://www.ca.de/ca1.crl[, URI:http://www.ca.de/ca2.crl ... ]

Netscape Certificate Extensions
Diese Extensions sollten nicht als Critical gesetzt werden. Microsoft-Browser lehnen in diesem Fall die Verbindung ab.

sslCA: Ein CA-Zertifikat um Server oder Clients zu zertifizieren.

emailCA: Ein CA-Zertifikat um E-Mail-Benutzer zu zertifizieren.

objCA: Ein CA-Zertifikat um Zertifikate zum Signieren von Objekten (Java-Applits etc.) herauszugeben.

server: Ein SSL-Server-zertifikat

client: Ein SSL-Client-Zertifikat

reserved: Reserviert für zukünftige Nutzung

objsign: Zertifikat um Objekte (Java-Applets etc.) zu signieren

email: Ein E-Mail Benutzer-Zertifikat

nsCertType=[sslCA,] [emailCA,] [objCA,] [server,] [client,] [reserved,] [objsign,] [email]
Dieser Beitrag wurde unter Linux, openssl abgelegt und mit , verschlagwortet. Setze ein Lesezeichen auf den Permalink.