本文共 1684 字,大约阅读时间需要 5 分钟。
HTTPS比HTTP协议多了加密的过程,因为HTTP在网络上传输是明文传输,明文数据会经过中间代理服务器、路由器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了,因此需要HTTPS协议进行加密。
加密算法总体来说可以分为对称加密和非对称加密
对称加密意思就是 客户端与服务器段拥有相同的密钥K,客户端发送时用K加密,服务器端用K解密。如果由服务器生成一个密钥并传输给浏览器,那在这个传输过程中密钥被别人劫持到手了,之后他就能用密钥解开双方传输的任何内容了。因此对称加密不行。
简单说就是有两把密钥,通常一把叫做公钥、一把叫私钥,用公钥加密的内容必须用私钥才能解开,同样,私钥加密的内容只有公钥能解开。
1、服务器先把公钥以明文方式传输给浏览器,之后浏览器向服务器传数据前都先用这个公钥加密好再传,这条数据的安全似乎可以保障了!因为只有服务器有相应的私钥能解开公钥加密的数据。但是这种方式只是看起来安全(后文解释中间人攻击),也就是只能保证客户端向服务器段发送的内容不会被窃取,因为公钥加密的内容只有私钥可以解密,而私钥只有服务器端才有。
但是也存在中间人攻击
也就是说有一个中间人替换了公钥A,用自己的公钥B发给客户端,这时候客户端是用B来加密对称密钥X的,这时候中间人有私钥B可以解密获得X,此时再将X用公钥A加密发送给服务器,这时候客户端和服务器发送的内容就都被中间人解密看到了,而客户端和服务器都不知道中间人的存在
分析:造成中间人攻击的原因是因为客户端分不清接收到的公钥到底是不是由服务器发送来的,因此这时候就引入了数字证书。
数字证书的作用就是保证客户端收到的公钥是服务器端的公钥
数字证书是Https实现安全传输的基础,它是由权威的CA机构颁发的,数字证书的内容主要有:
证书的签名:数字证书在发布的时候,CA机构将证书的指纹和指纹算法通过CA私钥加密得到的就是证书的签名了
所以当客户端向服务器端请求建立连接时,服务器端首先回发送数字证书+数字签名给客户端,数字签名附在电子证书后
1、客户端请求建立HTTPS连接 ,2、服务器端发送数字证书给客户端,3、客户端验证数字证书确定这是正确服务器端的,并拿到服务器端的公钥,4、客户端生成一个随机数作为对称加密密钥X,5、客户端用服务器的公钥加密X发送给服务器,6、服务器接收到报文,用私钥解密报文获得对称密钥X,7、从此客户端与服务器端快乐的使用X来加密报文交流
问题1、如何防止数字证书被中间人修改
电子签名可以防止证书被修改,因为中间人修改了证书内容后,客户端接收到数字证书后,会首先使用CA的公钥来解密电子签名,从而获得指纹的指纹算法,之后使用指纹算法再将电子证书的内容计算一次hash值h1,从而和指纹对比。如果中间人修改了证书内容,那么客户端计算的h1与指纹不一致,就会连接失败。 中间人有没有可能在修改证书内容的同时将电子签名给修改了,答案是不可能,因为电子签名是用CA的私钥加密的,中间人不可能有CA的私钥,如果强行使用自己的私钥重新得到电子签名,那么客户端使用CA公钥是无法解密电子签名的。
问题2、如何防止数字证书被中间人替换
不可能,因为电子证书中是有证书的持有者的,通过对比证书上的URL和我们请求的URL是否相同,我们还是可以判断当前证书是不是服务器发的证书
参考文献:
转载地址:http://gdejz.baihongyu.com/