我们有一个 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 检查,因此检查它们是否相同(它们是相同的),并且我还从不工作的系统中将它们复制回来(原始复制的文件不是导出文件)并且在其他地方仍然有效。
为什么这会失败?
我们执行的每个 Google 搜索总是返回相同的基本答案,这与私钥的权限有关……但这是基于我们看到的错误消息。
最终,我们在使用
WinHttpCertCfg.exe
withProcess Monitor
来记录对文件夹和注册表的访问后,找到了问题所在。当我们的一位开发人员添加一些测试证书时,他还更改了
C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
文件夹的安全权限,以便 IIS 可以访问他导入的证书的私钥,而不是通过 MMC 中的证书管理单元授予权限。他只添加了一个新权限,并没有更改现有权限,但这不知何故破坏了证书的导入。删除附加权限后,它又开始工作了。
非常怀疑其他人会遇到同样的问题,但认为值得回答而不是删除或关闭问题,因为它可能有一天会帮助其他人。