Condividi tramite


Il rinnovo del certificato CA con la coppia di chiavi pubblica e privata esistente ha esito negativo quando si usa un provider KSP

Questo articolo consente di risolvere un problema in cui il rinnovo del certificato dell'autorità di certificazione (CA) esistente con la coppia di chiavi pubblica e privata esistente ha esito negativo quando si usa un provider KSP (Key Storage Provider).

Nello snap-in Autorità di certificazione fare clic con il pulsante destro del mouse sulla CA e selezionare Tutte le attività>Rinnova certificato CA. Quindi, nella finestra di dialogo Rinnova certificato CA , quando viene chiesto di generare una nuova coppia di chiavi pubblica e privata, selezionare No, il che significa riutilizzare la coppia di chiavi esistente. In questo caso, non viene richiesto di salvare la richiesta o inviare la richiesta a una CA offline come previsto. Il servizio CA viene riavviato automaticamente e il rinnovo non riesce.

Il valore KeySpec è 2

Per un certificato DELLA CA che usa un provider KSP, la proprietà Key Specification (KeySpec) dovrebbe avere un KeySpec valore .0 Tuttavia, quando si verifica il problema, il KeySpec valore è 2, che causa l'esito negativo del rinnovo del certificato DELLA CA.

Aggiornare il valore KeySpec da 2 a 0

Per risolvere questo problema, aggiornare il KeySpec valore da 2 a 0 usando la procedura seguente:

  1. Esportare l'archivio del computer locale usando il comando seguente:

    certutil -v -store my > c:\temp\machine.txt
    
  2. Controllare i KeySpec valori per tutti i certificati usati dalla CA durante il rinnovo. Ad esempio:

    ================ 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. Se il KeySpec valore è 2 -- AT_SIGNATURE, modificarlo in 0 -- XCN_AT_NONE:

    1. Eseguire il backup della CA e delle chiavi private.

    2. Creare un file con l'estensione .inf . Il contenuto del file (KeyProv.inf) è simile al seguente:

      [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. Eseguire il comando seguente usando il numero di serie del certificato in cui il KeySpec valore è 2:

      certutil -repairstore my "21000000044a30cdeaaaae7b08000000000004" KeyProv.inf
      

      Note

      È possibile controllare l'hash per ogni certificato CA nelle proprietà della CA selezionando ogni certificato e selezionando Visualizza certificato nella scheda Generale . Quindi, nella scheda Dettagli selezionare Numero di serie.

  4. Eseguire nuovamente il comando seguente e quindi verificare se il KeySpec valore è 0:

    certutil -v -store my > c:\temp\machine-new.txt
    
  5. Usare i passaggi precedenti per ognuno degli altri certificati della CA con un KeySpec valore .2

Dopo che tutti i certificati CA hanno un KeySpec valore , 0è possibile provare a rinnovare di nuovo il certificato della CA con la coppia di chiavi esistente.

Ulteriori informazioni

Per i certificati le cui chiavi vengono generate usando provider CNG (Cryptography Next Generation), non esiste alcun concetto di specifica della chiave e il KeySpec valore è sempre 0.

KeySpec valori e significati associati:

Valore Keyspec Valore Significato
0 AT_NONE Il certificato è un certificato CNG.
1 AT_KEYEXCHANGE Per un certificato CAPI (non CNG) legacy, la chiave può essere usata per la firma e la decrittografia.
2 AT_SIGNATURE Per un certificato CAPI (non CNG) legacy, la chiave può essere usata solo per la firma.