RestSharp:无法创建SSL/TLS安全通道

7

我正在尝试在Windows 8.1的全新安装上,使用Visual Studio 2012 Express中的RestSharp。我试图使用的API仅支持RC4-SHA进行SSL。证书是有效的。

var client = new RestClient();
client.BaseUrl = "https://teststore.mybigcommerce.com/api/v2/";
client.Authenticator = new HttpBasicAuthenticator("username", "key");

var request = new RestRequest();
request.Resource = "time.json";

IRestResponse response = client.Execute(bcrequest);

我不断收到客户端的错误提示:The request was aborted: Could not create SSL/TLS secure channel。我一直以为是证书问题,直到我最终进行数据包捕获并发现没有共同的密码套件。在客户端端没有可用的RC4-SHA。安装Windows 7并运行完全相同的代码后,问题消失了。

为什么RestSharp在Windows 8.1上不支持RC4-SHA?

2个回答

11

我总是在进行初始网络连接之前添加以下代码行以解决这个问题。

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12 | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls11;

1
将 .Net SecurityProtocolType 设置为 .Net TLS 版本 1.2 对我来说解决了问题。似乎 Restsharp 默认选择了错误的版本。 - j7m

6
我安装Win 8.1后,我的应用程序出现了TLS握手失败的情况。在工作和非工作客户端登录时,我的Wireshark捕获显示缺少密码套件。在连接到的服务器上安装真实证书也解决了这个问题。该服务器使用的是自签名证书。最终,我找到了this Microsoft article
RC4已不再默认用于TLS。如果应用程序(如Internet Explorer)依赖于RC4,则可能无法连接。您可以通过使用以下REG命令配置这些注册表键来启用RC4支持:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 128/128]"Enabled"=dword:ffffffff

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 40/128]"Enabled"=dword:ffffffff

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 56/128]"Enabled"=dword:ffffffff

1
在此网站上,有一个可以编程禁用握手(仅限开发版本,请小心!)的解决方案:http://robertgreiner.com/2013/03/could-not-establish-trust-relationship-for-the-ssl-tls-secure-channel/ 只需在任何网络调用之前添加以下行:ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true; - 56ka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接