我的问题是关于ssl中的证书,但我认为这些问题应该适用于所有证书。为了清楚起见,我已经包含了SSL程序。
在SSL中,这是我理解的程序:
1)客户
2)服务器
3)客户
4)客户端和服务器
5)客户
6)服务器
问题
是什么阻止了中间人在第二步发生的攻击?为什么中间的人不能说trudy,捕获服务器发送的证书并更改其中的公钥(具有私钥的东西)。
我认为证书是以某种方式加密的。
但是,服务器无法加密证书,因为客户端尚未拥有公钥。当服务器从权限(如veri-sign)获取密钥时,密钥是否会使用verisign的公钥预先包含?我认为这应该有效,因为所有的Web浏览器都应该拥有大多数权限的公钥。
答案 0 :(得分:10)
不,证书未加密。但它由证书颁发机构(CA)签署。由于这些检查证书中包含的信息(特别是证书所属的URL),因此不应该有给定URL的第二个有效证书。
根据信任存储(例如在您的浏览器中)检查CA的证书。如果此信任库被泄露,或者您信任无效证书,则在中间攻击中无法防范人员
答案 1 :(得分:4)
证书由某些受信任的机构签署,例如Verisign。
这些根权限的证书在您下载时会内置到浏览器中。您可以在Firefox中查看根证书,例如,转到 tools - > options - > advanced - > encryption - > view certificates - > authorities 。
但是,如果这些根证书颁发机构中的任何一个遭到入侵,您就可以伪造证书,从而使中间人攻击成为可能。
答案 2 :(得分:2)
你实际上指出了PKI的弱点。
说Trudy在你和你的银行(bank.com)的中间。 Trudy可以在步骤2中随意更改公钥,但证书的签名将无效。所以Trudy必须找到一种再次生成签名的方法。可以肯定地说,受信任的CA不会为他做这件事。因此,他必须使用虚假CA进行签名,这不受您的浏览器的信任。理论上这仍然是安全的。
然而,根据一些测试,大多数浏览器(尤其是IE 6)显示模糊的安全警告,大多数人不理解,只是忽略。