企业TLS基础设施现状评估与摸底
迁移之前,最重要的一件事是什么?
不是选方案,不是买证书,更不是写配置。我个人习惯先把家底摸清楚。你想想看,一个几千台服务器、几十个域名的环境,说迁就迁?没摸清现状就动手,我在好几个项目里都见过——到一半发现证书不兼容、中间件不支持、甚至域名都不知道挂在哪。那场面,挺狼狈的。
所以这一章,咱们就聊聊怎么把现有的TLS基础设施扒个底朝天。
评估该覆盖哪些维度?
我把评估拆成五个维度。别嫌多,每一个都可能成为迁移路上的坑。
| 维度 | 核心关注点 | 常见的意外情况 |
|---|---|---|
| 证书 | 签发机构、有效期、算法、域名覆盖 | 自签名证书混在CA签发证书里,谁会信? |
| 密钥 | 长度、算法、存储方式、轮换策略 | 私钥裸放在config目录下,我见过好几次 |
| 组件 | Nginx/HAProxy/Java SDK/OpenSSL版本 | 某组件不支持TLS 1.3,整条链路都得降级 |
| 配置 | 加密套件顺序、协议版本、HSTS/OCSP Stapling | 全配了TLS 1.3,但负载均衡没开 |
| 网络 | CDN/WAF/四层代理是否透传TLS | CDN只支持RSA,那就别想用ECDSA了 |
我的一个习惯:先把这五个维度做成一张Excel表,每个维度一列,然后让运维同学逐项填报。别用文档,文档没人填。表格+字段约束,才能收上来真正有用的数据。
摸底工具有哪些?
工欲善其事,必先利其器。手动查?不现实。我一般分两步走:
1. 主动扫描:从外到内测一遍
针对对外暴露的域名和IP,用工具做TLS握手检测。这里有两个我非常常用的:
- testssl.sh:开源,能测协议、套件、证书链、HSTS,基本全覆盖。跑一次大概十几秒,适合批量。
- openssl s_client:手动调试神器。遇到奇奇怪怪的握手失败,全靠它看握手日志。
批量扫描的脚本大概长这样:
# 批量扫描域名列表
for domain in $(cat domain_list.txt); do
echo "=== $domain ==="
testssl.sh --quiet --parallel $domain:443
done
注意:扫描频率别太高。我曾经直接扫了公司CDN源站IP,被WAF当成攻击封了一下午。嗯,有点尴尬。
2. 被动采集:从服务器本地捞配置
内部服务器扫不到,那就直接看配置文件。我习惯写一个采集脚本,分发到所有机器上执行。核心采集项:
- 证书文件路径和元信息:
openssl x509 -in cert.pem -text -noout - 服务进程TLS配置:Nginx的
ssl_protocols和ssl_ciphers - 中间件版本:Java的
java -version,OpenSSL的openssl version - 密钥存储方式:HSM、文件、还是环境变量?
脚本示例(只采集核心项):
#!/bin/bash
# 采集本机TLS配置
echo "Host: $(hostname)"
echo "OpenSSL: $(openssl version 2>/dev/null)"
nginx -t 2>&1 | grep -i 'ssl'
find /etc/ -name "*.pem" -o -name "*.crt" 2>/dev/null
摸清家底后,你会发现什么?
我做了几次大规模摸底后,总结了几类高频问题:
- 证书链不完整:中间证书缺失,客户端如果没缓存根证书就会报错。这在移动端特别常见。
- 混合了自签名证书:内网服务用自签名没问题,但和CA签发的证书混在一起,迁移时容易误删或漏绑。
- 协议版本太老:还有服务开SSLv3或TLS 1.0,这种迁移后要么升级要么直接下线。
- 密钥类型不统一:RSA 2048、RSA 4096、ECDSA P-256混着用,后端处理逻辑会变得很复杂。
摸底数据怎么整理?
数据收集上来只是第一步。你总不能拿着一百条原始记录去开会吧?我建议整理成一张概览表:
| 服务名称 | 域名/IP | 当前协议 | 当前证书算法 | 密钥长度 | 到期日 | 风险等级 |
|---|---|---|---|---|---|---|
| app-web | api.example.com | TLS 1.2 | RSA | 2048 | 2025-07-01 | 低 |
| legacy-pay | pay.old.com | TLS 1.0 | RSA | 1024 | 2024-12-01 | 高 |
| auth-srv | auth.internal | TLS 1.3 | ECDSA | P-256 | 2025-10-15 | 低 |
一个小技巧:把这张表导入到Notion或飞书文档里,每个服务一行,谁负责迁移、是否验证完毕,直接标注状态。比Excel好同步。
摸底中的避坑指南
- 别信文档,要亲自验证:我曾经信了运维文档说“全站TLS 1.2”,结果一查,一台老机器硬扛了两年TLS 1.0。文档会说谎,但
openssl s_client不会。 - 注意非标准端口:TLS不止443。8443、9090、甚至Random端口都可能挂着HTTPS服务。扫描时最好把端口范围放宽一点。
- 别忘了客户端证书:有些服务用了双向认证,服务端验证客户端证书。这类服务在迁移规划里属于高难度项目,要单独标注。
本章核心逻辑:评估与摸底
下面这张图可以帮你快速回顾整个评估流程。我个人习惯在做迁移前,把这张图打印出来贴在白板上,每完成一项就打个勾。
说白了,评估摸底就像打仗前做侦察。你把地图画得越细,后续的迁移路线就越清晰。我个人习惯在这张图上标出每个维度的负责人和截止日期,然后每周同步一次进展。
嗯,这里要再强调一次:千万别跳过这一步。我见过有团队直接买了一批新证书就开干,结果发现一半的服务器不支持新算法,最后回滚了三天。那种教训,一次就够了。