启动与系统组件

使用 KSP 提供程序时 CA 证书续订失败 - Windows Server

· 52CE 我爱测

本文有助于解决使用密钥存储提供程序(KSP)提供程序时,使用现有公钥和私钥对续订证书时证书续订失败的问题。 在证书颁发机构管理单元中,右键单击 CA 并选择“所有任务>续订 CA 证书”。 然后,在 “续订 CA 证书 ”对话框中,当系统要求生成新的公钥和私钥对时,选择“ 否”,这意味着重复使用现有的密钥对。 在这种情况下,系统不会提示保存请求或按预期将请求发送到脱机 CA。 CA 服务会自动重启,续订失败。 KeySpec 值为 2 对于使用 KS

本文有助于解决使用密钥存储提供程序(KSP)提供程序时,使用现有公钥和私钥对续订证书时证书续订失败的问题。

在证书颁发机构管理单元中,右键单击 CA 并选择“所有任务>续订 CA 证书”。 然后,在 “续订 CA 证书 ”对话框中,当系统要求生成新的公钥和私钥对时,选择“ 否”,这意味着重复使用现有的密钥对。 在这种情况下,系统不会提示保存请求或按预期将请求发送到脱机 CA。 CA 服务会自动重启,续订失败。

KeySpec 值为 2

对于使用 KSP 提供程序的 CA 证书,密钥规范 (KeySpec) 属性应具有值KeySpec``0。 但是,当出现问题时, KeySpec 值为 2导致 CA 证书续订失败。

将 KeySpec 值从 2 更新为 0

若要解决此问题,请使用以下步骤从2中0更新KeySpec值:

  1. 使用以下命令导出本地计算机存储:

    certutil -v -store my > c:\temp\machine.txt
    
  2. 检查 KeySpec 续订期间 CA 使用的所有证书的值。 例如:

    ================ 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
      

      注意

      可以通过选择每个证书并选择“常规**”选项卡上的“查看证书”来检查 CA 属性中每个 CA 证书的哈希。然后,在“详细信息**”选项卡上,选择**“序列号**”。

  4. 重新执行以下命令,然后检查该值是否 KeySpec 为 0:

    certutil -v -store my > c:\temp\machine-new.txt
    
  5. 对值为 的其他每个 CA 证书KeySpec``2使用上述步骤。

所有 CA 证书都具有 KeySpec 值 0后,可以尝试使用现有密钥对再次续订 CA 证书。

详细信息

对于使用加密下一代(CNG)提供程序生成密钥的证书,没有密钥规范的概念,并且 KeySpec 值始终 0如此。

KeySpec 值和关联含义:

Keyspec 值 值 含义
0 AT_NONE 证书是 CNG 证书。
1 AT_KEYEXCHANGE 对于旧版 CAPI(非 CNG)证书,密钥可用于签名和解密。
2 AT_SIGNATURE 对于旧版 CAPI(非 CNG)证书,密钥只能用于签名。

资料来源与适用范围

资料来源
微软官方中文故障文档
适用范围
按正文的 Windows / Windows Server 适用版本;保留原文兼容性要求
内容语言
中文;命令、路径和错误标识保留技术原文
本地收录日期
2026-10-26
授权说明
CC BY 4.0

正文与所需资源由本站本地存储。查看来源及更新记录 ↗

请按适用版本和实际日志确认原因;本站没有对每一种系统或设备逐项执行文中的操作。