Mono在触发System.Net.ServerCertificateValidationCallback时执行了哪些检查?

时间:2012-06-05 09:52:18

标签: c# mono xamarin.ios

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

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

这个检查是否与Microsoft实现它的方式相同?

2 个答案:

答案 0 :(得分:1)

回调允许您使用SSL / TLS结果自定义应用程序的行为。本文讨论了常见的自定义:Using Trusted Roots Respectfully

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

  

这个回调是否应该在中间人攻击时触发错误?

将报告任何错误。这包括可能用于MitM攻击的证书的无效签名。 OTOH大多数错误更为良性(例如到期日期)。

  

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

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

  

这个检查是否与Microsoft实现它的方式相同?

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

答案 1 :(得分:0)

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