無法使用 CERTUTIL 導入 PFX——“密鑰集不存在”
我們有一個 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 中的證書管理單元授予權限。他只添加了一個新權限,並沒有更改現有權限,但這不知何故破壞了證書的導入。刪除附加權限後,它又開始工作了。
非常懷疑其他人會遇到同樣的問題,但認為值得回答而不是刪除或關閉問題,因為它可能有一天會幫助其他人。