この記事は、キー ストレージ プロバイダー (KSP) プロバイダーの使用時に、既存の公開キーと秘密キーのペアを使用した証明機関 (CA) 証明書の更新が失敗する問題を解決するのに役立ちます。
証明機関スナップインで、CA を右クリックし、 すべてのタスク>新しい CA 証明書を選択します。 次に、 [CA 証明書の新規作成 ] ダイアログで、新しい公開キーと秘密キーのペアを生成するように求められたら、[ いいえを選択します。これは、既存のキー ペアを再利用することを意味します。 この場合、要求を保存するか、要求をオフライン CA に期待どおりに送信するように求められません。 CA サービスが自動的に再起動し、更新が失敗します。
KeySpec 値は 2 です
KSP プロバイダーを使用する CA 証明書の場合、キー仕様 (KeySpec) プロパティの KeySpec
値は 0
である必要があります。 ただし、問題が発生すると、 KeySpec
値が 2
され、CA 証明書の更新が失敗します。
KeySpec 値を 2 から 0 に更新します
この問題を解決するには、次の手順を使用して、 KeySpec
の値を 2
から 0
に更新します。
次のコマンドを使用して、ローカル コンピューター ストアをエクスポートします。
certutil -v -store my > c:\temp\machine.txt
更新中に 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
KeySpec
値が2 -- AT_SIGNATURE
場合は、0 -- XCN_AT_NONE
に変更します。.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"
KeySpec
値が2
されている証明書のシリアル番号を使用して、次のコマンドを実行します。certutil -repairstore my "21000000044a30cdeaaaae7b08000000000004" KeyProv.inf
Note
CA プロパティで各 CA 証明書のハッシュを確認するには、各証明書を選択し、General タブで View Certificate を選択します。次に、Details タブで[番号を選択します。
次のコマンドを再実行し、
KeySpec
値が0
されているかどうかを確認します。certutil -v -store my > c:\temp\machine-new.txt
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) 証明書の場合、キーは署名にのみ使用できます。 |