我在C#4.6.2框架中有一个控制台应用程序,该应用程序使用RestSharp与REST服务进行通信,以提取一些数据,然后将这些数据输入数据库。该应用程序通过证书以验证我的身份。直到最近,该应用程序仍然运行良好,但最近开始引发错误。现在这在我的本地计算机和通常在其上运行的服务器上均出现错误。我假设已应用某项政策或某些措施,但现在出现以下错误:
Unhandled Exception: System.Security.Cryptography.CryptographicException: The system cannot find the file specified.
at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
at System.Security.Cryptography.X509Certificates.X509Utils._QueryCertFileType(String fileName)
at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile(String fileName, Object password, X509KeyStorageFlags keyStorageFlags)
at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password)
at Feed_Exe.Program.Main(String[] args) in c:\Feed_Exe\Feed_Exe\Program.cs:line 106
我的代码没有很多,但是这就是我所拥有的以及失败的地方
string NextLink = "https://RESTServiceURL";
var request = new RestRequest { Method = Method.GET };
var certFile = Path.Combine(@"C:\Feed_Exe\", "MyCert.pfx");
var x509Cert = new X509Certificate2(certFile, "CertPassword");
//The above line is where it errors
while (!string.IsNullOrWhiteSpace(NextLink))
{
var client = new RestClient
{
BaseUrl = new Uri(NextLink),
UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
ClientCertificates = new X509CertificateCollection()
{
x509Cert
}
};
var response = client.Execute(request);
if (response.ErrorException == null)
{
//Here is where I process the data I got from the service
}
}
首先,证书确实存在于上述路径中。我还重新导出了该证书,并确保包括私钥和根链。证书的密码也正确。
过去,我不需要在计算机上安装证书即可使一切正常运行,因为我不允许在通常运行该计算机的计算机上安装证书。我尝试将其安装到没有帮助的本地计算机(本地计算机和当前用户存储)上。
在研究此问题时,我尝试了一些方法。建议一个线程包含
System.Security.Cryptography.RSACryptoServiceProvider.UseMachineKeyStore = true;
System.Security.Cryptography.DSACryptoServiceProvider.UseMachineKeyStore = true;
哪个没有帮助。我还看到了以下建议:
var x509Cert = new X509Certificate2(certFile, "CertPassword.", X509KeyStorageFlags.DefaultKeySet);
这也没有帮助。我还看到了一些建议,这些建议可以更改一些IIS设置,这些设置可以在本地进行,但不能在服务器上进行。
有什么建议吗?