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

问题描述 投票:0回答:1

我正在 C# 环境中实现 Web 服务。我正在使用 SSL 连接。我的网址是这样的:

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

但是证书期望它是:

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

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

你怎么能用c#做到这一点?

我不想要一个忽略整个证书验证的解决方案。我还想保留禁用主机名验证的本地和临时影响。我也不想出于超出此问题范围的原因更改我的网址(只是为了使它们匹配)。

c# ssl hostname
1个回答
5
投票

如果您正在使用 WebRequests 或类似的东西,您可以连接到

ServicePointManager.ServerCertificateValidationCallback
并添加自定义验证场景为

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

请参阅MSDN了解详细信息

© www.soinside.com 2019 - 2024. All rights reserved.