我正在使用.Net Webapi 2,并且在使用“ Https”调用另一个Web服务时遇到以下错误。

Could not establish trust relationship for the SSL/TLS secure channel


而且我还找到了临时解决方案。在执行httpwebresponse之前添加此行代码

ServicePointManager
    .ServerCertificateValidationCallback =
    RemoveCertificateValidationCallback (delegate { return true; });


首先,我不知道该代码的含义,但至少该代码有效,而且我成功地访问了Https Web服务。但是该代码在veracode扫描中被检测到,并且存在中等缺陷安全性问题。

veracode文档说:
我必须监视证书是否过期。因为它可以成为例外。

问题是。
我可以从服务器调用https Web服务吗?
不使用该代码?
还是我必须安装证书,是否必须在iis中配置一些内容以从服务器端/后端调用https Web服务?

最佳答案

从字面上看,这意味着代码运行所在的位置不信任远程站点上安装的证书。

尽管您发布的代码会绕过所有身份验证检查,但这并不是一个好习惯,因为SSL可以使您确信与您交谈的网站是合法的,而且没有人在进行中间人攻击例如拦截您的数据。



诊断的第一步是在浏览器中访问该页面并查看证书。

c# - C#如何解决HtppWebResponse返回无法为[SSL/TLS]安全 channel 建立信任关系?-LMLPHP

确保您的浏览器认为它是安全的-它将告诉您为什么不这样做(如果不这样做)。常见原因:


已过期(从“ ..到”选中“有效”)
域名不匹配(同时选中“颁发给”和“使用者备用名称”)
由非受托机构发行


对于(1)和(2),这实际上是远程服务需要处理的服务器问题。

使用(2)有时,人们只颁发"www.example.com"的证书,而不是"example.com"(或"*.example.com",其中不包括"example.com"的证书),因此一种简单的解决方法是访问具有匹配域名的网站。

对于(3),通常的原因是自签名证书。这就像为自己担保,显然不是很值得信赖。您也可能根本不信任签署证书的有效CA(证书颁发机构)。有几种方法可以解决此问题:


让Web服务从trusted CA获得新证书(如今,LetsEncrypt是一个不错的选择,并且既自动化又免费)
更新您的信任根(例如,如果您的系统没有最新更新):Win 7/10Windows Server
已将此证书签名到您的系统的Import the root CA certificate(请参阅证书路径选项卡),并将其标记为受信任。

关于c# - C#如何解决HtppWebResponse返回无法为[SSL/TLS]安全 channel 建立信任关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52941009/

10-12 16:41