对https证书(签发规则)的疑问
众所周知的ssl握手的(简化)过程是这样的,用C代Client,S代Server:
- C与S约定好对称与非对称加密的算法:如(DES-RSA)
-
S发送带公钥的证书给C,C检查证书的CA,如果CA不被信任则立即断开连接
- 这里有一个问题,这里证书的发送的明文的吧,这样存不存在伪造CA数字签名的可能,如果不存在,ssl是怎样防止的.
-
C用证书里面的公钥加密DES密钥,发送给S:
- 这里又有问题,就是如果CA签发证书时只有一对(n,e,d),对应一对公钥私钥. 也就是证书里的公钥是不变的并可伪造的.
- S得到了DES密钥,之后S和C就一直用DES加密通信.
也就是,如果中间人可以轻易获得证书,同时中间人又能截取到用公钥发送之后的信息,这样只要每次中间人都发送相同的信息,就可以骗过服务器来用同一个DES密钥. 密钥的随机性没有了,加密也就没有意义了. 如果能伪造CA就更不用说了,现在流行的ssl攻击就只剩下CA信任这一道关卡了.
SSL显然都解决了这些问题,才能想现在一样如此流行而稳定. 它是怎样解决的呢?
Answers
这里有一个问题,这里证书的发送的明文的吧,这样存不存在伪造CA数字签名的可能,如果不存在,ssl是怎样防止的.
证书是经过 CA 签名的,证书中没有任何需要保密的信息,因此泄露也不会有问题,而如果证书被修改了,签名就失效了,客户端就会因为签名失效而断开连接(Chrome 等浏览器会提示你遇到了中间人攻击).
如果攻击者自行给证书重新签名,也会因为 CA 不被浏览器信任而断开连接。只有被大家信任的 CA(内置于浏览器和操作系统中) 才能签署出可信的证书,而 CA 在签发证书之前,会对申请者的身份进行人工验证,保证了只签发证书给网站的真正所有者。
这里又有问题,就是如果CA签发证书时只有一对(n,e,d),对应一对公钥私钥. 也就是证书里的公钥是不变的并可伪造的.
没完全理解你的描述,我来简单论证一下这个步骤为什么不会有问题:
首先客户端的 DES 密钥用证书的公钥进行加密,只有使用对应的私钥才能解密,这个私钥是只有网站所有者才拥有的,因此客户端的 DES 密钥只有服务器端才可以解密。DES 加密和解密使用同一个密钥,客户端期待服务器端用这个密钥来对回应进行加密。
如果中间人截获了这一步中客户端发送的 DES 密钥,换成一个自己生成的密钥,那么服务器端会返回以中间人提供的密钥加密的响应,中间人虽然截获了客户端发送的密钥,但无法解密它,所以没办法用它来(重新)加密响应。中间人如果直接将这个(服务器以中间人的密钥加密的)响应发给客户端,客户端会因为无法用自己的密钥解密而出现错误。
同时中间人又能截取到用公钥发送之后的信息,这样只要每次中间人都发送相同的信息,就可以骗过服务器来用同一个DES密钥
SSL 的握手(交换密钥)是交互式的过程,在这个过程完成之前,不会传输真正的数据(HTTP 请求).