自签名证书。底层连接已关闭:无法建立信任关系
Posted
技术标签:
【中文标题】自签名证书。底层连接已关闭:无法建立信任关系【英文标题】:self signed cert. The underlying connection was closed: Could not establish trust relationship 【发布时间】:2012-06-29 17:55:33 【问题描述】:尝试为我们的 Intranet 的 Web 服务站点设置自签名证书。证书本身显示它“正常”,但是当尝试从 Web 服务调用方法时会引发错误,并且在添加 Web 引用时会发出警告。
这里是步骤和一些屏幕截图,以确保我提供准确的信息。
Windows 服务器 2003。IIS。该网站是“WebServices.companyName.vmc”
这是网站的主机头
从服务器,它显示证书是 'ok'。
这里是一些网站设置
现在,在 Visual Studio 2008 中,添加网络参考
在弹出窗口中单击“是”
在此弹出窗口中单击“否”,依次多次。
在调用 Web 服务的代码行运行后...我收到此错误
底层连接已关闭:无法建立信任 SSL/TLS 安全通道的关系。
当 webservice 站点在浏览器中时,URL 栏旁边的小挂锁会提供以下消息:
这是我现有的代码:
Dim mySvc As New WebServices.InstantAccount
mySvc.calledFunction()
编辑
对于有类似问题的任何人,请阅读 iamkrillin 的答案和我的答案...因为它们都是解决问题的两种不同方式...取决于您可以控制的部分(代码或证书)。
【问题讨论】:
也许这会对你有所帮助***.com/questions/703272/… 我之前读过那篇文章,我已经确认了一些事情,例如 DNS 视线,证书仍然有效,日期是正确的......但剩下的有点超出我。这就是为什么我发布了这么多截图。 如果我不得不猜测,我会说“•您使用的证书名称是否正确?”是检查的好地方。但我不确定如何检查。 正如@iamkrillin 下面的回答所暗示的那样,问题出在客户端接受来自不受信任的根证书提供商的证书。 【参考方案1】:在创建服务客户端之前在某处添加这行代码。
ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
请注意:这将导致您的应用接受所有无效证书并继续运行。如果这是不可接受的,您可以附加一个函数并进行处理以确定证书错误是否正常
【讨论】:
【参考方案2】:iamkrillin 确实有一个可行的解决方案,因为他的代码将忽略无效证书,并允许应用程序使用 Web 服务。
除此之外,我已经更正了证书,因此我不再需要忽略无效的证书。
主机标头值(显示在 OP 中)是 WebServices.mycompany.vmc ,但证书的“通用名称”或“友好名称”(显示在 OP 屏幕截图 3 中的“证书路径”中)是 WebServices。
通用名称,和网站网址需要匹配。我使用通用名称“WebServices.mycompany.vmc”重新创建了自签名证书,现在证书错误消失了。 Web 服务可供使用,编码人员无需忽略应用程序的无效证书。
【讨论】:
以上是关于自签名证书。底层连接已关闭:无法建立信任关系的主要内容,如果未能解决你的问题,请参考以下文章
将自签名证书与 .NET 的 HttpWebRequest/Response 一起使用
错误:C# 底层连接已关闭:无法为 SSL/TLS 安全通道建立信任关系