首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法为SSL/TLS安全通道建立信任关系-- SOAP

无法为SSL/TLS安全通道建立信任关系-- SOAP
EN

Stack Overflow用户
提问于 2009-04-01 06:07:29
回答 18查看 871.7K关注 0票数 360

对于同样用C# ( 2.0 )编写的web服务,我有一个简单的web服务调用,该调用是由.NET (C#) 2.0Windows应用程序通过Visual Studio生成的web服务代理生成的。这已经工作了几年,并且在它运行的十几个地方继续这样做。

新站点上的新安装遇到问题。当尝试调用web服务时,它会失败,并显示以下消息:

无法为SSL/TLS安全通道建立信任关系

web服务的URL使用SSL (https://) --但这种方式在许多其他位置已经运行了很长时间(并将继续这样做)。

我该往哪里看?这会不会是Windows和.NET之间的安全问题,这是这个安装所独有的?如果是,我应该在哪里建立信任关系?我迷路了!

EN

回答 18

Stack Overflow用户

发布于 2011-07-07 23:52:52

以下代码片段将修复您正在调用的服务器上的SSL证书出现问题的情况。例如,它可能是自签名的,或者证书和服务器之间的主机名可能不匹配。

如果您正在调用一个不受直接控制的服务器,这是非常危险的,因为您不能再确定您正在与您认为已连接到的服务器进行对话。但是,如果您正在处理内部服务器,并且获取“正确的”证书并不实用,请使用以下内容告诉web服务忽略证书问题并勇敢地坚持下去。

前两个使用lambda表达式,第三个使用正则代码。第一个接受任何证书。最后两个至少检查证书中的主机名是否为您所期望的名称。

..。希望它对你有所帮助

代码语言:javascript
复制
//Trust all certificates
System.Net.ServicePointManager.ServerCertificateValidationCallback =
    ((sender, certificate, chain, sslPolicyErrors) => true);

// trust sender
System.Net.ServicePointManager.ServerCertificateValidationCallback
                = ((sender, cert, chain, errors) => cert.Subject.Contains("YourServerName"));

// validate cert by calling a function
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate);

// callback used to validate the certificate in an SSL conversation
private static bool ValidateRemoteCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors policyErrors)
{
    bool result = cert.Subject.Contains("YourServerName");
    return result;
}
票数 391
EN

Stack Overflow用户

发布于 2013-03-19 02:00:01

非常简单的“全部捕获”解决方案是这样的:

代码语言:javascript
复制
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

sebastian-castaldi的解决方案更详细一些。

票数 199
EN

Stack Overflow用户

发布于 2013-02-27 06:59:24

我个人最喜欢以下解决方案:

代码语言:javascript
复制
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;

..。然后,在请求获取错误之前,请执行以下操作

代码语言:javascript
复制
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };

在咨询了Luke's Solution之后找到了这个

票数 37
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/703272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档