【问题标题】:What is the best way of handling non-validating SSL certificates in C#在 C# 中处理非验证 SSL 证书的最佳方法是什么
【发布时间】:2008-09-24 20:06:01
【问题描述】:

我正在使用以下代码来确保所有证书都通过,即使是无效证书,但我想知道是否有更好的方法,因为此事件被全局调用,我只希望证书通过某些 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;
};

上面的代码只是忽略证书上的任何非验证的示例。我遇到的问题是它是一个 global 事件。我看不到事件发生在哪个会话中。我可能有几个 http 请求正在处理,我想要求用户针对每个请求执行操作。

【问题讨论】:

  • 这不是破坏了使用 TLS/SSL 保护您的通信的全部目的吗?
  • 不 - 它只会让你在中间人 (MITM) 攻击中打开你的大门 - 你仍然可以获得在线加密(无论如何,恕我直言,这是最重要的)。
  • 我想我最好多解释一下我的问题 - 将编辑...
  • 好吧,我想如果你的威胁模型只包括被动攻击者,那么你不必担心 MITM 攻击,但是,一般来说,MITM 攻击并不难执行,所以将它们排除在威胁模型不值得。
  • 嗯,实际的想法是让用户选择是否继续,有点像 TortoiseSvn 所做的。但我想我会及时解决问题;)

标签: c# http ssl


【解决方案1】:

certsender 参数呢?它是否包含任何合理的信息,以便您可以判断回调发生的连接是什么?我检查了 .NET API,但它没有说明参数应该包含什么......

【讨论】:

  • 很有趣,我以为我确实检查了它,但是因为这篇文章我回去了,是的,certsender 实际上是 HttpRequest 对象,它有很大帮助。感谢您让我再次检查;)
【解决方案2】:

好吧,您实际上可以费心检查其中一些参数。 ;) 例如,如果您有自签名证书,则只让error == SslPolicyErrors.RemoteCertificateChainError 通过。您还可以检查证书本身的颁发者、名称等,以提高安全性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2012-03-01
    相关资源
    最近更新 更多