我們有一個 PFX 文件,在任何其他 Windows 系統(Server 2008 R2、7、8)上使用時都可以正常安裝。在我的兩台伺服器上,導入失敗,如下所示:
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
我們執行的每次谷歌搜尋總是返回相同的基本答案,一些與私鑰權限相關的內容......但這是基於我們看到的錯誤訊息。
WinHttpCertCfg.exe
最終,我們在使用記錄Process Monitor
對資料夾和註冊表的存取權後找到了問題。
當我們的一位開發人員新增一些測試憑證時,他也更改了資料C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
夾的安全權限,以便 IIS 可以存取他匯入的憑證的私鑰,而不是透過 MMC 中的憑證管理單元授予權限。
他只添加了一個新的權限,沒有更改現有的權限,但這在某種程度上破壞了證書的匯入。當附加權限被刪除後,它再次開始工作。
非常懷疑其他人是否會遇到同樣的問題,但認為值得回答而不是刪除或關閉問題,因為有一天它可能會幫助其他人解決問題。