HTTPS 的证书验证过程是确保用户与服务器之间的安全通信的关键步骤。
以下是证书验证过程的详细步骤:
1. 客户端发起连接
- 客户端请求:
- 客户端(如浏览器)发起一个 HTTPS 请求,连接到服务器。
2. 服务器响应
- 服务器发送证书:
- 服务器将 SSL/TLS 证书发送给客户端。证书包含了服务器的公钥和由受信任的证书颁发机构(CA)签名的信息。
3. 客户端验证证书
-
验证证书链:
- 检查证书有效性:
- 客户端检查证书是否在有效期内。
- 验证证书签名:
- 客户端使用 CA 的公钥验证证书的签名,以确保证书未被篡改。
- 检查证书颁发机构:
- 客户端检查证书是否由受信任的 CA 颁发。浏览器内置了受信任的 CA 列表,用于验证证书的有效性。
- 检查证书有效性:
-
验证证书用途:
- 检查证书用途:
- 客户端检查证书是否适用于其目的(例如服务器身份验证)。
- 检查证书用途:
-
验证域名:
- 域名匹配:
- 客户端检查证书中的域名是否与请求的域名匹配。证书中的“主体”字段(Common Name)或“主题备用名称”字段(Subject Alternative Name)应与请求的 URL 匹配。
- 域名匹配:
4. 生成和交换密钥
- 密钥交换:
- 客户端生成密钥:
- 客户端生成一个对称密钥(Session Key),用于加密会话数据。
- 加密密钥:
- 客户端用服务器的公钥加密生成的对称密钥,并将其发送到服务器。
- 服务器解密密钥:
- 服务器用私钥解密客户端发送的对称密钥。
- 客户端生成密钥:
5. 加密通信
- 建立安全通道:
- 数据加密:
- 服务器和客户端使用对称密钥加密和解密数据,确保通信内容的机密性和完整性。
- 数据传输:
- 所有后续的通信数据都通过加密的通道传输。
- 数据加密:
6. 完成握手
- 握手完成:
- 一旦安全通道建立,客户端和服务器就可以安全地交换数据,握手过程结束。