HTTPS(HyperText Transfer Protocol Secure)是 HTTP 的安全版本,通过使用 TLS(Transport Layer Security,传输层安全)/SSL(Secure Sockets Layer,安全套接层)协议来加密数据传输。

加密方式

单向加密

也叫做不可逆加密,对明文的加密产生一个密文,并不能再通过密文,解出来对应的明文

一般用于产生消息摘要,密钥加密等,常见的单向加密有:

  • MD5 : 相信这个大家都都熟悉了,一个明文,md5 以后,对应一个唯一的密文
  • SHA : 其中又分为 sha192 , sha256

特点:

  1. 不可逆
  2. 输入一样,输出必然相同

对称加密

对称加密,用一个密钥,对明文进行加密,同理,同这把密钥,也可以对密文进行解密

也就是说加密和解密,可以用同一个密钥

这种加密方法就是 对称加密

常用的对称加密方法有:

  • DES
  • 3DES
  • AES

特点:

  1. 加密方和解密使用同一密钥
  2. 加密解密的速度比较快

非对称加密

我们知道,对称加密使用同一把密钥,相反,非对称加密,使用公钥和私钥进行加密解密

可以使用私钥加密,公钥进行解密,同理,也可以使用公钥加密,私钥进行解密

常见非对称加密方式的有:

  • RSA
  • DSA

我们平时最常用的就是 RSA

特点:

  1. 使用两把密钥进行加密和解密,即公钥和私钥
  2. 公钥加密私钥解密,私钥加密公钥可以解密
  3. 加密或者解密,速度非常慢
  4. 私钥和公钥是成对出现的

HTTPS 加密过程

  1. 客户端发送请求
    • 客户端(例如浏览器)向服务器发送一个 HTTPS 请求,并携带客户端支持的协议版本、加密算法和一个随机数(Client Random)。
  2. 服务器响应
    • 服务器接收到请求后,选择一个协议版本和加密算法,并生成一个随机数(Server Random),然后将服务器的数字证书发送给客户端。这个证书包含服务器的公钥。
  3. 客户端验证证书
    • 客户端验证服务器的证书,确保证书是由受信任的 CA 签发,并且证书是有效的(未过期、未吊销,且域名匹配)。如果证书验证通过,客户端会继续进行下一步,否则会显示一个警告。
  4. 生成预主密钥
    • 客户端生成一个预主密钥(Pre-Master Secret),然后使用服务器的公钥加密这个预主密钥,并发送给服务器。
  5. 服务器解密预主密钥
    • 服务器使用自己的私钥解密出客户端发送的预主密钥。
  6. 生成会话密钥
    • 客户端和服务器分别使用预主密钥、客户端随机数和服务器随机数,生成相同的会话密钥(Session Key)。这个会话密钥用于对称加密后续的通信数据。
  7. 握手结束
    • 客户端和服务器使用会话密钥生成握手完成消息,并交换以确认握手过程已成功完成。之后,双方开始使用对称加密的会话密钥进行加密通信。

HTTPS 原理

HTTPS 的安全性依赖于以下几个关键因素:

  1. 对称加密和非对称加密的结合
    • 非对称加密:在握手过程中,使用非对称加密(公钥和私钥)来安全地交换会话密钥。非对称加密虽然安全,但速度较慢。
    • 对称加密:一旦会话密钥生成后,使用对称加密(单一密钥)来加密通信数据。对称加密速度快,适合大数据量传输。
  2. 数字证书和 CA
    • 服务器的公钥包含在数字证书中,数字证书由受信任的 CA 签发。客户端通过验证证书来确认服务器身份,防止中间人攻击(MITM)。
  3. 数据完整性
    • 使用消息认证码(MAC)或哈希函数来确保数据在传输过程中未被篡改。每个加密的数据包包括一个 MAC,接收方可以验证数据的完整性。
  4. 握手过程的安全性
    • 握手过程中使用随机数和预主密钥来生成会话密钥,使得每次会话的加密密钥都是独特的,防止重放攻击和密钥重用。

CA 证书

CA(Certificate Authority,证书颁发机构)证书的过程涉及多个步骤,确保服务器和客户端之间的通信是安全的,并且服务器的身份是经过验证的。以下是详细的 CA 证书颁发和验证过程:

1. 生成密钥对

首先,服务器生成一对公钥和私钥。这对密钥是非对称加密的基础。

2. 创建证书签名请求(CSR)

服务器使用私钥生成一个证书签名请求(CSR)。CSR 包含公钥和一些身份信息(例如,域名、公司名称、国家等)。

3. 提交 CSR 给 CA

服务器管理员将生成的 CSR 提交给 CA。CA 是一个受信任的第三方机构,负责验证申请者的身份并颁发证书。

4. CA 验证身份

CA 对请求者的身份进行验证。这可能包括多种方式,例如:

  • 验证域名所有权(例如,通过 DNS 记录或电子邮件验证)。
  • 验证组织的法律身份(例如,通过公司注册信息)。

5. CA 颁发证书

一旦 CA 验证通过,它会使用自己的私钥对 CSR 中的公钥和身份信息进行签名,生成一个数字证书。这个证书包含:

  • 服务器的公钥
  • 服务器的身份信息
  • CA 的数字签名

6. 安装证书

服务器管理员将 CA 颁发的证书安装到服务器上,并配置服务器使用这个证书进行加密通信。

7. 客户端验证证书

当客户端(例如,浏览器)与服务器建立 HTTPS 连接时,以下步骤会发生:

  1. 服务器发送证书:服务器将自己的证书发送给客户端。
  2. 客户端验证证书
    • 检查证书链:客户端检查证书是否由受信任的 CA 签名。客户端会有一个预安装的受信任 CA 列表(例如,浏览器或操作系统的信任库)。
    • 验证证书有效性:客户端验证证书的有效期,以及证书是否被吊销(例如,通过在线证书状态协议 OCSP 或证书吊销列表 CRL)。
    • 验证域名:客户端检查证书中的公共名称(CN)或主题备用名称(SAN)是否与访问的域名匹配。
  3. 建立安全连接:如果证书验证通过,客户端生成一个会话密钥,并使用服务器的公钥加密这个会话密钥,然后发送给服务器。服务器使用自己的私钥解密会话密钥。之后,客户端和服务器使用这个会话密钥进行对称加密通信。