You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移企业根CA至新服务器后CA服务无法启动(错误0x80090016/NTE_BAD_KEYSET)求助

迁移企业根CA至新服务器后CA服务无法启动(错误0x80090016/NTE_BAD_KEYSET)求助

我完全理解这个问题的紧迫性——企业根CA是整个PKI体系的核心,而且你们的AOVPN还依赖现有根证书,根本没法随便重建新证书。这个0x80090016错误本质是CA服务找不到或者无法访问对应的私钥容器,大概率是备份恢复过程中权限、密钥容器匹配或者注册表配置出了问题,咱们一步步来排查解决:

排查与修复步骤

1. 检查私钥容器的权限

  • 首先定位CA私钥的存储路径:默认在C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys(这个路径是隐藏的,需要显示隐藏文件才能看到)。
  • 找到对应CA证书的密钥容器文件:你可以通过certlm.msc打开计算机证书管理器,依次展开个人→证书,选中你的根CA证书,右键→所有任务→管理私钥,弹框里的“对象名称”就是对应的容器文件名。
  • 右键这个容器文件→属性→安全,确保以下账户拥有读取权限:
    • NT Authority\Network Service
    • NT Authority\System
    • CA服务的运行账户(默认是Network Service,如果自定义了账户也要加上)
  • 如果权限缺失,手动添加并赋予读取权限,然后重启CA服务试试。

2. 验证证书与私钥的匹配性

  • 打开管理员命令提示符,执行以下命令验证(替换成你的CA证书路径):
    certutil -verify -urlfetch "C:\Path\To\Your\RootCA.cer"
    
  • 重点看输出里的Private Key Status字段,如果显示Private key is present说明证书和私钥是匹配的;如果不是,那大概率是旧CA备份时没正确导出私钥,得回到旧服务器重新导出(务必选择“导出私钥”,并设置强密码)。

3. 修复注册表中的密钥容器配置

  • 打开注册表编辑器(regedit),导航到:
    HKLM\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<你的CA名称>
    
  • 检查PrivateKeyContainerName的值,是否和你在MachineKeys里找到的容器文件名完全一致。如果不一致,修改成正确的文件名。
  • 同时检查CA certificate hash的值,是否和CA证书的指纹匹配(在certlm.msc里查看证书指纹,记得去掉中间的空格)。

4. 重新注册CA证书与私钥

  • 先停止CA服务:
    net stop certsvc
    
  • 清空可能存在的CNG哈希冲突:
    certutil -setreg ca\csp\CNGPublicKeyHash ""
    
  • 修复证书存储(替换成你的CA证书指纹,去掉空格):
    certutil -repairstore my <CA证书指纹>
    
  • 尝试启动CA服务:
    net start certsvc
    

5. 确保加密服务正常运行

  • CA服务依赖Cryptographic Services,先检查这个服务的状态:
    sc query cryptsvc
    
  • 如果服务未启动,执行以下命令启动:
    net start cryptsvc
    
  • 启动后再尝试启动CA服务。

如果以上步骤都试过还是不行,建议回到旧CA服务器,重新导出包含私钥的PFX格式证书(导出时要勾选“导出私钥”,并包含完整的证书链),然后在新服务器上导入这个PFX到计算机账户的个人证书存储,再重新配置CA服务指向这个导入的证书(注意不要选择“生成新证书”)。

备注:内容来源于stack exchange,提问作者LeeCS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 15:54:29