如果从Visual Studio运行代码,请尝试以管理员身份运行Visual Studio。解决了我的问题。
只要这是一个相对“实时”的链接,我想我会添加一个新选项。由于Poodle攻击的问题,该服务可能不再支持SSL 3.0。查看关于此的Google声明。我立刻遇到了几个Web服务的问题,并意识到必须要进行一些事情。我切换到TLS 1.2,一切都恢复正常。
http://googleonlinesecurity.blogspot.com/2014/10/this-poodle-bites-exploiting-ssl-30.html
在客户端是Windows机器的情况下,可能的原因可能是服务所需的tls或ssl协议未被激活。
这可以设置为:
控制面板 - >网络和互联网 - >互联网选项 - >高级
将设置滚动到“安全”并在两者之间进行选择
您可以尝试安装演示证书(一些ssl提供商免费提供一个月),以确保问题是否与证书有效性相关。
在我的情况下,当Windows服务试图连接到Web服务时,我遇到了这个问题。最后查看Windows事件我发现了一个错误代码。
事件ID 36888(Schannel)被提出:
The following fatal alert was generated: 40. The internal error state is 808.
最后,它与Windows Hotfix有关。就我而言:KB3172605和KB3177186
vmware论坛中提出的解决方案是在Windows中添加一个注册表项。添加以下注册表后一切正常。
[HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \控制\ SecurityProviders \ SCHANNEL \ KeyExchangeAlgorithms \的Diffie-Hellman]
“ClientMinKeyBitLength”= DWORD:00000200
显然,它与客户端https握手中的缺失值有关。
列出您的Windows HotFix:
wmic qfe list
解决方案线程
https://communities.vmware.com/message/2604912#2604912
希望它有所帮助。
在.NET 4.5中解决这个问题的方法是
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
如果您没有.NET 4.5,请使用
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
原始答案没有的东西。我添加了一些代码以使其成为防弹。
ServicePointManager.Expect100Continue = true; ServicePointManager.DefaultConnectionLimit = 9999; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
我有这个问题,因为我的web.config有:
<httpRuntime targetFramework="4.5.2" />
并不是:
<httpRuntime targetFramework="4.6.1" />
这个问题可以有很多答案,因为它关于一般的错误信息。我们在一些服务器上遇到了这个问题,但不是我们的开发机器。拔出大部分头发后,我们发现这是一个微软的错误。
https://support.microsoft.com/en-us/help/4458166/applications-that-rely-on-tls-1-2-strong-encryption-experience-connect
从本质上讲,MS假设您需要较弱的加密,但操作系统仅修补为允许TLS 1.2,因此您收到了可怕的“请求已中止:无法创建SSL / TLS安全通道”。
有三个修复。
1)使用适当的更新来修补操作系统: http://www.catalog.update.microsoft.com/Search.aspx?q=kb4458166
2)在app.config / web.config文件中添加设置。
3)添加另一个答案中已经提到的注册表设置。
所有这些都在我发布的知识库文章中提到过。
就我而言,运行应用程序的服务帐户没有访问私钥的权限。一旦我获得此许可,错误便消失了
这对我来说是固定的,添加网络服务权限。 右键单击证书&gt;所有任务&gt;管理私钥&gt;添加&gt;网络服务
另一种可能性是在盒子上输入不正确的证书。确保选中环绕的复选框。最初我没有这样做,因此代码要么超时要么抛出相同的异常,因为无法找到私钥。
这只是在一个网站上发生的,事实证明它只有RC4密码可用。在先前努力强化服务器的过程中,我已经禁用了RC4密码,一旦我重新启用它,问题就解决了。
除上述答案外,请确保已将CER证书,而不是PFX文件导入本地计算机商店。有这两个文件时常见的错误。
试试这个:
另一个可能的原因 The request was aborted: Could not create SSL/TLS secure channel 错误是 的 客户端PC配置的cipher_suites值与服务器配置为愿意并且能够接受的值不匹配 强> 。在这种情况下,当您的客户端在其初始SSL握手/协商“客户端Hello”消息中发送它能够接受的cipher_suites值列表时,服务器会发现所提供的值都不可接受,并且可能返回“警报” “响应而不是继续进行SSL握手的”服务器Hello“步骤。
The request was aborted: Could not create SSL/TLS secure channel
要研究这种可能性,您可以下载 Microsoft消息分析器 ,并使用它来运行在您尝试并且无法建立到服务器的HTTPS连接(在C#应用程序中)时发生的SSL协商的跟踪。
如果您能够从另一个环境(例如您提到的Windows XP计算机)成功建立HTTPS连接,或者可能通过在不使用操作系统密码套件设置的非Microsoft浏览器中访问HTTPS URL,例如Chrome或Firefox),在该环境中运行另一个Message Analyzer跟踪,以捕获SSL协商成功时发生的情况。
希望您会看到两个Client Hello消息之间的某些区别,这些消息将使您能够准确查明失败的SSL协商导致其失败的原因。然后,您应该能够对Windows进行配置更改,以使其成功。 IISCrypto 是一个很好的工具(即使对于客户端PC,尽管有“IIS”名称)。
以下两个Windows注册表项控制您的PC将使用的cipher_suites值:
以下是我如何调查并解决了这一类的实例的完整文章 Could not create SSL/TLS secure channel 问题: http://blog.jonschneider.com/2016/08/fix-ssl-handshaking-error-in-windows.html
Could not create SSL/TLS secure channel
我整天都在努力解决这个问题。
的 当我使用.NET 4.5创建一个新项目时,我终于开始工作了。 强>
但是,如果我降级到4.0,我又遇到了同样的问题,这对于那个项目是不可逆转的(即使我试图再次升级到4.5)。
奇怪没有其他错误消息但是 “请求已中止:无法创建SSL / TLS安全通道。” 想出了这个错误
经过长时间的同一个问题后,我发现运行客户端服务的ASP.NET帐户无法访问证书。我通过进入运行Web应用程序的IIS应用程序池,进入高级设置,并将身份更改为 LocalSystem 帐户来自 NetworkService 。
LocalSystem
NetworkService
更好的解决方案是使证书使用默认值 NetworkService 帐户,但这适用于快速功能测试。
System.Net.WebException:请求已中止:无法创建 SSL / TLS安全通道。
在我们的例子中,我们使用软件供应商,因此我们无权修改.NET代码。显然,.NET 4不会使用TLS v 1.2,除非有更改。
我们的修复是将SchUseStrongCrypto密钥添加到注册表中。您可以将以下代码复制/粘贴到带有.reg扩展名的文本文件中并执行它。它是我们解决问题的“补丁”。
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319] "SchUseStrongCrypto"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319] "SchUseStrongCrypto"=dword:00000001
正如您所知,这可能有很多原因。以为我会添加我遇到的原因......
如果设置值 WebRequest.Timeout 至 0 ,这是抛出的异常。下面是我的代码...(除了硬编码 0 对于超时值,我有一个无意中设置的参数 0 )。
WebRequest.Timeout
0
WebRequest webRequest = WebRequest.Create(@"https://myservice/path"); webRequest.ContentType = "text/html"; webRequest.Method = "POST"; string body = "..."; byte[] bytes = Encoding.ASCII.GetBytes(body); webRequest.ContentLength = bytes.Length; var os = webRequest.GetRequestStream(); os.Write(bytes, 0, bytes.Length); os.Close(); webRequest.Timeout = 0; //setting the timeout to 0 causes the request to fail WebResponse webResponse = webRequest.GetResponse(); //Exception thrown here ...
对我来说问题是我试图在IIS上作为Web服务部署,我在服务器上安装了证书,但运行IIS的用户对证书没有正确的权限。
如何让ASP.NET访问证书存储区中的证书中的私钥?
我遇到了同样的问题并找到了 这个答案 为我工作得很好。关键是3072。 这个链接 提供有关'3072'修复的详细信息。
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; XmlReader r = XmlReader.Create(url); SyndicationFeed albums = SyndicationFeed.Load(r);
在我的情况下,两个Feed需要修复:
https://www.fbi.gov/feeds/fbi-in-the-news/atom.xml https://www.wired.com/feed/category/gear/latest/rss