【问题标题】:Could not create SSL/TLS secure channel every OTHER request无法为每个 OTHER 请求创建 SSL/TLS 安全通道
【发布时间】:2016-07-22 15:07:39
【问题描述】:

我已经阅读了大多数与 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>

【问题讨论】:

  • 是否设置了本地代理?
  • 这很棘手,尤其是因为我无法重现它。此域映射到三个不同的 IP。也许您的程序循环解析到不同的服务器,并且其中一个服务器的配置方式使其在那里失败,尽管SSLLabs 没有报告这一点(即使它们的 TLS 不安全,它应该可以工作)。有内部异常吗?异常的HResult 是什么?

标签: c# ssl webclient


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-02-27
    • 2012-06-05
    • 2018-04-22
    • 2012-10-30
    • 1970-01-01
    相关资源
    最近更新 更多