c# - 无法在每个其他请求中创建 SSL/TLS 安全通道

标签 c# ssl webclient

我已经阅读了大多数与 SSL/TLS 错误相关的其他问题。这个问题与 PayPal 无关(许多其他问题也是如此),我尝试设置 SecurityProtocol 并使用始终返回 true 的 ServerCertificateValidationCallback。这些都没有改变行为,即请求第一次成功完成,然后失败,然后成功,然后失败。我可以在每次重新启动应用程序时重复此行为。

代码如下:

HttpClient client = new HttpClient();
string url = "https://secure.geonames.net/countryInfoJSON?lang=" +
             HttpUtility.UrlEncode(lang) + "&username=username";
var countryResponse = await client.GetAsync(url);

如果我使用 http 而不是 https 向服务发出请求,它每次都能正常工作。如果我从 Chrome 中点击 https URL,它每次都有效。然而,上面的代码每隔一个请求就会失败一次。为什么?

这是堆栈跟踪:

<Message>An error has occurred.</Message>
<ExceptionMessage>
The request was aborted: Could not create SSL/TLS secure channel.
</ExceptionMessage>
<ExceptionType>System.Net.WebException</ExceptionType>
<StackTrace>
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
</StackTrace>

最佳答案

检查您的商店中的根证书。 friend 发现,如果超过一定数量(认为是 300 左右),则在应用程序生命周期内并非所有证书都可用。我们有一个案例,连接似乎随机失败。几天前,Microsoft 将一些新证书推送到 Windows Server 上的根存储。

关于c# - 无法在每个其他请求中创建 SSL/TLS 安全通道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38529809/

相关文章:

c# - MySql 和插入最后一个 ID 问题仍然存在

apache - .htaccess 不适用于 SSL apache

ssl - 在 Hyperledger Fabric 中使用 TLS 后如何验证安全通信

java - 以 ClientRegistrationId 作为请求属性的 WebClient(使用 OAuth 2.0)

c# - 从 Google Trends 下载 .csv 文件

c# - 在 Web.Config 中以编程方式更改成员提供者的属性

c# - 如何在 Enum.Parse 中将 null 解析为 null?

c# - mvvmlight 信使奇怪的行为

git - 作为服务运行时,TFS Build Agent 无法连接到 TFS 2017 中的 HTTPS git

C# Web 异常意外的 EOF