【发布时间】:2012-04-27 14:21:20
【问题描述】:
我编写了一个资源管理器处理程序,用于为我组织中的几个不同站点提供资源 (js/css)。大多数站点是内部站点,但少数站点是外部站点并使用 ssl。 QA/Dev 站点没有与证书相同的域名,因此需要我使用回调进行自定义验证。我了解我可以执行以下操作,例如检查我的环境并仅在不在生产中时返回 true,或者检查域名并在与我的 qa/dev 域匹配时返回 true。我的问题不是怎么做,而是为什么?为什么接受资源处理程序的所有证书对我来说是不安全的?用户实际上可以做哪些恶意的事情?
ServicePointManager.ServerCertificateValidationCallback += ValidateRemoteCertificate;
public static bool ValidateRemoteCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors)
{
return true;//Why not do this?
}
更新:认为我可能需要对处理程序的作用进行一些说明。通过此处理程序的所有资源请求都经过哈希处理。处理程序解密请求并通过从程序集中拉取资源或通过对项目自己的本地资源发出请求来提供资源。唯一发生域不匹配的情况是当我的处理程序请求该本地资源时。回想起来,我认为也许我应该以不同的方式处理它,但是关于我最初的问题,我仍然看不到 MITM 攻击如何应用,并且感觉在这种情况下接受所有证书是安全的,但我不是 100%为什么这就是我在这里提出它的原因。 :)
【问题讨论】:
-
证书很容易伪造。信任所有证书会使您容易受到来自不受信任站点的任意数量的攻击。此外,证书存在的原因是因为假设存在一些您不信任的人或证书。
-
这是服务器端代码还是客户端代码?代码看起来像客户端代码,你的描述听起来像服务器代码。
-
@fbfcn,不过那是客户端代码。
-
@Bruno -
ServicePointManager.ServerCertificateValidationCallback是服务器端代码。 -
@SilverNinja:[...] 一种用于客户端对服务器证书进行自定义验证的方法。