Q:介绍 HTTPS 握手过程
- Client Hello
- Server Hello
- Certificate
- Server Hello Done
- Client Key Exchange
- Change Cipher Spec
- Finished
- Change Cipher Spec
- Finished
步骤一:客户端发送请求(Client Hello)
首先,客户端向服务端提供加密信息的通信。
- 客户端支持的SSL的指定版本
- 客户端产生的随机数(Client Random, 稍后用于生成”对话密钥”
- 客户端支持的加密算法
步骤二:服务器回应(Sever Hello)
服务端收到请求,向客户端发出回应
- 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
- 一个服务器生成的随机数(Server Random),稍后用于生成”对话密钥”。
- 确认使用的加密方法,比如RSA公钥加密。
- 服务器证书
第一次握手结束
步骤三:发送验证消息
SSL服务器将数字证书通过Certificate消息发送给SSL客户端,证书里面包含了网站地址,加密公钥,以及证书的颁发机构。
步骤四:服务器回应结束
SSL服务器发送Server Hello Done消息,通知SSL客户端版本和加密套件协商结束,开始进行密钥交换。
步骤五:
SSL客户端验证SSL服务器的证书合法后,如果不合法浏览器会提示。如果合法的话,利用证书中的公钥,SSL客户端随机生成的premaster secret(后续加密数据所需要的对称密钥),并通过Client Key Exchange消息发送给SSL服务器。
第二次握手结束
步骤六:
SSL客户端发送Change Cipher Spec消息,通知SSL服务器后续报文将采用协商好的密钥和加密套件进行加密和MAC计算。
步骤七:
SSL客户端计算已交互的握手消息(除Change Cipher Spec消息外所有已交互的消息)的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并添加MAC值、加密等),并通过Finished消息发送给SSL服务器。SSL服务器利用同样的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。
步骤八:
同样地,SSL服务器发送Change Cipher Spec消息,通知SSL客户端后续报文将采用协商好的密钥和加密套件进行加密和MAC计算。
步骤九:
SSL服务器计算已交互的握手消息的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并添加MAC值、加密等),并通过Finished消息发送给SSL客户端。SSL客户端利用同样的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。
第三次握手结束