相关疑难解决方法(0)

使用ServerCertificateValidationCallback的最佳实践

我正在开发一个在两个后端服务器之间使用一些HTTP通信的项目.服务器使用X509证书进行身份验证.不用说,当服务器A(客户端)建立与服务器B(服务器)的连接时,存在SSL/TLS验证错误,因为使用的证书不是来自受信任的第三方权限.

通常,处理它的方法是使用ServicePointManager.ServerCertificateValidationCallback,例如:

ServicePointManager.ServerCertificateValidationCallback += 
        (sender, cert, chain, error) =>
{
    return cert.GetCertHashString() == "xxxxxxxxxxxxxxxx";
};
Run Code Online (Sandbox Code Playgroud)

这种方法有效,除非它不理想.它本质上做的是覆盖应用程序完成的每个http请求的验证过程.因此,如果另一个类将尝试运行HTTP请求,它将失败.此外,如果另一个类ServicePointManager.ServerCertificateValidationCallback为了自己的目的而覆盖,那么我的通信开始突然失败.

想到的唯一解决方案是创建一个单独的AppDomain来执行客户端HTTP请求.这可行,但实际上 - 只有这样才能执行HTTP请求是愚蠢的.开销将是惊人的.

考虑到这一点,是否有人研究过.NET中是否有更好的实践,这将允许访问Web服务,同时处理客户端SSL/TLS验证而不影响其他Web客户端?

.net c# ssl web-services webclient

29
推荐指数
4
解决办法
5万
查看次数

标签 统计

.net ×1

c# ×1

ssl ×1

web-services ×1

webclient ×1