HTTPS

一直对 HTTPS 的概念模模糊糊。本篇详细介绍以下内容:

  1. 什么是 HTTPS

  2. 数字签名是什么?

  3. CA 机构

  4. HTTPS 运行机制

https详解

什么是HTTPS

HTTPS ,也称作 HTTP over TLSTLS 的前身是 SSL

HTTPSHTTP 协议相比提供了

  1. 数据完整性:内容传输经过完整性校验
  2. 数据隐私性:内容经过对称加密,每个连接生成一个唯一的加密密钥
  3. 身份认证:第三方无法伪造服务端(客户端)身份,比如U盾是一种用于客户端身份认证的证书,https服务端会要求客户端将证书传送过去。

数字签名机制

通常为了保证数据传输过程数据不被篡改,我们会在传输数据中加上数字签名。

  1. 数据传输前
    • 使用摘要算法(e.g. Hash)对传输内容进行加密 ,生成摘要(digest
    • 使用协商好的 RSA 公钥加密上一步生成的摘要, 从而得到数字签名
  2. 接收到传输的数据后
    • 使用 RSA 私钥解密数字签名,得到传输内容摘要
    • 使用相同的摘要算法对传输内容加密,与上一步解密出来的摘要比对,不一致则已经被篡改

CA 机构

又称为证书授权 (Certificate Authority) 机构,浏览器会内置这些 “受信任的根证书颁发机构” (即 CA )

SSL/TLS 协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。而 HTTPS 又是基于 TLS

虽然使用数字签名机制可保证数据不被篡改,但却保证不了 公钥的可靠性 。假如遭受中间人攻击,客户端接收到中间人伪造的公钥,在客户端加密完成后,中间人再拦截传送内容,就可以使用自己的私钥截取消息。

CA 作为第三方权威机构,可以帮助客户端与服务器建立可靠的数据传输通道:

  1. 服务器向 CA 机构申请证书,CA 机构使用自己的私钥加密服务器提供的 公钥 及其他服务器信息(域名等),作为证书颁发给服务器。
  2. 浏览器会内置所有权威的 CA 机构的相关信息,比如公钥,用于解密服务器传递过来的证书,获取其中的 公钥 等信息。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。

HTTPS 运行机制

  1. 客户端向服务器发起 HTTP 请求,发送支持的通信协议(e.g. TLS )以及用于后续生成 对话密钥 的随机数。明文传输。

  2. 服务器接收到 随机数 及 通信协议 ,同时也生成 随机数 (用于后续生成 对话密钥 ),同时将 CA 证书发送给客户端。明文传输。

  3. 客户端接收到 随机数 及 证书后,首先匹配到对应的 CA 机构的公钥,解密出证书的颁发机构、域名、有效时间、服务器提供的公钥等信息,并一一校验。校验成功后,生成随机数(用于后续生成 对话密钥 ),并使用证书中服务器提供的公钥加密随机数,发送给服务器。

  4. 服务器接收到数据后,使用私钥解密,得到随机数,加上第一二步中的两个随机数,使用双方约定的算法生成一个 “对话密钥” ,用于加密响应与解密请求。

  5. 客户端也由以上的三个随机数,得到一个相同的 对话密钥 ,用于加密请求与解密响应。

细节

  • 三个伪随机数保证了最终生成的密钥更接近与随机
  • 每次请求都会生成新的 对话密钥
  • 对称加密与解密相对于 RSA 非对称加解密,保证了性能

参考链接

从 HTTP 到 HTTPS - 什么是 HTTPS
HTTPS 工作原理
阮一峰 - 数字签名是什么
阮一峰 - SSL/TLS协议运行机制的概述