我们有一个 PFX 文件,在任何其他 Windows 系统(Server 2008 R2、7、8)上使用时都可以正常安装。在我的 2 台服务器上,导入失败,如下所示:
CertUtil: -importPFX command FAILED: 0x80090016 (-2146893802)
CertUtil: Keyset does not exist
我们最初使用 MMC 管理单元导入此 PFX,这似乎可以正常工作,因为没有报告任何错误,并且证书在打开时显示它有一个私钥,但使用我们的 .NET 应用程序时,我们收到一条关于没有私钥的错误。我们假设私钥权限并为我们的应用程序池添加了正确的权限。这没什么区别。我们已多次导入和删除以尝试修复此问题。
我们现在注意到,当通过 MMC 执行导入时,添加到文件夹中的文件大小C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
在无法正常工作的服务器上只有 79kb,而在正常工作的系统上它们通常显示为 2kb。
我已经对这些文件进行了 MD5 检查,因此检查它们是否相同(它们曾经是相同的),并且我还将它们从无法正常工作的系统中复制回来(原始复制的文件不是导出的文件),并且它们在其他地方仍然可以工作。
这为什么会失败呢?
答案1
我们执行的每一个 Google 搜索总是返回相同的基本答案,与私钥的权限有关...但这是基于我们看到的错误消息。
WinHttpCertCfg.exe
最终我们在使用以及Process Monitor
记录对文件夹和注册表的访问后找到了问题。
当我们的一位开发人员添加一些测试证书时,他还更改了文件C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
夹的安全权限,以便 IIS 可以访问他导入的证书的私钥,而不是通过 MMC 中的证书管理单元授予权限。
他只添加了新权限,没有更改现有权限,但这不知何故破坏了证书的导入。删除附加权限后,它又开始正常工作了。
非常怀疑其他人是否会遇到同样的问题,但认为回答是值得的,而不是删除或关闭问题,因为它有一天可能会帮助别人。