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

C# 在C语言中处理非验证SSL证书的最佳方法是什么#,c#,http,ssl,C#,Http,Ssl,我使用下面的代码来确保所有证书都通过,即使是无效的证书,但我想知道是否有更好的方法,因为此事件将被全局调用,我只希望证书通过某个HTTP调用,而不希望证书通过任何异步发生的其他调用 // This delegate makes sure that non-validating SSL certificates are passed ServicePointManager.ServerCertificateValidationCallback = delegate(object certsende

我使用下面的代码来确保所有证书都通过,即使是无效的证书,但我想知道是否有更好的方法,因为此事件将被全局调用,我只希望证书通过某个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请求通过,我想让用户对每个请求执行一个操作,,实际上,您可以检查其中的一些参数例如,如果您有一个自签名证书,那么只允许通过。您还可以检查证书本身的颁发者、名称等,以获得额外的安全性。

关于
certssender
参数如何?它是否包含任何合理的内容,以便您可以判断回调发生的连接?我检查了.NET API,但是它并没有说明这个参数应该包含什么……/p>这不完全破坏了与TLS/SSL通信的全部目的吗?不,它只是在中间人(MITM)攻击中打开你——你仍然得到在线加密(无论如何,IMHO是最重要的)。.我想我最好再解释一下我的问题-将进行编辑…好吧,我想如果你的威胁模型只包括被动攻击者,那么你就不必害怕MITM攻击,但是一般来说,MITM攻击并不难执行,因此将其从威胁模型中排除是不值得的。实际上的想法是让用户可以选择是否继续,就像TortoiseSvn一样。但当时我想我会解决这个问题;)有趣的是,我想我确实检查了它,但我回去是因为这篇文章,是的,certsender实际上是HttpRequest对象,它非常有帮助。谢谢你让我再次检查;)