我模擬服務用戶帳戶以連接到需要證書連接的Web服務。我在運行代碼的機器上的服務帳戶上安裝了客戶端證書,但是收到錯誤System.Security.Cryptography.CryptographicException:系統找不到指定的文件。訪問模擬用戶密鑰存儲區
using (var ctx = new ImpersonationContext("svcAcctUserName", "domain", "password"))
{
var clientCert = new X509Certificate2("filePath", "certPassword");
}
的模擬代碼工作,爲簡潔起見我已經離開它,但我檢查,以確保我的上下文是通過記錄Environment.UserName,這表明我正在爲svcAcctUserName切換到svcAcctUserName用戶。 filePath是正確的,我又把它留了下來,但是我在創建X509Certificate2對象之前打開並關閉了文件,以確保我已經訪問了該文件並且我的路徑是正確的。
該錯誤令人困惑,因爲我將路徑作爲參數提供,並且我確定運行代碼的用戶可以訪問。
編輯:
雖然我沒有使用asp.net應用程序,我給它一個想試試。我將證書加載項添加到mmc,添加了「本地計算機」證書添加,然後將證書導入到本地計算機的個人存儲中。
我然後跑:
WinHttpCertCfg.exe -g -c LOCAL_MACHINE\My -s issuedToName -a domain\svcAcctUserName
試圖運行操作一遍,還是同樣的問題。
我錯過了什麼?
你是如何訪問web服務?證書是安裝在密鑰庫中還是隻安裝在文件系統中? – Brian
它位於模擬服務帳戶的個人密鑰存儲區中,並位於local_machines密鑰存儲區中,授權通過模擬用戶訪問它。請參閱下面的我嘗試過的內容。 – Bitfiddler
您的示例演示使用文件路徑調用X509Certificate2的構造函數,但您正在討論商店中的證書......請對齊您的問題和示例代碼以討論相同的事情。 –