我通过https连接到api时遇到问题。我写了一个小的控制台应用程序:
var handler = new WebRequestHandler();
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
foreach (X509Certificate2 mCert in store.Certificates)
{
// add my locale certificate
if (mCert.FriendlyName == "some_identifier_name")
handler.ClientCertificates.Add(mCert);
}
var httpClient = new HttpClient(handler);
var response= httpClient.GetAsync("https://url-to-my.com/api/something").Result;
var result = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(result);
这个小脚本工作正常,我从API获得了状态码200和json数据。如您所见,我在本地计算机上安装了一个证书,并将其添加到代码中。
我在我的网络服务器上尝试了相同的脚本,那里的一切也正常!但是,如果我在mvc应用程序中运行脚本,仍会收到消息“请求已中止:无法创建SSL / TLS安全通道”。
如果我将其作为exe或mvc网站运行,则具有相同代码的区别在哪里?
PS:此代码不是我的问题的答案,我已经尝试过了:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
解决方案:IIS>应用程序池>选择您的Apppool>高级设置>身份>更改为LocalSystem
似乎您必须赋予您的应用程序池足够的权限,才能从本地计算机读取证书。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句