在C#中处理非验证SSL证书的最佳方法是什么?

时间:2008-09-24 20:06:01

标签: c# http ssl

我正在使用以下代码来确保所有证书都通过,甚至是无效证书,但我想知道是否有更好的方法,因为这个事件被全局调用,我只希望证书通过某些HTTP调用,而不是异步发生的任何其他HTTP调用。

// This delegate makes sure that non-validating SSL certificates are passed
ServicePointManager.ServerCertificateValidationCallback = delegate(object certsender, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors error)
{
   return true;
};

上面的代码只是忽略证书上任何非验证的示例。我遇到的问题是它是一个全局事件。我无法看到事件正在发生的会话。我可能会有几个http请求通过,我想要求用户针对每个请求采取行动

2 个答案:

答案 0 :(得分:1)

嗯,你实际上可以费心去检查一些参数。 ;)例如,如果您有自签名证书,则只允许error == SslPolicyErrors.RemoteCertificateChainError通过。您还可以检查证书本身上的颁发者,名称等,以获得额外的安全性。

答案 1 :(得分:1)

certsender参数怎么样?它是否包含任何合理的内容,以便您可以确定回调发生的连接是什么?我检查了.NET API,但没有说明该参数应该包含什么...