HTTPS(HyperText Transfer Protocol Secure)是 HTTP 的安全版本,通过使用 TLS(Transport Layer Security,传输层安全)/SSL(Secure Sockets Layer,安全套接层)协议来加密数据传输。
加密方式
单向加密
也叫做不可逆加密,对明文的加密产生一个密文,并不能再通过密文,解出来对应的明文
一般用于产生消息摘要,密钥加密等,常见的单向加密有:
- MD5 : 相信这个大家都都熟悉了,一个明文,md5 以后,对应一个唯一的密文
- SHA : 其中又分为 sha192 , sha256
特点:
- 不可逆
- 输入一样,输出必然相同
对称加密
对称加密,用一个密钥,对明文进行加密,同理,同这把密钥,也可以对密文进行解密
也就是说加密和解密,可以用同一个密钥
这种加密方法就是 对称加密
常用的对称加密方法有:
- DES
- 3DES
- AES
特点:
- 加密方和解密使用同一密钥
- 加密解密的速度比较快
非对称加密
我们知道,对称加密使用同一把密钥,相反,非对称加密,使用公钥和私钥进行加密解密
可以使用私钥加密,公钥进行解密,同理,也可以使用公钥加密,私钥进行解密
常见非对称加密方式的有:
- RSA
- DSA
我们平时最常用的就是 RSA
特点:
- 使用两把密钥进行加密和解密,即公钥和私钥
- 公钥加密私钥解密,私钥加密公钥可以解密
- 加密或者解密,速度非常慢
- 私钥和公钥是成对出现的
HTTPS 加密过程
- 客户端发送请求
- 客户端(例如浏览器)向服务器发送一个 HTTPS 请求,并携带客户端支持的协议版本、加密算法和一个随机数(Client Random)。
- 服务器响应
- 服务器接收到请求后,选择一个协议版本和加密算法,并生成一个随机数(Server Random),然后将服务器的数字证书发送给客户端。这个证书包含服务器的公钥。
- 客户端验证证书
- 客户端验证服务器的证书,确保证书是由受信任的 CA 签发,并且证书是有效的(未过期、未吊销,且域名匹配)。如果证书验证通过,客户端会继续进行下一步,否则会显示一个警告。
- 生成预主密钥
- 客户端生成一个预主密钥(Pre-Master Secret),然后使用服务器的公钥加密这个预主密钥,并发送给服务器。
- 服务器解密预主密钥
- 服务器使用自己的私钥解密出客户端发送的预主密钥。
- 生成会话密钥
- 客户端和服务器分别使用预主密钥、客户端随机数和服务器随机数,生成相同的会话密钥(Session Key)。这个会话密钥用于对称加密后续的通信数据。
- 握手结束
- 客户端和服务器使用会话密钥生成握手完成消息,并交换以确认握手过程已成功完成。之后,双方开始使用对称加密的会话密钥进行加密通信。
HTTPS 原理
HTTPS 的安全性依赖于以下几个关键因素:
- 对称加密和非对称加密的结合
- 非对称加密:在握手过程中,使用非对称加密(公钥和私钥)来安全地交换会话密钥。非对称加密虽然安全,但速度较慢。
- 对称加密:一旦会话密钥生成后,使用对称加密(单一密钥)来加密通信数据。对称加密速度快,适合大数据量传输。
- 数字证书和 CA
- 服务器的公钥包含在数字证书中,数字证书由受信任的 CA 签发。客户端通过验证证书来确认服务器身份,防止中间人攻击(MITM)。
- 数据完整性
- 使用消息认证码(MAC)或哈希函数来确保数据在传输过程中未被篡改。每个加密的数据包包括一个 MAC,接收方可以验证数据的完整性。
- 握手过程的安全性
- 握手过程中使用随机数和预主密钥来生成会话密钥,使得每次会话的加密密钥都是独特的,防止重放攻击和密钥重用。
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 连接时,以下步骤会发生:
- 服务器发送证书:服务器将自己的证书发送给客户端。
- 客户端验证证书:
- 检查证书链:客户端检查证书是否由受信任的 CA 签名。客户端会有一个预安装的受信任 CA 列表(例如,浏览器或操作系统的信任库)。
- 验证证书有效性:客户端验证证书的有效期,以及证书是否被吊销(例如,通过在线证书状态协议 OCSP 或证书吊销列表 CRL)。
- 验证域名:客户端检查证书中的公共名称(CN)或主题备用名称(SAN)是否与访问的域名匹配。
- 建立安全连接:如果证书验证通过,客户端生成一个会话密钥,并使用服务器的公钥加密这个会话密钥,然后发送给服务器。服务器使用自己的私钥解密会话密钥。之后,客户端和服务器使用这个会话密钥进行对称加密通信。