聊SSL加速,先要理清一个关键点:HTTPS访问慢,瓶颈大多在握手环节,并不是加密运算本身。TLS握手需要多次网络往返,这部分延迟占据首屏加载时间八成以上;现代CPU处理AES对称加密运算的开销几乎可以忽略不计。SSL加速解决的,主要是握手阶段的计算开销,不是传输阶段加密的速度。
早年Web服务器性能有限,SSL握手和加解密操作会占用服务器30%至60%CPU资源,所以厂商推出专用SSL加速卡,把RSA密钥交换、对称加密、摘要计算这类计算任务从CPU剥离,交给专用硬件处理。加速卡核心思路就是计算卸载,释放CPU资源处理业务逻辑。后续Intel在2008年给CPU增加AES-NI指令集,硬件层面直接支持AES加解密,SSL加密对服务器CPU占用从三成以上下降到3%左右。ECC算法普及进一步降低计算量。直接造成独立SSL加速卡市场规模大幅萎缩,现在还在使用这类硬件场景主要是国密改造、金融合规项目,国密SM2算法加解密需要配套密码卡支撑。

现在行业提到SSL加速,大多指架构层面的SSL卸载。原理不难理解。客户端先和SSL卸载设备(负载均衡器、反向代理或者CDN边缘节点)建立TLS连接,握手流程在卸载设备完成。卸载设备加载证书私钥解密请求,把明文转发给后端Web服务器。服务器处理完业务,把明文响应传回卸载设备,卸载设备重新加密数据发送给客户端。整个链路客户端和后端Web服务器之间不会直接建立加密连接,加密隧道终止在卸载设备。
Nginx、HAProxy这类反向代理软件实现SSL卸载,依靠配置证书并监听443端口,通过软件完成解密和重新加密。F5、A10这类硬件负载均衡器内置SSL加速芯片,吞吐量远超纯软件方案。CDN的实现方式是在边缘节点终止TLS连接,客户端到CDN节点这段通信加密;CDN节点和源站之间通信可以明文传输,也可以再次加密,根据业务配置调整。CDN在边缘终止SSL的优势,客户端就近和边缘节点握手,减少握手往返次数,不用跨网和源站完成握手。
很多人关心一个敏感问题:SSL加速器会不会拦截网站传输的数据?
答案是会,这也是它实现功能必然带来的结果。SSL卸载设备本质属于受信任中间人。客户端以为直接和目标网站通信,实际TLS隧道终止在卸载设备。卸载设备能够读取解密后的明文请求,包含URL、Cookie、表单内容、API提交数据。之所以可以做到,是客户端设备信任这个卸载设备。企业内网场景,IT部门会把卸载设备的根证书下发到员工电脑证书信任库,浏览器校验卸载设备生成证书正常,就建立加密连接,使用者感知不到中间存在解密环节。
这套机制本身没有好坏之分。企业部署SSL卸载一般出于三个目的:降低后端服务器CPU压力、在加密流量中做安全检测(防数据泄露、识别恶意程序、管控上网行为),还有集中统一管理证书。如果你在公司内网办公,企业部署SSL解密,访问外部网站产生的明文内容对企业安全设备可见。这不是隐藏监控,相关内容一般会写进员工IT手册。但相同技术如果被恶意利用,就是中间人攻击。攻击者在公共WiFi部署虚假代理,动态生成证书,如果用户设备信任这个伪造证书,所有HTTPS流量都会被解密记录。
这里区分两个概念,SSL卸载设备和SSL代理底层技术原理一致,差别是部署目的和位置。反向代理部署在自有服务器前端,终止入站流量,作用是保护服务器、负载分担流量。正向代理部署在客户端和外网中间,终止出站流量,用来审查管控访问行为。前者一般无需担心,属于自己管控的基础设施;后者是否合理,取决于管控方、策略透明度以及用户是否知情。
还有一个容易被忽略的风险。SSL卸载设备解密之后,卸载设备和后端服务器之间传输明文数据。如果这段链路跑在公网,或者内网存在不安全节点,明文数据存在被窃听风险。规范做法是卸载设备和后端服务器部署在同一个受控内网,用防火墙或者VLAN隔离,防止明文流量被旁路抓取。同时卸载设备本身变成高价值攻击目标,设备存储证书私钥,一旦被入侵,攻击者可以伪造任意域名证书,影响范围远不止一台服务器。
普通用户判断流量是否被SSL解密拦截有简单办法。打开浏览器,点击地址栏锁图标,查看证书颁发机构。正常访问百度,证书颁发机构一般是DigiCert、GlobalSign这类公共CA。如果证书颁发方是企业内部CA名称,或者陌生机构名称,代表你的网络流量正在被解密审计。公共WiFi遇到这种证书,直接断开网络切换手机热点。
SSL加速本身属于性能优化方案,存在对应的工程价值。但SSL卸载必然伴随解密操作,解密就意味着链路中间存在可以读取明文的节点。这个节点由谁管控、明文数据传输路径、数据保存时长,决定这套方案是性能加速器还是流量监听工具。技术底层一致,差别在于使用方。