OpenSSL CA keyUsage Erweiterung

Ich möchte eine Kette von Zertifikaten einrichten, mit einer selbstsignierten 'Root' - CA oben, die Unter CAs signiert, die dann Client-und Serverzertifikate signieren kann. Beim Einrichten von openssl.cnf ist mir ein Parameter keyUsage aufgefallen, der anscheinend auf den Schlüssel festgelegt werden muss, für den 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 bedeuten die Werte keyUsage und was soll ich verwenden in den folgenden Situationen?

  • Selbst signiert root CA
  • Intermediate CA (das andere CAs signieren kann)
  • Intermediate CA (die kein anderes CAs signieren kann)
  • Nicht-CA-Zertifikate

Müssen auch andere Erweiterungen mit bestimmten Werten angegeben werden, z. B. nsCertType?

Author: Xenopathic, 2014-04-07

2 answers

Jedes CA-Zertifikat, egal ob root oder intermediate, muss die Erweiterung keyCertSign haben. Wenn Sie auch eine Sperrliste (CRL) mit dem CA-Zertifikat signieren möchten (normalerweise möchten Sie dies), müssen Sie auch cRLSign hinzufügen. Alle anderen keyUsages können und sollten für CA-Zertifikate vermieden werden.

Die Liste der von openssl akzeptierten Werte ist hier dokumentiert.

Für Endentitätszertifikate können Sie alle anderen keyUsages verwenden, wie von openssl dokumentiert, stellen Sie einfach sicher, dass Sie die oben genannten CA-Erweiterungen nicht enthalten. Aus Sicherheitsgründen sollten Sie nicht mehr keyUsages als erforderlich verwenden (insbesondere wird empfohlen, separate Zertifikate zum Signieren und Verschlüsseln zu verwenden), dies ist jedoch keine strenge Anforderung.

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

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

A Für andere Erweiterungen ist das einzige, was absolut erforderlich ist, die Erweiterung basicConstraints mit einem booleschen Flag CA, das Sie entsprechend festlegen müssen. Die Erweiterungen authorityKeyIdentifier und subjectkeyIdentifier sind auch sehr zu empfehlen.

 18
Author: mat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-03-03 20:09:25

Zertifizierungsstellen und zwischengeschaltete CAs


Selbstsignierte CA

  • Schlüsselverwendung: cRLSign, digitalSignature, keyCertSign

    • Sollte keine anderen KUs enthalten oder EKUs
  • V3-Profil:

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

Intermediate CA -

  • Schlüsselverwendung: 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
    
    • Wo pathlen: ist gleich der Anzahl der CAs / ICAs, die es kann Zeichen
    • Kann andere CAs/ICAs nicht unterzeichnen, wenn pathlen: ist auf 0


Nicht-CA-Zertifikate


VPN-Server

  • Schlüsselverwendung: 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

  • Schlüsselverwendung: 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
    


Schlüsselverwendung


NUR CA

keyCertSign

  • Der öffentliche Schlüssel wird verwendet, um Signaturen auf Zertifikaten zu überprüfen
  • Diese Erweiterung darf nur für CA-Zertifikate verwendet werden

cRLSign

  • Der öffentliche Schlüssel dient zum Überprüfen von Signaturen auf widerruf Informationen, wie ein CRL
  • Diese Erweiterung darf nur für CA-Zertifikate verwendet werden

digitalSignature

  • - Zertifikat kann verwendet werden, um eine digitale Signatur anwenden
    • Digitale Signaturen werden häufig für Entitätsauthentifizierung und Datenursprungauthentifizierung mit Integrität verwendet

nonRepudiation

  • Zertifikat kann verwendet werden, um Daten wie oben zu signieren, aber die der öffentliche Schlüssel des Zertifikats kann verwendet werden, um nicht ablehnende Dienste bereitzustellen
    • Dies verhindert, dass die signierende Entität eine Aktion fälschlicherweise leugnet

keyEncipherment

  • Zertifikat kann verwendet werden, um einen symmetrischen Schlüssel zu verschlüsseln, der dann an das Ziel übertragen wird
    • Target entschlüsselt den Schlüssel und verwendet ihn anschließend zum Verschlüsseln und Entschlüsseln von Daten zwischen entities

dataEncipherment

  • Zertifikat kann verwendet werden, um tatsächliche Anwendungsdaten zu verschlüsseln und zu entschlüsseln

keyAgreement

    Das Zertifikat
  • ermöglicht die Verwendung eines Schlüsselvertragsprotokolls zum Erstellen eines symmetrischen Schlüssels mit einem Ziel
  • Symmetrischer Schlüssel kann dann zum Verschlüsseln und Entschlüsseln von Daten verwendet werden, die zwischen den Entitäten gesendet werden

encipherOnly

  • Nur öffentlicher Schlüssel zum Verschlüsseln von Daten während der Durchführung einer Schlüsselvereinbarung
    • Req. KU: keyAgreement

decipherOnly

  • Öffentlicher Schlüssel, der nur zum Entschlüsseln von Daten während der Schlüsselvereinbarung verwendet wird
    • Req. KU: keyAgreement

RFC 5280 [4.2.1.3]

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

  • Bitstring ist hexadezimal

      KeyUsage ::= BIT STRING {
          digitalSignature    (0),
          nonRepudiation      (1),
          keyEncipherment     (2),
          dataEncipherment    (3),
          keyAgreement        (4),
          keyCertSign         (5),
          cRLSign             (6),
          encipherOnly        (7),
          decipherOnly        (8)
      }
    


ExtendedKeyUsage


serverAuth

  • Alle VPN-Server sollten mit dieser EKU signiert sein.
      [[100]}SSL / TLS Web / VPN Server authentication EKU, unterscheidet einen Server, gegen den sich Clients authentifizieren können
  • Dies ersetzt nscertype optionen () in nscertype steht für NetScape [browser])
  • Req. KU: digitalSignature, keyEncipherment oder keyAgreement

clientAuth

  • Alle VPN-Clients müssen mit dieser EKU signiert sein.
      [[100]}SSL/TLS Web / VPN Client authentication EKU Unterscheidung eines Clients nur als Client
  • Req. KU: digitalSignature und/oder keyAgreement

codeSigning

  • Code-Signatur
    • Req. KU: digitalSignature, nonRepudiation, und/oder keyEncipherment oder keyAgreement

emailProtection

  • E-Mail-Schutz über S / MIME, können Sie verschlüsselte E-Mails senden und empfangen
    • Req. KU: digitalSignature, keyEncipherment oder keyAgreement

timeStamping

  • Vertrauenswürdiger Zeitstempel
    • Req. KU: digitalSignature, nonRepudiation

OCSPSigning

  • OCSP-Signatur
    • Req. KU: digitalSignature, nonRepudiation

msCodeInd

  • Microsoft Individuelle Codesignatur (authenticode)
    • Req. KU: digitalSignature, keyEncipherment oder keyAgreement

msCodeCom

  • Microsoft Commercial Code Signing (authenticode)
    • Req. KU: digitalSignature, keyEncipherment oder keyAgreement

mcCTLSign

  • Signieren der Microsoft-Vertrauensliste
    • Req. KU: digitalSignature, nonRepudiation

msEFS

  • Microsoft verschlüsselte Dateisystemsignatur
    • Req. KU: digitalSignature, keyEncipherment oder keyAgreement

!!! SOLLTE NICHT VERWENDET WERDEN !!!

ipsecEndSystem, ipsecTunnel, & ipsecUser

  • Die 1999 zugewiesene Semantik dieser Werte war nie klar definiert
  • RFC 4945: Die Verwendung dieser drei EKU-Werte ist veraltet und durch diese Spezifikation explizit veraltet [5.1.3.12]

ipsecIKE

  • IPSec Internet Schlüsselaustausch
  • 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 Cert verwendet werden

RFC 5280 [4.2.1.12]

anyExtendedKeyUsage OBJECT IDENTIFIER ::= { id-ce-extKeyUsage 0 }

  • id-kp OBJECT IDENTIFIER ::= { id-pkix 3 }

    • id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 }

      • TLS-server-Authentifizierung
        • KU-Bits für:
          digitalSignature, keyEncipherment oder keyAgreement

    • id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 }

      • TLS-client-Authentifizierung
        • KU-bits für:
          digitalSignature und/oder keyAgreement

    • id-kp-codeSigning OBJECT IDENTIFIER ::= { id-kp 3 }

      • Signieren des herunterladbaren ausführbaren Codes
        • KU-bits für:
          digitalSignature

    • id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 }

      • E-Mail-Schutz
        • KU-Bits für:
          digitalSignature, nonRepudiation, und/oder keyEncipherment oder keyAgreement

    • id-kp-timeStamping OBJECT IDENTIFIER ::= { id-kp 8 }

      • Binden des Hash eines Objekts an eine Zeit
        • KU-Bits für:
          digitalSignature und/oder nonRepudiation

    • id-kp-OCSPSigning OBJECT IDENTIFIER ::= { id-kp 9 }

      • Signieren von OCSP-Antworten
        • KU-bits für:
          digitalSignature und/oder nonRepudiation

 60
Author: JW0914,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2021-01-30 13:11:42