次の方法で共有


KSP プロバイダーを使用すると、既存の公開キーと秘密キーのペアを使用した CA 証明書の更新が失敗する

この記事は、キー ストレージ プロバイダー (KSP) プロバイダーの使用時に、既存の公開キーと秘密キーのペアを使用した証明機関 (CA) 証明書の更新が失敗する問題を解決するのに役立ちます。

証明機関スナップインで、CA を右クリックし、 すべてのタスク>新しい CA 証明書を選択します。 次に、 [CA 証明書の新規作成 ] ダイアログで、新しい公開キーと秘密キーのペアを生成するように求められたら、[ いいえを選択します。これは、既存のキー ペアを再利用することを意味します。 この場合、要求を保存するか、要求をオフライン CA に期待どおりに送信するように求められません。 CA サービスが自動的に再起動し、更新が失敗します。

KeySpec 値は 2 です

KSP プロバイダーを使用する CA 証明書の場合、キー仕様 (KeySpec) プロパティの KeySpec 値は 0 である必要があります。 ただし、問題が発生すると、 KeySpec 値が 2され、CA 証明書の更新が失敗します。

KeySpec 値を 2 から 0 に更新します

この問題を解決するには、次の手順を使用して、 KeySpec の値を 2 から 0 に更新します。

  1. 次のコマンドを使用して、ローカル コンピューター ストアをエクスポートします。

    certutil -v -store my > c:\temp\machine.txt
    
  2. 更新中に CA によって使用されるすべての証明書の KeySpec 値を確認します。 例えば次が挙げられます。

    ================ 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. KeySpec値が2 -- AT_SIGNATURE場合は、0 -- XCN_AT_NONEに変更します。

    1. CA と秘密キーをバックアップします

    2. .inf拡張子を持つファイルを作成します。 ファイルの内容 (KeyProv.inf) は次のようになります。

      [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. KeySpec値が2されている証明書のシリアル番号を使用して、次のコマンドを実行します。

      certutil -repairstore my "21000000044a30cdeaaaae7b08000000000004" KeyProv.inf
      

      Note

      CA プロパティで各 CA 証明書のハッシュを確認するには、各証明書を選択し、General タブで View Certificate を選択します。次に、Details タブで[番号を選択します。

  4. 次のコマンドを再実行し、 KeySpec 値が 0されているかどうかを確認します。

    certutil -v -store my > c:\temp\machine-new.txt
    
  5. KeySpec値が 2 の他の CA 証明書ごとに、上記の手順を使用します。

すべての CA 証明書の KeySpec 値が 0 になったら、既存のキー ペアを使用して CA 証明書の更新を再試行できます。

詳細

暗号化次世代 (CNG) プロバイダーを使用してキーが生成される証明書の場合、キー指定の概念はなく、 KeySpec 値は常に 0

KeySpec 値と関連する意味:

Keyspec 値 意味
0 AT_NONE 証明書は CNG 証明書です。
1 AT_KEYEXCHANGE 従来の CAPI (非 CNG) 証明書の場合、署名と暗号化解除にキーを使用できます。
2 AT_SIGNATURE 従来の CAPI (非 CNG) 証明書の場合、キーは署名にのみ使用できます。