Freigeben über


Bei der Zertifikatverlängerung mit dem vorhandenen Schlüsselpaar für öffentliche und private Schlüssel tritt ein Fehler auf, wenn ein KSP-Anbieter verwendet wird.

Dieser Artikel hilft bei der Behebung eines Problems, bei dem die Zertifikaterneuerung der Zertifizierungsstelle mit dem vorhandenen öffentlichen und privaten Schlüsselpaar fehlschlägt, wenn ein Schlüsselspeicheranbieter (Key Storage Provider, KSP) verwendet wird.

Klicken Sie im Snap-In der Zertifizierungsstelle mit der rechten Maustaste auf die Zertifizierungsstelle, und wählen Sie das Zertifizierungsstellenzertifikat "Alle Aufgaben>erneuern" aus. Wenn Sie dann im Dialogfeld "Zertifizierungsstellenzertifikat erneuern" aufgefordert werden, ein neues öffentliches und privates Schlüsselpaar zu generieren, wählen Sie "Nein" aus, was bedeutet, das vorhandene Schlüsselpaar wiederzuverwenden. In diesem Fall werden Sie nicht aufgefordert, die Anforderung zu speichern oder die Anforderung wie erwartet an eine Offline-Zertifizierungsstelle zu senden. Der Zertifizierungsstellendienst wird automatisch neu gestartet, und die Verlängerung schlägt fehl.

Der KeySpec-Wert ist 2.

Für ein Zertifizierungsstellenzertifikat mit einem KSP-Anbieter wird erwartet, dass die Key Specification -Eigenschaft (KeySpec) einen KeySpec Wert aufweist 0. Wenn das Problem auftritt, lautet 2der KeySpec Wert jedoch , was dazu führt, dass die Zertifikatverlängerung der Zertifizierungsstelle fehlschlägt.

Aktualisieren des KeySpec-Werts von 2 auf 0

Um dieses Problem zu beheben, aktualisieren Sie den Wert 2 mithilfe der KeySpec folgenden Schritte auf folgende 0 Schritte:

  1. Exportieren Sie den lokalen Computerspeicher mit dem folgenden Befehl:

    certutil -v -store my > c:\temp\machine.txt
    
  2. Überprüfen Sie die KeySpec Werte für alle Zertifikate, die während der Verlängerung von der Zertifizierungsstelle verwendet werden. Zum Beispiel:

    ================ Certificate 3 ================
    X509 Certificate:
    Version: 3
    Serial Number: 21000000044a30cdeaaaae7b08000000000004
    Signature Algorithm:
    Algorithm ObjectId: 1.2.840.113549.1.1.11 sha256RSA
    Algorithm Parameters:
    05 00
    
    Issuer:
    CN=ROOTCA-CA
    Name Hash(sha1): a07626ccaaaaabbbb562364300973304401cd3fb
    Name Hash(md5): 78ac82e59faaaabbbbe860f908f29b29
    
    NotBefore: <DateTime>
    NotAfter: <DateTime>
    
    Subject:
    CN=Contoso CA
    DC=Contoso
    DC=com
    ...
    Name Hash(sha1): 01aad90aaaabbbbf368a509eed47be8ea0a3b78d
    Name Hash(md5): 278a394aaaabbbbf27fbd177c498ca02
    Cert Hash(md5): 1b425aaaabbbbaf29c6747e9e0b6f093
    Cert Hash(sha1): 35599aaaabbbb0438686dd79915e943895d1e276
    Cert Hash(sha256): 96ebd75aaaabbbbb0db31f7a83891533eeada0351ce56b84f3918941c9cba610
    Signature Hash: f905cf5aaaabbbb2548c592c593ee6864c9c2dc3ec305da3f4d6751a6ff17afd
    ...
    CERT_KEY_PROV_INFO_PROP_ID(2):
    Key Container = Contoso CA
    Unique container name: 944d5680aaaabbbb95b1cb4f50ba2b71_6e4d3030-8aae-40f0-9282-d69ccdd4ff34
    Provider = Microsoft Software Key Storage Provider
    ProviderType = 0
    Flags = 20 (32)
    CRYPT_MACHINE_KEYSET -- 20 (32)
        KeySpec = 2 -- AT_SIGNATURE
    
  3. Wenn der KeySpec Wert lautet 2 -- AT_SIGNATURE, ändern Sie ihn in 0 -- XCN_AT_NONE:

    1. Sichern Sie die Zertifizierungsstelle und private Schlüssel.

    2. Erstellen Sie eine Datei mit der .inf Erweiterung. Der Inhalt der Datei (KeyProv.inf) ähnelt:

      [Properties]
      2 = "{text}" ; Add Key Provider Information property
      _continue_="Container = CONTAINER_NAME&"   // Replace the "CONTAINER_NAME" with the CA Key Container name of the certificate that has the Serial Number "21000000044a30cdeaaaae7b08000000000004"; Keep the sign '&' in the end;
      _continue_="Provider = Microsoft Software Key Storage Provider&"
      _continue_="ProviderType = 0&"
      _continue_="Flags = 0x20&"
      _continue_="KeySpec = 0"
      
    3. Führen Sie den folgenden Befehl mit der Seriennummer des Zertifikats aus, wobei der KeySpec Wert lautet 2:

      certutil -repairstore my "21000000044a30cdeaaaae7b08000000000004" KeyProv.inf
      

      Notiz

      Sie können den Hash für jedes Zertifizierungsstellenzertifikat in den Zertifizierungsstelleneigenschaften überprüfen, indem Sie jedes Zertifikat auswählen und auf der Registerkarte "Allgemein" die Option "Zertifikat anzeigen" auswählen. Wählen Sie dann auf der Registerkarte "Details" die Option "Seriennummer" aus.

  4. Führen Sie den folgenden Befehl erneut aus, und überprüfen Sie dann, ob der KeySpec Wert lautet 0:

    certutil -v -store my > c:\temp\machine-new.txt
    
  5. Führen Sie die vorstehenden Schritte für jedes der anderen Zertifizierungsstellenzertifikate mit einem KeySpec Wert von 2.

Sobald alle Zertifizierungsstellenzertifikate einen KeySpec Wert 0haben, können Sie versuchen, das Zertifizierungsstellenzertifikat erneut mit dem vorhandenen Schlüsselpaar zu verlängern.

Weitere Informationen

Für Zertifikate, deren Schlüssel mithilfe von CNG-Anbietern (Cryptography Next Generation) generiert werden, gibt es kein Konzept der Schlüsselspezifikation, und der KeySpec Wert ist immer 0.

KeySpec Werte und zugehörige Bedeutungen:

KeySpec-Wert Wert Bedeutung
0 AT_NONE Das Zertifikat ist ein CNG-Zertifikat.
1 AT_KEYEXCHANGE Bei einem älteren CAPI-Zertifikat (non-CNG) kann der Schlüssel zum Signieren und Entschlüsseln verwendet werden.
2 AT_SIGNATURE Bei einem älteren CAPI-Zertifikat (non-CNG) kann der Schlüssel nur zum Signieren verwendet werden.