【发布时间】:2014-01-03 23:04:00
【问题描述】:
我正在开发一个在两个后端服务器之间使用 HTTP 通信的项目。服务器使用 X509 证书进行身份验证。不用说,当服务器 A(客户端)与服务器 B(服务器)建立连接时,会出现 SSL/TLS 验证错误,因为使用的证书不是来自受信任的第 3 方机构。
一般情况下,处理方式是使用ServicePointManager.ServerCertificateValidationCallback,如:
ServicePointManager.ServerCertificateValidationCallback +=
(sender, cert, chain, error) =>
{
return cert.GetCertHashString() == "xxxxxxxxxxxxxxxx";
};
这种方法有效,但并不理想。它本质上所做的是覆盖应用程序完成的每个 http 请求的验证过程。因此,如果另一个类尝试运行 HTTP 请求,它将失败。此外,如果另一个类出于自己的目的覆盖了ServicePointManager.ServerCertificateValidationCallback,那么我的通信就会突然开始失败。
想到的唯一解决方案是创建一个单独的AppDomain 来执行客户端 HTTP 请求。这会起作用,但实际上 - 必须这样做才能执行 HTTP 请求是很愚蠢的。开销将是惊人的。
考虑到这一点,有没有人研究过 .NET 中是否有更好的做法,允许访问 Web 服务,同时处理客户端 SSL/TLS 验证而不影响其他 Web 客户端?
【问题讨论】:
标签: c# .net web-services ssl webclient