https
2021-08-20
- 如何保证公钥不被篡改?将公钥放在数字证书中,只要证书是可信的,公钥就是可信的。
握手过程 #
- 涉及四次通信。
1. 客户端发送请求(ClientHello)。 #
客户端向服务器提供以下信息:
- 支持的协议版本,如TLS1.0版本。
- 客户端生成的随机数,是之后生成会话密钥的一部分。
- 支持的加密算法,如RSA。
- 支持的压缩算法。
2. 服务器收到请求后,向客户端发出回应(ServerHello)。 #
服务器向客户端发出回应包含以下内容(如果服务器需要确认客户端的身份,就需要再包含一项请求,要求和护短提供证书文件):
- 确认使用的协议版本。
- 服务器生成的随机数,是之后生成会话密钥的一部分。
- 确认使用的加密算法。
- 服务器证书。
3. 客户端回应 #
客户端收到回应后,先验证服务器的证书,如果证书不是可信机构颁发、证书中的域名与实际域名不一致、证书已经过期,就会显示一个警告询问是否继续。如果继续或者证书没有问题,客户端向服务端发送以下内容:
- 一个随机数(pre-master key),该随机数用服务器的公钥加密。
- 编码改变通知,表示随后的信息都用协商的加密算法和密钥发送。
- 客户端的握手结束通知,包含前面发送所有内容的hash值,供服务器校验。
4. 服务器回应 #
服务器收到第三个随机数后,计算会话使用的“会话密钥”,向客户端发送以下信息:
- 编码改变通知,表面之后的信息都用协商的加密算法和密钥发送。
- 服务器握手状态结束通知,包含签名发送的所有内容的hash值。
- 中间人攻击:如果中间人在客户端与服务端开始建立连接的时候,拦截客户端的请求,让客户端与自己通信,自己再和服务端通信,出现了:客户端请求->中间人->服务端,服务端响应->中间人->客户端,中间人能获取到客户端请求的所有数据和服务端响应的所有数据。所以当出现证书不安全的时候要注意。