5.3 HTTPS与mod_ssl:加密通道与握手优化


文档摘要

5.3 HTTPS 与 modssl:加密通道与握手优化 本节摘要:HTTPS 给请求的归途加上加密与身份认证的隧道。本节从 TLS 握手的"往返延迟账"讲起——每多一个往返,慢网络用户多等几十上百毫秒;然后给出一套可直接落地的证书配置(证书链、SNI 多站配对、安全协议版本与加密套件)、会话复用与 TLS 1.3 的握手机制改进,最后覆盖证书续期运维与 HTTPS 上线的完整迁移清单。 学习目标 阅读完本节,你应当能够: 描述 TLS 握手的基本流程与延迟构成; 完成证书链配置并解释缺中间证书的故障表现; 配置安全协议版本与加密套件,兼顾安全与兼容; 解释会话复用与 TLS 1.3 各省掉哪个往返; 按清单把存量 HTTP 站点平稳迁到 HTTPS。

5.3 HTTPS 与 mod_ssl:加密通道与握手优化

本节摘要:HTTPS 给请求的归途加上加密与身份认证的隧道。本节从 TLS 握手的"往返延迟账"讲起——每多一个往返,慢网络用户多等几十上百毫秒;然后给出一套可直接落地的证书配置(证书链、SNI 多站配对、安全协议版本与加密套件)、会话复用与 TLS 1.3 的握手机制改进,最后覆盖证书续期运维与 HTTPS 上线的完整迁移清单。

学习目标

阅读完本节,你应当能够:

  1. 描述 TLS 握手的基本流程与延迟构成;
  2. 完成证书链配置并解释缺中间证书的故障表现;
  3. 配置安全协议版本与加密套件,兼顾安全与兼容;
  4. 解释会话复用与 TLS 1.3 各省掉哪个往返;
  5. 按清单把存量 HTTP 站点平稳迁到 HTTPS。

握手要付几个往返:先算账

加密不是免费的。TLS 1.2 的完整握手流程:客户端打招呼(带支持的套件与随机数)→ 服务器出示证书、选定套件 → 客户端验证证书、生成密钥材料 → 双方确认。这个交互需要 2 个往返才开始传输应用数据;会话复用(客户端出示上次的会话票据)可省为 1 个;TLS 1.3 把完整握手压到 1 个往返,还支持会话恢复的"零往返"模式。

账有多重?局域网里一个往返不到 1 毫秒,无所谓;跨洲移动网络一个往返 200–300 毫秒,完整握手就是凭空多出半秒到一秒的白屏时间。这解释了后面所有优化动作的动机:要么少一个往返(会话复用、TLS1.3),要么让往返更快(开启 keepalive、OCSP 装订避免客户端额外查询吊销状态)

证书配置:一个能直接用的骨架

需要 mod_ssl。最小而完整的 HTTPS 虚拟主机(承接第 3 章的 SNI 配对逻辑):

Listen 443 <VirtualHost *:443> ServerName www.example.com DocumentRoot /var/www/example SSLEngine on # 证书与私钥:fullchain 必须包含中间证书 SSLCertificateFile /etc/ssl/example/fullchain.pem SSLCertificateKeyFile /etc/ssl/example/privkey.pem # 协议与套件:现代基线 SSLProtocol -all +TLSv1.2 +TLSv1.3 SSLCipherSuite HIGH:!aNULL:!MD5 SSLHonorCipherOrder off # 会话复用参数 SSLSessionCache "shmcb:/var/run/ssl_scache(512000)" SSLSessionCacheTimeout 600 </VirtualHost>

逐块解释设计意图。fullchain 而非只挂域名证书:浏览器验证证书依赖完整的信任链——域名证书由中间证书签发,中间证书再由根证书签发;根证书预装在操作系统里,中间证书必须由服务器随域名证书一起出示。只配域名证书的典型症状是:部分浏览器(自带完整中间证书缓存的)正常,另一部分浏览器报"证书无效",移动端与小程序环境尤其常见——这是新手 HTTPS 故障的第一名。排查与验证:

# 查看实际下发的证书链,域名证书之后应紧跟中间证书 openssl s_client -connect www.example.com:443 -servername www.example.com < /dev/null 2>/dev/null | grep -E "s:|i:" | head -4

协议版本:保留 1.2 是为了老客户端兼容,1.3 是性能主力(下节展开)。HonorCipherOrder off:让客户端优先选择套件,配合 1.3 的安全默认,现代实践倾向尊重客户端(移动端常为省电优化过套件顺序)。会话缓存:同客户端再次连接时出示票据,握手从 2 往返降到 1——上一节的延迟账在这里兑现。

TLS 1.3 与握手优化的两个方向

TLS 1.3 带来三件事:握手压到 1 往返(会话恢复可到 0 往返);删掉一批不安全的老算法(协商更干净、更快);密钥交换固定为前向安全的前向保密机制。httpd 侧不需要为 1.3 单独配置,协议列表里带上它即可。

非协议层的握手加速还有两招。OCSP 装订:服务器代替浏览器去查询证书吊销状态并把结果"装订"在握手里,客户端省掉一次额外查询:

SSLUseStapling On SSLStaplingCache "shmcb:/var/run/ocsp(128000)"

会话票据默认随会话缓存开启,注意多机集群里票据密钥要一致(否则负载均衡把用户转到另一台,票据作废又退回完整握手)。

安全响应头在 HTTPS 站点还差最后一块:HSTS——告诉浏览器"本站以后永远用 HTTPS",杜绝第一次被降级劫持的可能:

# 用 headers 模块在 HTTPS 虚拟主机里 Header always set Strict-Transport-Security "max-age=31536000"

上线 HSTS 前确认全站资源都是 HTTPS(包括第三方脚本),否则等于自断退路——浏览器会拒绝任何 http 访问且无法关闭,灰度期建议先设较短的 max-age。

证书运维与迁移清单

证书有有效期,忘记续期是经典生产事故(症状:全站报证书过期,影响面 100%)。现代做法是自动化续期:Let's Encrypt 一类免费签发机构配 ACME 客户端自动续期,续期后 reload httpd 让新证书生效。验证监控是否覆盖证书到期——到期前告警,别等浏览器替你发现。

存量站点从 HTTP 平迁 HTTPS 的检查清单:

  • 全站 80 端口 301 到 https(第 3 章的重写套路);
  • 站内资源全部改 https 引用,消灭混合内容告警;
  • 证书链完整(fullchain)、SNI 多站配对正确(第 3 章 openssl 验证法);
  • 内部跳转、代理的 ProxyPassReverse、后端生成的绝对链接同步改;
  • 协议基线与安全头(HSTS 最后上,灰度 max-age);
  • 监控里加证书到期告警与握手失败率。

图 5-3 TLS 握手延迟构成与优化对照

图 5-3 TLS 握手延迟构成与优化对照

常见 HTTPS 故障速查

部分客户端报证书无效:九成是缺中间证书,openssl 命令看证书链立刻现形。证书域名不匹配:SNI 配对错(第 3 章的 openssl 带 servername 复现法)。握手失败集中在老客户端:协议版本裁剪过狠,评估是否保留 1.2。随机性握手超时:熵不足(新虚拟机常见)或 MTU 问题导致的握手包被丢,前者补熵源,后者查网络路径。续期后浏览器仍报旧证书:续期成功但没 reload,或 reload 的是配置错误的实例。

本节要点回顾

  • 延迟账:TLS1.2 完整握手 2 往返、复用 1 往返、TLS1.3 新连接也只要 1 往返;
  • fullchain 铁律:中间证书必须随发,"部分浏览器报错"是缺链的指纹;
  • 协议基线:1.2 保兼容、1.3 主力,套件交客户端选择是现代实践;
  • 两个加速方向:会话缓存与票据少一个往返,OCSP 装订与 keepalive 让往返更快;
  • HSTS 谨慎上:先消灭混合内容,灰度 max-age,否则自断 http 退路;
  • 运维两件套:自动续期 + 到期告警,证书过期的锅不该由用户发现。

💡 一句话记住本节:HTTPS 的全部优化就一句话——把握手的往返次数往少了压,把每个往返的速度往快了赶。

至此归途三道工序齐全。最后一章回到整条流水线:守护它的安全,榨干它的性能。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U