RestSharp - 忽略 SSL 错误
Posted
技术标签:
【中文标题】RestSharp - 忽略 SSL 错误【英文标题】:RestSharp - Ignore SSL errors 【发布时间】:2012-05-10 23:34:21 【问题描述】:有什么方法可以让 RestSharp 忽略 SSL 证书中的错误?我有一个测试客户端,而我连接的服务还没有有效的证书。
当我现在提出请求时,我得到了错误:
The underlying connection was closed: Could not establish trust
relationship for the SSL/TLS secure channel.
【问题讨论】:
答案就在这里,但我无法通过手机将其变为真实答案west-wind.com/weblog/posts/2011/Feb/11/… 太好了 - 我已经用答案更新了问题。但是发布一个“真实”的答案,我会接受它:-) 通常最好在测试客户端信任锚中导入测试证书,而不是完全忽略证书验证。首先,它更现实;其次,避免在最终产品中留下这种不安全的代码。 +1,谢谢;正是我想要的! 我会说最好写一个你的问题的答案,而不是在问题的答案中烘烤。 【参考方案1】:正如约翰建议的那样:
ServicePointManager.ServerCertificateValidationCallback +=
(sender, certificate, chain, sslPolicyErrors) => true;
【讨论】:
有效,但考虑到它设置了全局行为,这并不是很好。 您可以选中sender.Address
以仅在这是您可以绕过 SSL 验证的主机时返回 true
。
下面还有另一个答案显示了如何在您的 RestClient 对象上而不是全局上设置它。【参考方案2】:
你可以绕过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;
【讨论】:
这似乎不再是 ReshSharp 107 中的一个选项。我尝试在设置 RemoteCertificateValidationCallback 的情况下创建 RestClientOptions,但它似乎不起作用。如果我回滚到 RestSharp 106,你的答案就有效。【参考方案3】:有比修改代码更好的解决方案。理想情况下,您需要一个能够模拟您将在生产中看到的条件的解决方案,而修改您的代码不会这样做,并且如果您在部署之前忘记将代码取出,则可能会很危险。
您将需要某种自签名证书。如果您使用的是 IIS Express,那么您已经拥有其中之一,您只需找到它。如果您还没有它,请打开 Firefox 或您喜欢的任何浏览器并访问您的网站。您应该能够从 URL 栏中查看证书信息,并且根据您的浏览器,您应该能够导出证书。
接下来,打开 MMC.exe,然后添加证书管理单元。将您的证书文件导入受信任的根证书颁发机构存储区,这就是您所需要的。
现在,您的计算机作为一个整体将隐式信任它自己生成的任何证书,您无需添加代码来专门处理此问题。当您转移到生产环境时,只要您在那里安装了适当的有效证书,它将继续工作。
【讨论】:
抱歉,这对我来说不是很清楚,太难了,不像以前的解决方案那样有效。我不是证书方面的专家。 我的 RestSharp Rest 客户端尝试访问没有有效证书的 REST 服务(第三方/外部/外部),当我尝试打开它的站点时,我在 URL 附近的浏览器中看到只有警报:“连接不安全”。正如您所写,没有可从浏览器导出的证书。我无法为该站点/服务购买证书,因为它不是我的,我只想从中接收一些 json 数据而不会出错。以上是关于RestSharp - 忽略 SSL 错误的主要内容,如果未能解决你的问题,请参考以下文章