在c#httpwebrequest中禁用主机名验证

时间:2014-02-19 14:51:04

标签: c# ssl hostname

我正在c#环境中实现Web服务。我正在使用SSL连接。我的网址类似于:

https://pseudoservername:8443/services/...

但是证书希望它是:

https://ourcompany.services.public.com:8443/services/...

所以我的主机名不匹配。在Java中,您可以通过创建自己的hostnameVerifier类并让JVM使用那个而不是正常的类来简单地关闭此主机名验证。这非常有用,因为效果只是本地的(仅对此应用程序禁用验证)和临时(主机名验证可以在应用程序需要时打开/关闭)。

你怎么能在c#?

我不想要一个忽略整个证书验证的解决方案。我也想保留当地和禁用hostnameverification的临时效果。我也不想更改我的网址(只是让它们匹配),原因超出了这个问题的范围。

1 个答案:

答案 0 :(得分:4)

如果您正在使用Web请求或类似的东西,您可以加入ServicePointManager.ServerCertificateValidationCallback 并添加自定义验证方案

ServicePointManager.ServerCertificateValidationCallback = delegate(
            Object obj, X509Certificate certificate, X509Chain chain, 
            SslPolicyErrors errors)
            {
                if (errors == SslPolicyErrors.RemoteCertificateNameMismatch)
                {
                  return (true);
                }
            };

请参阅MSDN了解详情