我正在模拟一个服务用户帐户,以便连接到需要证书才能连接的 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 Web 应用程序中使用客户端证书进行身份验证来调用 Web 服务
虽然我没有使用 asp.net 应用程序,但我还是试了一下。我将证书插件添加到 mmc,添加了“本地计算机”证书插件,然后将证书导入到本地计算机的个人存储中。
然后我跑了:
WinHttpCertCfg.exe -g -c LOCAL_MACHINE\My -s issuedToName -a domain\svcAcctUserName
再次尝试运行该操作,仍然是同样的问题。
我错过了什么?