我正在编写一个测试来测试我正在部署的服务,为了绕过 ssl 证书检查,我使用下面的代码片段实现了 ssl 覆盖:
public static void SSLValidationOverride()
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(OnValidationCallback);
}
private static bool OnValidationCallback(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors errors)
{
if (cert.subject == MyCertSubject)
return true;
else
return false;
}
现在我必须在代码中使用 ssl 调用另一个 Web 服务,并希望在调用之前切换到默认 ssl 检查。最好的方法是什么? MS帮助说ServicePointManager.SecurityProtocol的默认值为null(http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.securityprotocol.aspx http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.securityprotocol.aspx)。将其设置为 null 切换到默认 ssl 验证,是否有其他方法可以做到这一点。
在开发我创建的诊断工具期间,我遇到了类似的问题。我创建了一个向 url 列表发出请求的 Windows 服务。对于每个 url,我通过设置以下内容来发出没有证书验证的请求:
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
然后使用相同的 url,我还尝试通过将属性重置回 null 来发出证书验证请求,这应该提供默认功能:
ServicePointManager.ServerCertificateValidationCallback = null;
这产生了意想不到的结果,因为我的请求仍然在没有证书验证的情况下发出,就好像重置已被忽略一样。经过调试我发现如果我设置后等待足够长的时间
ServicePointManager.ServerCertificateValidationCallback = null;
然后它实际上被重置,我的请求是通过默认证书验证发出的。所以我只是在提出请求之前睡了 30 秒:
ServicePointManager.ServerCertificateValidationCallback = null;
System.Threading.Thread.Sleep(30000);
//Make request here
我不明白为什么会这样,但它确实有效,而且我确信有更好的方法可以做到这一点,如果您知道怎么做,请告诉我。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)