SSL/TLS
- 基本流程
- 客户端想服务端索要并验证公钥。
- 双方协商生成对话密钥。
- 双方采用对话密钥进行加密通信。
- 详细解释
上面流程的第一二两步叫做握手。如下图所示:
一共有四次通信,在握手阶段都是明文。
- 客户端发出请求(ClientHello)
客户端主要向服务器提供以下信息- 支持的协议版本,比如TLS 1.0版。
- 一个客户端生成的随机数,稍后用于生成”对话密钥”。
- 支持的加密方法,比如RSA公钥加密。
- 支持的压缩方法。
- 服务器回应(SeverHello)
服务器收到客户端请求后,向客户端发出回应,这叫做SeverHello。服务器的回应包含以下内容。- 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
- 一个服务器生成的随机数,稍后用于生成”对话密钥”。
- 确认使用的加密方法,比如RSA公钥加密。
- 服务器证书。
- 客户端回应
客户端收到回应之后,首先验证证书,若没有问题,就从证书中取出公钥,然后发送下面三个信息:- 一个随机数。该随机数用服务器公钥加密,防止被窃听。
- 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
- 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。
- 服务器的最后回应
服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的”会话密钥”。然后,向客户端最后发送下面信息。- 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
- 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。
HTTPS
https的流程大概是:
- 与目标机器443端口tcp连接。
- 利用TLS协议获取服务器证书,与服务器通信商议对称密钥,此后报文通过对称加密保护。
- 使用普通http传输报文。