企业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. 被动采集:从服务器本地捞配置

内部服务器扫不到,那就直接看配置文件。我习惯写一个采集脚本,分发到所有机器上执行。核心采集项:

  1. 证书文件路径和元信息:openssl x509 -in cert.pem -text -noout
  2. 服务进程TLS配置:Nginx的ssl_protocols和ssl_ciphers
  3. 中间件版本:Java的java -version,OpenSSL的openssl version
  4. 密钥存储方式: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服务。扫描时最好把端口范围放宽一点。
  • 别忘了客户端证书:有些服务用了双向认证,服务端验证客户端证书。这类服务在迁移规划里属于高难度项目,要单独标注。

本章核心逻辑:评估与摸底

下面这张图可以帮你快速回顾整个评估流程。我个人习惯在做迁移前,把这张图打印出来贴在白板上,每完成一项就打个勾。

企业TLS基础设施评估与摸底流程图 证书评估 密钥评估 组件评估 配置评估 网络评估 主动扫描:testssl.sh / openssl 被动采集:本地脚本 / 配置解析 数据汇总:概览表 / 风险等级标注 证书/密钥清单 组件/配置清单 形成迁移基线 → 启动分阶段迁移 避坑提醒 别信文档 注意非标准端口 别遗漏客户端证书

说白了,评估摸底就像打仗前做侦察。你把地图画得越细,后续的迁移路线就越清晰。我个人习惯在这张图上标出每个维度的负责人和截止日期,然后每周同步一次进展。

嗯,这里要再强调一次:千万别跳过这一步。我见过有团队直接买了一批新证书就开干,结果发现一半的服务器不支持新算法,最后回滚了三天。那种教训,一次就够了。