我正在使用 .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 文档说: 我必须监视证书是否过期。因为它可以异常(exception)。
问题是。 有什么解决方案可以让我从服务器调用 https 网络服务吗? 不使用该代码? 还是我必须安装证书并且我必须在 iis 中配置一些东西才能从服务器端/后端调用 https 网络服务?
最佳答案
这实际上意味着您的代码运行的地方不信任安装在远程站点上的证书。
虽然您发布的代码绕过了所有身份验证检查,但这并不是一个好的做法,因为 SSL 可以让您稍微保证您所访问的站点是合法的,并且没有人在做暗中操作-中间攻击,例如拦截您的数据。
诊断的第一步是在浏览器中访问该页面并查看证书。
确保您的浏览器认为它是安全的——如果不安全,它会告诉您为什么不安全。常见原因:
- 已过期(勾选Valid from .. to)
- 不匹配的域名(检查颁发给和主题备用名称)
- 由不受信任的机构颁发
在 (1) 和 (2) 的情况下,它实际上是远程服务需要处理的服务器问题。
对于 (2),有时人们只为 "www.example.com"
而不是 "example.com"
(或 "*. example.com"
,其中不包含 "example.com"
),因此一个简单的解决方法是访问具有匹配域名的站点。
在 (3) 的情况下,一个常见的原因是自签名证书。这就像给自己作担保,显然不太值得信赖。也有可能您根本不信任签署证书的有效 CA(证书颁发机构)。有几种方法可以解决这个问题:
- 让 Web 服务从 trusted CA 获取新证书(LetsEncrypt 现在是一个不错的选择,而且是自动的,而且是免费的)
- 更新您的信任根(例如,如果您的系统没有最新更新):Win 7/10 , Windows Server
- > Import the root CA certificate (请参阅证书路径 标签)将此证书签署到您的系统并将其标记为受信任。
关于C# 如何解决 HtppWebResponse return Could not establish trust relationship for the [SSL/TLS] secure channel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52941009/