HTTPS原理
1.对称加密
有一个密钥,可以用来加密一段信息,也可以对加密后的信息进行解密(得让密钥不被其他人知道才能保证安全)
2.非对称加密
有两把密钥,一把叫公钥,一把叫私钥,用公钥加密的信息只能用私钥解开,用私钥加密的信息只能用公钥解开。(只能保证浏览器到服务器的消息的安全,无法保证服务器到浏览器的信息安全,而且非对称加密非常耗时)
3.非对称加密+对称加密
1.某网站拥有用于非对称加密的公钥A、私钥A’。
2.浏览器向网站服务器请求,服务器把公钥A明文给传输浏览器。
3.浏览器随机生成一个用于对称加密的密钥X,用公钥A加密后传给服务器。
4.服务器拿到后用私钥A’解密得到密钥X。
5.这样双方就都拥有密钥X了,且别人无法知道它。之后双方所有数据都通过密钥X加密解密即可
4.中间人攻击
- 某网站有用于非对称加密的公钥A、私钥A’。
- 浏览器向网站服务器请求,服务器把公钥A明文给传输浏览器。
- 中间人劫持到公钥A,保存下来,把数据包中的公钥A替换成自己伪造的公钥B(它当然也拥有公钥B对应的私钥B’)。
- 浏览器生成一个用于对称加密的密钥X,用公钥B(浏览器无法得知公钥被替换了)加密后传给服务器。
- 中间人劫持后用私钥B’解密得到密钥X,再用公钥A加密后传给服务器。
- 服务器拿到后用私钥A’解密得到密钥X。
问题出现的根本原因是浏览器无法确认收到的公钥是不是网站自己的
5.数字证书
网站在使用HTTPS前,需要向CA机构申领一份数字证书,证书里包含了持有者的信息、公钥,然后再把私钥发给持有者(持有者需保护好私钥),服务器把证书发给浏览器,浏览器从证书中获取公钥即可。
6.数字签名
为了防止数字证书被篡改,我们把证书原本内容生成一份“签名”,比对证书内容和签名是否一致就能判别是否被篡改,这就是数字证书的“防伪技术”。
过程:
7.疑问解答
中间人可能篡改证书吗
不能,因为他没有CA机构发的私钥,所以无法篡改相应的签名
中间人有可能把证书掉包吗
不能,因为如果用网站B的证书去替换原来网站A传给浏览器的证书,证书里的网站信息比如域名等就会与自己请求的域名不一致,对比一下就知道有没有掉包了。
为什么制作数字签名时需要hash一次
证书一般较长,用非对称加密比较耗时,而hash之后得到的是固定长度的信息,这样加解密就会快很多。
还有安全上的原因,内容较为深奥,不作展开。
怎么证明CA机构的公钥是可信的
操作系统、浏览器会预装一些它们信任的根证书,如果其中会有CA机构的根证书,就可以拿到对应的公钥了,如果没找到,则需要先安装该机构的根证书(有风险)。
证书之间的认证也可以不止一层,可以A信任B,B信任C,以此类推,我们把它叫做信任链
或数字证书链
每次进行HTTPS请求时都必须进行握手传输密钥吗
服务器会为每一个浏览器维护一个sessionID,浏览器生成密钥传输给服务器,服务器会把密钥存到对应的sessionID中,浏览器之后每次访问只需带上sessionID,服务器就能从对应的sessionID中取出密钥进行加解密。