1

我已经编写了一个资源管理器处理程序,用于为我组织中的几个不同站点提供资源(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%为什么这就是我在这里提出它的原因。:)

4

3 回答 3

4

这违背了 HTTPS 的目的。

如果您接受所有证书,任何人都可以使用自签名证书进行中间人攻击,并且可以正常工作。

于 2012-04-27T14:23:36.877 回答
1

您将容易受到中间人攻击,因为您信任提供给您的任何证书。

只有当攻击者可以冒充每个端点以使对方满意时,中间人攻击才能成功——这是对(或缺乏)相互身份验证的攻击。

http://en.wikipedia.org/wiki/Man-in-the-middle_attack

于 2012-04-27T14:28:17.537 回答
1

您需要验证与您交换秘密的人的身份,否则他们可能是冒名顶替者。

从客户端到服务器,活跃的 MITM 攻击者可以使用他们自己的证书并将流量中继到真正的站点,而您不会注意到。检查Security.SE 上的这个问题:Downside of allowed uncertified Certificates

在接受客户端证书时(从服务器的角度来看)。您仍然会与客户秘密交换数据,但您不会告诉您客户是谁。客户端证书用于身份验证,您可以通过在没有额外验证的情况下允许任何内容来绕过它(并使此步骤无用)。

编辑(您刚刚补充说它是从服务器端的角度来看的):

据推测,您正在做的是接受任何证书,然后将它们包含的名称作为用户的身份。这样做的缺点是您实际上并没有进行任何身份验证:您只是接受了用户声称具有面值的名称。这有点像接受一张写着“我的名字是 X”的纸,而不是检查正式的身份证件(例如护照)。

于 2012-04-27T14:24:43.230 回答