C# 如何解决 HtppWebResponse return Could not establish trust relationship for the [SSL/TLS] secure channel?

标签 c# .net ssl webapi2

我正在使用 .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 可以让您稍微保证您所访问的站点是合法的,并且没有人在做暗中操作-中间攻击,例如拦截您的数据。


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

enter image description here

确保您的浏览器认为它是安全的——如果不安全,它会告诉您为什么不安全。常见原因:

  1. 已过期(勾选Valid from .. to)
  2. 不匹配的域名(检查颁发给主题备用名称)
  3. 不受信任的机构颁发

在 (1) 和 (2) 的情况下,它实际上是远程服务需要处理的服务器问题。

对于 (2),有时人们只为 "www.example.com" 而不是 "example.com"(或 "*. example.com",其中不包含 "example.com"),因此一个简单的解决方法是访问具有匹配域名的站点。

在 (3) 的情况下,一个常见的原因是自签名证书。这就像给自己作担保,显然不太值得信赖。也有可能您根本不信任签署证书的有效 CA(证书颁发机构)。有几种方法可以解决这个问题:

关于C# 如何解决 HtppWebResponse return Could not establish trust relationship for the [SSL/TLS] secure channel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52941009/

相关文章:

apache - 如何在 AWS 弹性负载均衡器上实现 HTTP 严格传输安全 (HSTS)?

java - 用于相互认证的 keystore /信任库中必须包含什么?

c# - 我将如何连接/替换 “end user” YSOD?

c# - 为什么将函数分配给事件时使用 '+='?

c# - 使用 iTextSharp 将表单字段的不同部分设置为具有不同的字体

.net - 我已经构建了一个 Windows 服务 "Any CPU"。为什么它在我的 64 位机器上以 32 位模式运行?

ssl - 如何将 .p12 转换为包含未加密 PKCS#1 私钥 block 的 .pem?

c# - 扩展函数不能返回空值

c# - TextBox第二次没有失效

c# - 在 C# 中如何收集程序崩溃的堆栈跟踪