RestSharp-忽略SSL错误


73

是否可以让RestSharp忽略SSL证书中的错误?我有一个测试客户端,并且我连接到的服务还没有有效的证书。

当我现在发出请求时,出现错误:

The underlying connection was closed: Could not establish trust 
relationship for the SSL/TLS secure channel.

1
答案就在这里,但我无法从我的手机上将
John Sheehan

太好了-我已经用答案更新了问题。但是发布一个“真实的”答案,我会接受的:-)
Michael Skarum,2012年

5
通常最好将测试证书导入客户端信任锚的测试中,而不要完全忽略证书验证。首先,它更现实;其次,您避免将这种不安全的代码留在最终产品中。
布鲁诺

+1,谢谢;正是我想要的!
克里斯·汤森

1
我会说,最好是为您的问题写一个答案,而不要烘焙问题中的答案。
Johan Larsson

Answers:


83

正如约翰建议的:

ServicePointManager.ServerCertificateValidationCallback +=
        (sender, certificate, chain, sslPolicyErrors) => true;

7
是可行的,但考虑到它正在设置全球行为,这并不是很好。
2016年

1
您可以sender.Address选择仅true当该主机可以绕过SSL验证时才返回。
欧文·梅耶

下面还有另一个答案,显示了如何在RestClient对象上而不是在全局对象上进行设置。
JamesHoux

42

您可以绕过SSL检查

在对象级别:

(在RestSharp v106.0.0 和更高版本中可用)

//bypass ssl validation check by using RestClient object
var restClient = new RestClient(baseUrl);
restClient.RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;

要么

在应用程序级别:

//bypass ssl validation check globally for whole application.
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;

11

有一个比修改代码更好的解决方案。理想情况下,您需要一种能够模拟在生产环境中会看到的条件的解决方案,并且修改代码将无法做到这一点,并且如果您忘记在部署之前删除代码,则可能会很危险。

您将需要某种自签名证书。如果您使用的是IIS Express,那么您将已经拥有其中之一,只需找到它即可。如果尚未安装,请打开Firefox或任何喜欢的浏览器,然后转到您的网站。您应该能够从URL栏中查看证书信息,并且取决于浏览器,您应该能够导出证书。

接下来,打开MMC.exe,并添加“证书”管理单元。将您的证书文件导入“受信任的根证书颁发机构”存储中,这就是您所需要的。

现在,您的计算机作为一个整体将隐式信任它自己生成的所有证书,并且您无需添加代码来专门处理此证书。当您进入生产环境时,只要您在那里安装了正确的有效证书,它将继续工作。


抱歉,对我来说还不清楚,太难了,不像以前的解决方案那样有效。我不是证书方面的专家。
Sergey Kulgan

1
我的RestSharp Rest客户端尝试访问没有有效证书的REST服务(第三方/外部/外部),当我尝试打开它时,它的站点仅警报是我在URL附近的浏览器中看到的:“连接不安全”。在编写时,没有可用于从浏览器导出的证书。我没有可能购买该站点/服务的证书,因为这不是我的,我只是想从中毫无错误地接收一些json数据。
谢尔盖·库尔根
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.