有什么理由可以让 RestSharp 忽略 SSL 证书中的错误?我有一个测试客户端,我连接的服务还没有有效的证书。
当我现在提出请求时,我收到错误:
The underlying connection was closed: Could not establish trust
relationship for the SSL/TLS secure channel.
正如约翰建议的那样:
ServicePointManager.ServerCertificateValidationCallback +=
(sender, certificate, chain, sslPolicyErrors) => true;
在对象级别:
(在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;
有比修改代码更好的解决方案。理想情况下,您需要一个能够模拟您将在生产中看到的条件的解决方案,并且修改您的代码不会这样做,并且如果您在部署之前忘记将代码取出,则可能会很危险。
您将需要某种自签名证书。如果您使用的是 IIS Express,那么您已经拥有其中之一,您只需找到它。如果您还没有它,请打开 Firefox 或您喜欢的任何浏览器并访问您的网站。您应该能够从 URL 栏中查看证书信息,并且根据您的浏览器,您应该能够导出证书。
接下来,打开 MMC.exe,并添加证书管理单元。将您的证书文件导入受信任的根证书颁发机构存储中,这就是您所需要的。
现在,您的计算机作为一个整体将隐式信任它自己生成的任何证书,您无需添加代码来专门处理此问题。当您转移到生产环境时,只要您在那里安装了适当的有效证书,它将继续工作。