0

HTTPS 通信过程

 2 years ago
source link: https://segmentfault.com/a/1190000040773365
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

HTTPS 通信过程

与 SSL 组合使用的 HTTP 被称为 HTTPS 或 HTTP over SSL。HTTPS 用来解决 HTTP 不安全传输的问题,HTTP 之所以不安全,是因为:

1. 传输的内容都是明文,可能会被窃听;
2. 不会验证通信双方的身份;
3. 传输内容可能被篡改。

SSL 提供了加密、认证以及摘要的功能,使用 HTTPS 可以有效防止以上问题:

1. HTTPS 会对传输的内容进行加密,加密采用的是对称加密的方式,但对称加密的密钥使用了服务器证书进行了非对称加密;
2. HTTPS 可以在通信前查明对方的证书,从而确认对方的身份;
3. HTTPS 提供了证书验证功能,确保证书来自于目标服务器且未被篡改。

HTTPS 握手

握手过程如下:

  1. 客户端与服务器协商 SSL 的版本和加密组件(加密算法、密钥长度);

    • 客户端发送 Client Hello 报文,报文中包含客户端支持的 SSL 版本及加密组件;
    • 服务端返回 Server Hello 报文,报文中包含服务器支持的 SSL 版本及加密组件;
    • Client Hello 和 Server Hello 报文中还分别包含客户端 random 和服务器 random(通信双方各自生成的随机数)。
  2. 服务端发送 Certificate 报文,报文中包含服务器证书,证书中又包含了服务器公钥;

    • 客户端进行证书验证,验证通过后生成一个随机数 pre-master secret,并使用客户端 random、服务器 random 以及 pre-master secret 生成 master secret,master secret 为会话密钥,之后的数据传输使用会话密钥进行加密/解密。
  3. 服务端发送 Server Hello Done 报文,通知客户端最初阶段的 SSL 握手协商部分结束;
  4. 客户端发送 Client Key Exchange 报文进行回应,报文中包含使用了服务器公钥进行加密的 pre-master secret;

    • 服务器收到报文后生成 master secret(生成方式与客户端相同)。
  5. 客户端发送 Change Cipher Spec 报文,提示服务器之后的通信采用 pre-master secret 密钥加密;
  6. 客户端发送 Finished 报文,该报文包含连接至今全部报文的整体校验值(采用 pre-master secret 加密),若服务器能够正确解密该报文,则此次握手协商成功;
  7. 服务器发送 Change Cipher Spec 报文;
  8. 服务器发送 Finished 报文;
  9. SSL 连接建立完成,客户端和服务端使用会话密钥(master secret)对通信的数据进行加密/解密。

证书验证

证书由受信任的第三方认证机构颁发,且多数浏览器系统已植入了认证机构的机构公钥。
证书(部分)内容包括:

1. 证书的有效时间、域名;
2. 服务器公钥;
3. 指纹算法(哈希算法,用来生成指纹,指纹是一个哈希值);
4. 数字签名(服务器私钥对指纹进行加密得到数字签名)。

证书颁发过程:

  1. 服务器向认证机构申请证书;
  2. 认证机构使用指纹算法对证书(部分)内容进行哈希运算得到指纹,并使用机构私钥对指纹进行加密得到数字签名,然后将该签名和服务器公钥存入证书,并向服务器颁发证书。

浏览器证书验证过程:

  1. 首先验证证书是否过期以及证书的域名是否与请求的域名相同,不相同则验证不通过;
  2. 获取证书的颁发机构,然后从浏览器系统中查询该机构的机构公钥;
  3. 使用机构公钥解密证书上的数字签名,得到一个哈希值 H1;
  4. 浏览器使用指纹算法对证书(部分)内容进行哈希运算,得到另一个哈希值 H2;
  5. 比较 H1 和 H2 是否相同,不相同说明证书被篡改过。

欢迎批评指正!!!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK