https

https

2021-08-20
http
  • 如何保证公钥不被篡改?将公钥放在数字证书中,只要证书是可信的,公钥就是可信的。

握手过程 #

  • 涉及四次通信。

1. 客户端发送请求(ClientHello)。 #

客户端向服务器提供以下信息:

  1. 支持的协议版本,如TLS1.0版本。
  2. 客户端生成的随机数,是之后生成会话密钥的一部分。
  3. 支持的加密算法,如RSA。
  4. 支持的压缩算法。

2. 服务器收到请求后,向客户端发出回应(ServerHello)。 #

服务器向客户端发出回应包含以下内容(如果服务器需要确认客户端的身份,就需要再包含一项请求,要求和护短提供证书文件):

  1. 确认使用的协议版本。
  2. 服务器生成的随机数,是之后生成会话密钥的一部分。
  3. 确认使用的加密算法。
  4. 服务器证书。

3. 客户端回应 #

客户端收到回应后,先验证服务器的证书,如果证书不是可信机构颁发、证书中的域名与实际域名不一致、证书已经过期,就会显示一个警告询问是否继续。如果继续或者证书没有问题,客户端向服务端发送以下内容:

  1. 一个随机数(pre-master key),该随机数用服务器的公钥加密。
  2. 编码改变通知,表示随后的信息都用协商的加密算法和密钥发送。
  3. 客户端的握手结束通知,包含前面发送所有内容的hash值,供服务器校验。

4. 服务器回应 #

服务器收到第三个随机数后,计算会话使用的“会话密钥”,向客户端发送以下信息:

  1. 编码改变通知,表面之后的信息都用协商的加密算法和密钥发送。
  2. 服务器握手状态结束通知,包含签名发送的所有内容的hash值。

  • 中间人攻击:如果中间人在客户端与服务端开始建立连接的时候,拦截客户端的请求,让客户端与自己通信,自己再和服务端通信,出现了:客户端请求->中间人->服务端,服务端响应->中间人->客户端,中间人能获取到客户端请求的所有数据和服务端响应的所有数据。所以当出现证书不安全的时候要注意。

参考链接: SSL/TLS协议运行机制的概述 - 阮一峰的网络日志 (ruanyifeng.com)