1

我正在尝试保护我与 Mono(实际上是 MonoTouch)应用程序中的服务器的连接。因此,我已经迷上了System.Net.ServerCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)

如果发生中间人攻击,这个回调是否应该触发错误?或者如果假证书的名称与真实证书的名称匹配,则不会检测到这种情况?

检查是否与 Microsoft 的实施方式相同?

4

2 回答 2

1

回调允许您自定义应用程序 wrt SSL/TLS 结果的行为。本文讨论了常见的自定义:尊重地使用受信任的根

基本验证由System.Net.ServicePointManager完成(链接到 Mono 源)。它们在每个平台上略有不同。对于 MonoTouch,它基本上是调用 iOS 来查看证书是否有效。此外,特定于HTTPS的检查是在此之上完成的(以匹配基于 SSL/TLS 的 HTTP 的 RFC 要求)。

如果发生中间人攻击,这个回调是否应该触发错误?

任何错误都会被报告。这包括可能用于中间人攻击的证书的无效签名。OTOH 大多数错误都是良性的(例如到期日期)。

或者如果假证书的名称与真实证书的名称匹配,则不会检测到这种情况?

HTTPS RFC 要求证书名称(通常是 CN)与网站名称相匹配 - IOW 它将被检测到(只要您可以信任您的 DNS - 但对于每个实现都是如此;-)。

检查是否与 Microsoft 的实施方式相同?

微软并没有真正详细记录这一点。但是,它将遵循 X.509 检查和 HTTPS RFC,因此应该非常接近。

于 2012-06-05T12:03:04.127 回答
0

根据 msdn,ServicePointManager.ServerCertificateValidationCallback 属性,它用于客户端执行的任何自定义验证。例如,如果您想在开发环境中覆盖自签名证书的验证。

于 2012-06-05T09:57:05.403 回答