OpenSSL CA keyUsage-Erweiterung

7

Ich möchte eine Zertifikatskette mit einer selbstsignierten Stammzertifizierungsstelle am oberen Rand einrichten, die Unterzertifizierungsstellen signiert, die dann Client- und Serverzertifikate signieren können. Beim Einrichten openssl.cnfIch bemerkte ein keyUsage Parameter, der anscheinend auf das eingestellt werden muss, wofür der Schlüssel verwendet werden soll. Während die Parameterwerte dokumentiert sind, kann ich keine Informationen darüber finden, welche unter bestimmten Umständen verwendet werden sollen.

Was machen die keyUsage Werte bedeuten, und was soll ich in den folgenden Situationen verwenden?

  • Selbstsignierte Stammzertifizierungsstelle
  • Zwischenzertifizierungsstelle (die andere Zertifizierungsstellen signieren kann)
  • Zwischenzertifizierungsstelle (die keine anderen Zertifizierungsstellen signieren kann)
  • Nicht-CA-Zertifikate

Darüber hinaus müssen andere Erweiterungen mit bestimmten Werten angegeben werden, z nsCertType?

Xenopathic
quelle

Antworten:

8

Jedes CA-Zertifikat, unabhängig davon, ob es sich um ein Root- oder ein Zwischenzertifikat handelt, muss über die folgende Berechtigung verfügen: keyCertSign Erweiterung. Wenn Sie eine Sperrliste (CRL) auch mit dem CA-Zertifikat signieren möchten (dies ist normalerweise erwünscht), müssen Sie dies hinzufügen cRLSign auch. Alle anderen keyUsages können und sollten für CA-Zertifikate vermieden werden.

Die Liste der von openssl akzeptierten Werte lautet hier dokumentiert .

Für End-Entity-Zertifikate können Sie alle anderen von openssl dokumentierten keyUsages verwenden. Stellen Sie jedoch sicher, dass Sie die oben genannten CA-Erweiterungen nicht einschließen. Unter Sicherheitsaspekten sollten Sie nicht mehr keyUsages als erforderlich verwenden (insbesondere wird empfohlen, separate Zertifikate zum Signieren und Registrieren zu verwenden), dies ist jedoch keine strenge Anforderung.

Beachten Sie, dass es neben den klassischen keyUsages auch das gibt extendedKeyUsage (EKU) -Erweiterung, die nicht auf vordefinierte Werte im RFC beschränkt ist, sondern theoretisch jede beliebige OID enthalten kann. Bekannte Werte sind beispielsweise für Zertifikate zum Signieren von Zeitstempeln oder OCSP-Antworten.

Sie müssen nicht verwenden nsCertType. Diese, zusammen mit allen anderen ns * -Erweiterungen, wurden vor Jahren von Netscape definiert und sollten nicht mehr verwendet werden. Sie werden wahrscheinlich keine Software finden, die sie noch verwendet.

Für andere Erweiterungen ist das einzige, was unbedingt erforderlich ist, das basicConstraints Erweiterung, die einen Booleschen Wert hat CA Flag, das Sie entsprechend setzen müssen. Die Erweiterungen authorityKeyIdentifier und subjectkeyIdentifier werden ebenfalls dringend empfohlen.

mat
quelle
1
OpenVPN hat die ns-cert-type Option, die standardmäßig in Archs Beispiel festgelegt ist client.conf, der sucht nsCertType. Interessant, wie es an manchen Stellen noch genutzt wird.
Xenopathic
Wie würde keyUsage auch für Zertifikate ohne Zertifizierungsstelle gelten? Ich habe die Frage bearbeitet, um sie aufzunehmen.
Xenopathic
Ich habe auch meine Antwort aktualisiert
mat
@Xenopathic nc-cert-type Sollte in OpenVPN wirklich nicht mehr verwendet werden, da das "ns" für NetScape steht, wie im nun nicht mehr existierenden NetScape Browser. Die Option remote-cert-eku "TLS Web Server Authentication" sollte verwendet werden, sofern das Server-Zertifikat mit EKU generiert wurde serverAuth und die mit EKU generierten Client-Zertifikate clientAuth. Man kann auch angeben remote-cert-ku <hex value>wobei & lt; hex value & gt; ist der Hex-Wert der zugewiesenen KUs.
JW0914
14

Zertifizierungsstellen & amp; Zwischenzertifizierungsstellen


Selbstsignierte Zertifizierungsstelle

  • keyUsage: cRLSign, digitalSignature, keyCertSign
    • Sollte keine anderen KUs oder EKUs enthalten
  • V3-Profil:

    [ v3_ca ]
    basicConstraints        = critical, CA:TRUE
    subjectKeyIdentifier    = hash
    authorityKeyIdentifier  = keyid:always, issuer:always
    keyUsage                = critical, cRLSign, digitalSignature, keyCertSign
    subjectAltName          = @alt_ca
    

Zwischen-CA

  • keyUsage: cRLSign, digitalSignature, keyCertSign
    • Sollte keine anderen KUs oder EKUs enthalten
  • V3-Profil:

    [ v3_ica ]
    basicConstraints        = critical, CA:TRUE, pathlen:1
    subjectKeyIdentifier    = hash
    authorityKeyIdentifier  = keyid:always, issuer:always
    keyUsage                = critical, cRLSign, digitalSignature, keyCertSign
    subjectAltName          = @alt_ica
    
    • Woher pathlen: entspricht der Anzahl der CAs / ICAs, die signiert werden können
    • Andere CAs / ICAs können nicht signiert werden, wenn pathlen: ist auf 0 gesetzt


Nicht-CA-Zertifikate


VPN Server

  • keyUsage: nonRepudiation, digitalSignature, keyEncipherment, keyAgreement
  • V3-Profil:

    [ v3_vpn_server ]
    basicConstraints        = critical, CA:FALSE
    subjectKeyIdentifier    = hash
    authorityKeyIdentifier  = keyid:always, issuer:always
    keyUsage                = critical, nonRepudiation, digitalSignature, keyEncipherment, keyAgreement 
    extendedKeyUsage        = critical, serverAuth
    subjectAltName          = @alt_vpn_server
    

VPN-Client

  • keyUsage: nonRepudiation, digitalSignature, keyEncipherment
  • V3-Profil:

    [ v3_vpn_client ]
    basicConstraints        = critical, CA:FALSE
    subjectKeyIdentifier    = hash
    authorityKeyIdentifier  = keyid:always, issuer:always
    keyUsage                = critical, nonRepudiation, digitalSignature, keyEncipherment
    extendedKeyUsage        = critical, clientAuth
    subjectAltName          = @alt_vpn_client
    


keyUsage


NUR CA.

keyCertSign

  • Der öffentliche Schlüssel des Antragstellers wird zum Überprüfen der Signaturen auf Zertifikaten verwendet
  • Diese Erweiterung darf nur für CA-Zertifikate verwendet werden

cRLSign

  • Der öffentliche Schlüssel des Antragstellers dient zum Überprüfen der Signaturen von Sperrinformationen, z. B. einer CRL
  • Diese Erweiterung darf nur für CA-Zertifikate verwendet werden

digitalSignature

  • Das Zertifikat kann zum Anwenden einer digitalen Signatur verwendet werden
    • Digitale Signaturen werden häufig für die Entitätsauthentifizierung & amp; Datenursprungsauthentifizierung mit Integrität

nonRepudiation

  • Das Zertifikat kann verwendet werden, um Daten wie oben zu signieren, aber der öffentliche Schlüssel des Zertifikats kann verwendet werden, um Nicht-Ablehnungsdienste bereitzustellen
    • Dadurch wird verhindert, dass die signierende Entität eine Aktion fälschlicherweise ablehnt

keyEncipherment

  • Das Zertifikat kann zum Verschlüsseln eines symmetrischen Schlüssels verwendet werden, der dann an das Ziel übertragen wird
    • Das Ziel entschlüsselt den Schlüssel und verwendet ihn anschließend zum Verschlüsseln & amp; Daten zwischen den Entitäten entschlüsseln

dataEncipherment

  • Das Zertifikat kann zum Verschlüsseln & amp; Entschlüsseln Sie die tatsächlichen Anwendungsdaten

keyAgreement

  • Das Zertifikat ermöglicht die Verwendung eines Schlüsselvereinbarungsprotokolls zum Herstellen eines symmetrischen Schlüssels mit einem Ziel
  • Der symmetrische Schlüssel kann dann zum Verschlüsseln & amp; zwischen den Entitäten gesendete Daten entschlüsseln

encipherOnly

  • KU keyAgreement Wird benötigt
  • Öffentlicher Schlüssel, der nur zum Verschlüsseln von Daten während der Ausführung der Schlüsselvereinbarung verwendet wird

decipherOnly

  • KU keyAgreement Wird benötigt
  • Öffentlicher Schlüssel wird nur zum Entschlüsseln von Daten während der Ausführung der Schlüsselvereinbarung verwendet


extendedKeyUsage


serverAuth

  • Alle VPN-Server sollten mit diesem EKU signiert sein
    • SSL / TLS-Web- / VPN-Serverauthentifizierung EKU, die einen Server unterscheidet, gegen den sich Clients authentifizieren können
    • Dies ersetzt nscertype Optionen ( ns im nscertype steht für NetScape [browser])

clientAuth

  • Alle VPN-Clients müssen mit diesem EKU signiert sein
    • SSL / TLS-Web / VPN-Client-Authentifizierung EKU, die einen Client nur als Client unterscheidet

codeSigning

  • Codesignatur

emailProtection

  • Mit dem E-Mail-Schutz über S / MIME können Sie verschlüsselte E-Mails senden und empfangen

timeStamping

  • Vertrauenswürdige Zeitstempelung

OCSPSigning

  • OCSP-Signierung

msCodeInd

  • Microsoft Individual Code Signing (authentischer Code)

msCodeCom

  • Microsoft Commercial Code Signing (Authentifizierungscode)

mcCTLSign

  • Microsoft Trust List Signing

msEFS

  • Microsoft Encrypted File System Signing

!!! DARF NICHT VERWENDET WERDEN !!!

ipsecEndSystem, ipsecTunnel& amp; ipsecUser

  • Die Semantik dieser Werte wurde 1999 zugewiesen und war nie klar definiert
  • RFC 4945: Die Verwendung dieser drei EKU-Werte ist veraltet und wird in dieser Spezifikation ausdrücklich nicht mehr empfohlen. 5.1.3.12 ]

ipsecIKE

  • IPSec Internet Key Exchange
    • Ich glaube, das ist im selben Boot wie die drei oben
    • Es müssen Untersuchungen durchgeführt werden, um festzustellen, ob diese EKU auch nicht mehr verwendet werden sollte
  • clientAuth kann in einem IPSec VPN-Client-Zertifikat verwendet werden


JW0914
quelle
Wenn du sagst " SSL / TLS-Web / VPN-Client-Authentifizierung EKU, die einen Client nur als Client unterscheidet "bedeutet, dass es nicht möglich ist, nur ein einziges Zertifikat zu haben, das sowohl für Server als auch für Client funktioniert?
Rodney Salcedo
Es ist möglich, beide EKUs hinzuzufügen, es sollte jedoch keinen Grund dafür geben, da mir kein Serverdämon bekannt ist, der gleichzeitig als Client und als Server mit derselben Konfiguration (oder) fungieren kann und umgekehrt).
JW0914