我的目标是通过https连接访问Web服务,因此我创建了一个自签名证书,我认为这意味着客户只需要将证书添加到其受信任的根证书颁发机构目录中以避免这种情况有点例外:
System.Net.WebException: The underlying connection was closed:
Could not establish trust relationship for the SSL/TLS secure channel.
System.Security.Authentication.AuthenticationException:
The remote certificate is invalid according to the validation procedure
如果无效,他们总是可以使用始终返回true的ServerCertificateValidationCallback事件处理程序。
但我目前面临的问题涉及服务器上运行的第三方组件,它们应该使用相同的Web服务。出于某种原因,将服务器自己的自签名证书添加到其受信任的根证书颁发机构目录将无法解决问题,并且ServerCertificateValidationCallback在这种情况下将无法提供帮助,因为我没有第三方组件的源代码。
Web服务应该只能通过内部网络访问,因此就安全性而言,甚至可能不需要通过https使其可用,但我想它不会受到伤害。 / p>
除了购买证书或通过http提供网络服务外,我还能做些什么来避免这个问题吗?
答案 0 :(得分:2)
关于第三方服务,您是否已将证书安装到用户或本地计算机商店?
您有IT部门在哪里工作吗?如果是这样,他们可能正在运行内部CA.他们应该能够向您颁发一个已被域上的计算机信任的证书。
(哦,我确定你知道,忽略证书警告绝不是一个好主意)
答案 1 :(得分:2)
要求您的第三方在其工具或应用程序中信任您的wsdl网址或终点网址。他们应该知道如何在结束时这样做。
在服务器端实施时,您需要将终点网址配置为“https without client authentication”模式。
据我所知,服务器端有3个选项用于http scurity级别。
HTTP 简单的HTTP请求将发送到服务器。 HTTP不包含传出和传入请求和响应的任何安全性。这就像通过互联网发送纯文本。 这意味着任何第三方都可以干涉我们的信息。虽然它使用UTF-8等编码技术,但它可以很容易地解码。
HTTPS HTTPS提供传输级别安全性以及消息级别安全性。 通常,它会在客户端和服务器之间创建一个安全会话,并以加密格式通过它传输请求和响应消息。 HTTPS使用SSL(安全套接字层)证书来提供客户端和服务器通信之间的安全性。 在简单的语言中,使用证书意味着您的客户端知道它在哪个服务器上发送数据,服务器知道从哪个客户端数据接收。这样它就不会被任何第三人篡改。 HTTPS始终至少需要客户端身份验证。通过导出服务器证书或使用自签名证书提供它并不重要。取决于您的服务器配置是否允许在没有客户端验证请求的情况下。
通常,提供两个使用HTTPS连接进行通信的选项。
没有客户端身份验证的HTTPS 发件人应用程序或客户端需要信任我们的WSDL URL才能与服务器通信。 在这种方法中,客户端不必对服务器的自身进行身份验证。如果服务器证书不可用,则只有客户端需要知道,通过导出服务器证书或使用自签名证书来发送数据的位置。 它只确保传输级别的安全性
使用客户端身份验证的HTTPS 在此方法中,您需要在客户端和服务器之间交换SSL证书。如果没有两者之间的身份验证,则无法进行通信,并且您将在发件人应用程序中获得认证或SSL错 这些证书由一些真正的供应商生成和提供。如果允许,您还可以在客户端和服务器应用程序中创建这些证书。 如果您使用数字签名证书以及传输级别安全性,它还可以确保消息级别的安全性。 这是通过互联网进行通信最安全的方式。
注意:以上内容不会从任何地方复制。根据我对http通信协议的理解,它由我准备。以上选项直接出现在SAP PI工具中,我之前已经实现过Web服务。我不知道在C#中它会是什么样子,但概念是一样的。