Http证书体系及证书加密流程(通信流程)
一、HTTPS 证书体系:信任的基石
HTTPS 证书体系是保障网络通信安全的核心机制,其本质是一套基于公钥基础设施(PKI,Public Key Infrastructure) 的信任体系,通过数字证书实现通信双方的身份验证和数据加密,确保信息在传输过程中不被篡改、窃取或伪造。
证书体系全景图
-
根证书极少更新,换根等于“换操作系统”;因此 CA 用中间证书签名,一旦中间私钥泄露,吊销中间证书即可,根证书仍安全。
-
一张服务器证书里其实会带 1~3 张中间证书,浏览器会自动拼链;如果链拼不齐,就会报 “证书链不完整”。
-
核心角色
- 证书持有者(服务器 / 客户端):通常是网站服务器,需要向权威机构申请证书,以证明自身身份的合法性。证书中包含持有者的公钥、域名、有效期等关键信息。
- 证书颁发机构(CA,Certificate Authority):公认的权威第三方机构(如 Let’s Encrypt、DigiCert、GlobalSign 等),负责审核证书申请者的身份,并为其颁发经过数字签名的证书。CA 自身拥有根证书(Root Certificate),是整个信任体系的 “根”。
- 信任链(证书链):由于根证书直接预装在操作系统或浏览器中(如 Windows、macOS、Chrome 等),具有最高信任级别,而 CA 通常不会直接用根证书签名用户证书(避免根证书泄露风险),而是通过 “中间证书(Intermediate Certificate)” 层级签名。最终形成 “根证书→中间证书→用户证书” 的信任链,浏览器通过验证链条的完整性确认证书有效性。
- 证书吊销列表(CRL,Certificate Revocation List) 与在线证书状态协议(OCSP,Online Certificate Status Protocol):当证书因私钥泄露、域名变更等原因失效时,CA 会将其列入 CRL 或通过 OCSP 标记为吊销,浏览器在验证证书时会检查状态,避免使用无效证书。
- 把证书当成“电子身份证”:名字、照片、有效期、发证机关、防伪水印,一个都不能少。
-
Subject 里不仅放域名,还会放组织名(OV/EV 证书),浏览器地址栏的小锁→点击“证书”即可查看。
-
Signature 是 CA 用自己的私钥给证书全文做的哈希签名,浏览器用 CA 公钥验证哈希值一致即“未被篡改”。
-
证书的核心内容
一份标准的 X.509 格式数字证书包含:- 证书持有者信息(如域名、组织名称、国家 / 地区等);
- 证书持有者的公钥(用于加密传输对称密钥);
- 颁发机构(CA)的信息;
- CA 对证书的数字签名(用 CA 的私钥加密,可通过 CA 公钥验证,确保证书未被篡改);
- 证书的有效期(起始时间和截止时间,过期后需重新申请);
- 证书序列号(唯一标识,用于查询状态)等。
-
证书的类型
- 域名验证型(DV,Domain Validated):仅验证域名所有权(如通过邮箱或 DNS 解析记录),审核简单, issuance 快,适合个人网站或小型应用,仅显示域名信息。
- 组织验证型(OV,Organization Validated):除验证域名外,还需审核组织的合法性(如营业执照、地址等),证书中包含组织名称,可信度更高,适合企业网站。
- 扩展验证型(EV,Extended Validation):最高级别验证,需通过严格的法律、运营、物理地址等多重审核,浏览器地址栏会显示绿色锁标及组织名称(如银行、电商平台),安全性和可信度最强。
二、HTTPS 证书加密流程(通信流程):从握手到加密传输
HTTPS 的通信安全依赖于SSL/TLS 协议(SSL 是 TLS 的前身,目前主流为 TLS 1.2/1.3),其核心是通过 “非对称加密” 协商对称密钥,再用 “对称加密” 传输数据,同时通过证书实现身份验证。完整流程可分为TCP 三次握手和SSL/TLS 握手两部分,其中 SSL/TLS 握手是证书发挥作用的核心阶段。
1. 前置:TCP 三次握手
HTTPS 基于 TCP 协议,通信前需先完成 TCP 连接建立:
- 客户端向服务器发送 “SYN” 报文,请求建立连接;
- 服务器回复 “SYN+ACK” 报文,确认请求并发起自身连接请求;
- 客户端回复 “ACK” 报文,确认服务器的请求,TCP 连接建立。
2. SSL/TLS 握手:证书与密钥的 “安全协商”
以 TLS 1.2 为例(TLS 1.3 流程更简化,减少交互步骤),握手过程需客户端与服务器交换信息,完成身份验证、密钥协商,最终生成用于加密数据的 “会话密钥”。
-
步骤 1:客户端 Hello(Client Hello)
客户端向服务器发送信息,包括:- 支持的 SSL/TLS 版本(如 TLS 1.2);
- 支持的加密套件列表(如 ECDHE-RSA-AES256-GCM-SHA384,包含密钥交换算法、对称加密算法、哈希算法);
- 客户端生成的随机数(Client Random),用于后续密钥计算;
- 会话 ID(若复用之前的会话,可省略部分步骤)。
-
步骤 2:服务器 Hello(Server Hello)
服务器收到客户端请求后,选择双方都支持的配置并回复:- 确认使用的 SSL/TLS 版本和加密套件(如选中 ECDHE-RSA-AES256-GCM-SHA384);
- 服务器生成的随机数(Server Random),与客户端随机数共同用于密钥计算;
- 会话 ID(同客户端,或新建会话)。
-
步骤 3:服务器发送证书(Certificate)
服务器将自身的数字证书(包含公钥、域名、有效期、CA 签名等)发送给客户端。若证书由中间 CA 颁发,还需附带中间证书,形成完整的信任链。 -
步骤 4:客户端验证证书合法性
客户端收到证书后,需通过以下步骤验证证书有效性(核心环节):- 检查证书格式与完整性:验证证书是否符合 X.509 标准,是否被篡改(通过 CA 的数字签名,用 CA 公钥解密签名后与证书哈希值比对,一致则未篡改)。
- 验证信任链:从服务器证书向上追溯,通过中间证书最终验证到根证书(根证书预装在客户端,默认可信),若链条断裂(如中间证书缺失或无效),则证书不被信任。
- 检查证书有效期:确认证书当前时间在 “起始时间” 和 “截止时间” 之间,过期证书无效。
- 验证域名匹配:证书中记录的域名需与当前访问的域名一致(或符合通配符规则,如 *.example.com匹配a.example.com),否则视为 “域名不匹配”,浏览器提示风险。
- 检查证书吊销状态:通过 CRL 或 OCSP 查询证书是否被吊销(如私钥泄露后 CA 会吊销证书),若已吊销则拒绝信任。
若以上验证均通过,客户端确认服务器身份合法;若验证失败,浏览器会弹出警告(如 “证书无效”“连接不安全”),用户可选择是否继续(存在风险)。
-
步骤 5:客户端生成预主密钥(Pre-Master Secret)并加密传输
客户端生成一个随机数(Pre-Master Secret),用服务器证书中的公钥(非对称加密) 加密后发送给服务器。由于只有服务器拥有对应的私钥,因此只有服务器能解密得到 Pre-Master Secret(防止第三方窃取)。 -
步骤 6:双方计算会话密钥(Master Secret)
客户端和服务器分别使用之前交换的 Client Random、Server Random,以及解密得到的 Pre-Master Secret,通过相同的算法(如 PRF 函数)计算出会话密钥(对称密钥)。此时双方拥有相同的会话密钥,后续通信将使用该密钥进行对称加密(效率更高)。 -
步骤 7:客户端与服务器确认加密通信就绪
- 客户端发送 “Change Cipher Spec” 报文,告知服务器后续数据将用会话密钥加密;
- 客户端发送 “Finished” 报文(用会话密钥加密),包含之前握手信息的哈希值,供服务器验证。
- 服务器接收后,同样发送 “Change Cipher Spec” 和 “Finished” 报文(用会话密钥加密),客户端验证通过后,SSL/TLS 握手完成。
3. 加密数据传输
握手完成后,客户端与服务器进入加密通信阶段:
- 所有数据通过会话密钥(对称加密,如 AES) 加密后传输,第三方即使截获数据,因没有会话密钥也无法解密。
- 同时,通过哈希算法(如 SHA)对数据进行完整性校验,确保传输过程中数据未被篡改(若篡改,哈希值不匹配,接收方会拒绝)。
4. 会话结束
通信完成后,双方通过 “Close Notify” 报文结束会话,会话密钥失效(若后续重连,可通过会话 ID 复用部分握手步骤,提高效率)。