c# - 覆盖 HTTPS 证书

标签 c# ssl soap https

我正在使用 URL 连接到使用 SOAP 的 Web 服务。显然,该 URL 没有正确的 https 协议(protocol),如果我想通过浏览器访问它,我需要接受此连接的“风险”。

当我想以编程方式访问时,我的问题就开始了。当我尝试发送 SOAP POST 请求时,连接关闭并捕获异常。

"The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel."

显然这个问题很普遍,可以找到很多资源,thisthis获得最多的赞成票。

当我尝试这部分代码时:

ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

不仅连接不工作,而且现在还给我一个:

"The remote server returned an error: (500) Internal Server Error."

现在我的问题是。上面的代码将协议(protocol)从 https 切换到 http?

如果不是,这行代码究竟做了什么?

最佳答案

我不知道这是否会是你的答案,但因为它不适合发表评论......

不要绕过证书验证。您可能只需要设置正确的 TLS 版本。您可以通过一次使用一个而不是将它们组合在一起来尝试找到支持的最高版本。:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12

如果这不起作用,您可能需要获取证书,服务使用的证书或证书链中更高级别的证书。

关于c# - 覆盖 HTTPS 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47797298/

相关文章:

c# - 使用 ","拆分字符串并存储在数组列表中

c# - Timer.Interval 也是第一次运行函数

soap - 生成 Fedex 运输标签

java - 如何让 Axis 1.4 不为同一个 XML namespace 生成多个前缀?

java - 使用相同元素的 SOAP 请求和响应未显示在 SoapUI 中

c# - 除非删除 bin/obj 文件夹,否则 Xamarin.ios 不会生成

c# - 如何在不复制的情况下从 char 数组创建字符串?

java - 使用 openssl 创建 jks keystore

redirect - 阻止附加域的 SSL

java - 如果没有记录层,我怎样才能只获得 TLS 握手?