HTTPS原理
面试常客,不得不复习,太功利了
1. 互相交换密钥的机制
近代的加密方法中加密算法是公开的,而密钥确实保密的
1.1 共享密钥
加密和解密都用同一个密钥,其有个最大挑战如何安全传递密钥,拥有密钥就拥有加密解密的能力,如果被互联网转发密钥被窃听,那么就失去了加密的意义
1.2 公开密钥
加密和解密使用不同的密钥,这两把密钥叫做公钥和私钥。客户端用服务器的公钥加密内容发送出去,服务器就用自己的密钥进行解密
1.3 二者对比
公开密钥的处理更加复杂,效率更低,但没有共享密钥使用同把密钥的风险
1.4 HTTPS混用加密机制
采用共享和公开密钥混合机制,先用公开密钥将共享密钥加密发送给对方,然后确保交换的密钥安全前提下,使用共享密钥通信,综合了二者的优缺点
1.5 证明公开密钥正确性的证书
公开密钥还是存在一些问题,无法证明自身是货真价实的密钥。比如在使用交换公钥时遭到了中间人攻击,那么双方在一开始的交换密钥都被掉包,后续的通信对于中间人透明,此时需要使用证书来证明对方的身份,步骤:
- 公认信赖的CA机构认证某个站点后,对该站点的公开密钥签名放入证书中
- 服务器有相关请求,会响应自己的证书给客服端
- 客户端收到证书会使用CA的公开密钥解密,然后验证签名的合法性,通过则验证了公开密钥的正确性
- CA的公开密钥会植入浏览器内部
- 中间虽可用CA的公钥对证书篡改,但无CA密钥是无法加密的和签名的验证的
2. HTTPS
HTTPS并非一种新协议,只是HTTP通信接口部分使用了SSL/TLS协议代替。正常HTTP直接和TCP通信,使用HTTPS时,HTTP先和SSL/TCL通信,然后后者再与TCP通信,简单就是应用层和传输层增加了SSL/TCL
SSL由网景公司提出,后标准化后称为TLS
2.1 HTTP的缺点
- 通信使用明文
- 不验证通信方的身份
- 无法验证报文的完整性
由此出现了HTTPS
2.2 HTTPS安全通信机制
- 客户端发起连接,TCP的三次握手
--------------------HTTPS当然也是基于TCP-------------------------------------
- 客户端发送ClientHello,包含支持的SSL版本和组件
- 服务器响应ServerHello,包含上面筛选的SSL版本和组件
- 服务器发送CA证书
- 服务器发送ServerHelleDone通知客户端,最初的握手结束
------------------------第一阶段的握手协商结束------------------------------------
- 客服端响应ClientKeyExchange报文,包含服务器公钥加密的随机密码串(证书验证通过)
- 客服端响应ChangeCipherSpec报文,告诉服务器,此后采用Pre-master secret密钥加密
- 客户端发送Finished报文,包含至今全部报文的校验值,若服务器能加密校验值,则这次握手成功
- 服务器端同样响应ChangeCipherSpec报文
- 同样发送Finished报文
- 二者的Finished报文交换后,SSL建立,此后进行HTTP协议交流,受SSL保护
参考
《图解TCP/IP》