ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Linux修复SWEET32:禁用3DES与OpenSSL升级实战

Linux修复SWEET32:禁用3DES与OpenSSL升级实战 扫描报告甩过来的时候一屏的CVE-2016-2183端口从 443 排到 8443底下跟一行小字SSL/TLS协议信息泄露漏洞。这种工单在 Linux 运维的日常里太常见了而且它有个很烦人的特点不适配、不崩溃、不影响业务但扫描器就是盯着不放甲方或安全部门就是要求整改闭环。这个漏洞在圈子里更常被叫SWEET32本质是 3DES 这类 64 位分组密码在 CBC 模式下扛不住生日攻击。处理它的路子不止一条既可以在 Nginx、Tomcat、sshd 的配置层把 3DES 套件直接摘掉也可以老老实实升级 openssl。前者十分钟能搞定但依赖当前库版本支持后者看起来一劳永逸实际上一脚踩空就是 ssh 连不上、yum 报错、系统命令集体失灵。这篇就把我在 Linux 上处理这个漏洞的完整链路摊开讲——怎么判断该走哪条路、升级 openssl 时哪些参数不能乱改、以及复扫结果对不上时该从哪几个方向查。1. SWEET32 到底在打什么把 64 位分组密码的原理摊开看1.1 生日悖论怎么就从数学题变成了信息泄露先说清楚攻击的立足点。CBC 模式下的分组密码每个密文分组的长度等于分组长度。3DES 的分组长度是 64 位也就是 8 字节。当你在同一条加密连接上发送了足够多的数据之后根据生日悖论出现两个完全相同的密文分组的概率会快速上升——大概在发送 2 的 32 次方块之后也就是约 32 GiB 数据碰撞概率就到 50% 左右。生日悖论其实不玄乎一个教室里只要有 23 个人就有超过一半的概率存在两个人生日相同。分组密码的生日就是那 8 字节的取值空间只有 2 的 64 次方种可能撞车比人想象的容易得多。碰撞一旦发生攻击者就能拿到两个明文分组的异或值。这时候如果其中一个明文是可猜测的或者已知的比如浏览器重复发送的 Cookie、HTTP 头里的固定字段、报文里的已知结构异或值一减另一个未知明文就暴露了。这就是所谓明文恢复。1.2 为什么扫描器只揪着 3DES不揪 AES看一个对比就明白了算法分组长度生日界约实际可利用性3DES / DES / IDEA64 位2^32 块 ≈ 32 GiB单条长连接可触及AES128 位2^64 块 ≈ 128 EiB现实网络不可达RC4流密码不适用属其他缺陷单独漏洞另算关键点在于3DES 的密钥强度是够的112 位有效密钥暴力破解不现实但它的分组长度只有 64 位短板在分组上而不在密钥上。也就是说3DES 的安全性被钉死在大约 32 位量级跟密钥多长没关系。SWEET32 论文里展示真实攻击时抓了大约 785 GB 的流量才把一条会话里的认证凭据还原出来。785 GB 听起来很多但在一条长时间不断流的大流量长连接上比如视频流、大文件持续下载、保持长连的 API 网关是能攒出来的。所以它被定为可利用的缺陷NVD 给出的 CVSS 3.x 评分是 7.5级别高危。提示这个 CVE 不只影响 TLS。原文明确覆盖 TLS、SSH、IPSec 等使用 64 位 CBC 分组的协议。很多人只改了 443扫描器照样报问题出在 22 端口的3des-cbc没动。1.3 三条修复路径的取舍我用一张表说清楚遇到这个漏洞实际能走的路就三条成本差别很大路径操作内容耗时风险适用场景配置层禁用在 Nginx/Apache/Tomcat/sshd 里排除 3DES 套件10-30 分钟低但可能影响只支持 3DES 的老客户端库版本较新、能排除干净的情况升级 openssl源码编译或包管理器升级重新编译依赖组件半天到两天高涉及 ABI 兼容和系统命令系统库过老、配置层排除不彻底、有合规硬要求协议栈升级启用 TLS 1.3 只留 TLS 1.2天然无 3DES取决于客户端改造中老客户端可能连不上客户端可控、能推动升级的环境我的经验是先试第一条撑不住再上第二条。因为第一条改的是配置随时可以改回来第二条改的是运行时底座改错了整台机器都可能进不去。而且很多场景下配置层封堵本来就是合规可接受的整改方式——扫描器扫的是服务端是否还会协商出 3DES只要协商不出来扫描就过了。2. 动手之前先摸家底三件必须先确认的事2.1 系统自带的 openssl 是哪个版本被谁依赖上来就yum update openssl或者下载源码覆盖安装是最容易出事的做法。先看版本openssl version -a rpm -qa | grep -i openssl rpm -q --whatrequires openssl-libs | wc -l最后那条命令很关键。在 CentOS/RHEL 系上openssl-libs被几百个包依赖sshd、yum、curl、rpm、postfix、python里的ssl模块都挂在它上面。它不是一个可以随便替换的独立组件而是系统底座的一部分。不同发行版自带的版本差异也很大这个差异直接决定你能不能用配置层解决问题CentOS 7 / RHEL 7openssl 1.0.2k默认 cipher 列表里还带 3DES配置层禁用有效但需要手工写。CentOS 8 / Rocky 8 / Alma 8openssl 1.1.1默认已经不含 3DES通常扫描器不会再报。Ubuntu 20.04openssl 1.1.1f情况类似。Ubuntu 22.04 / Debian 12openssl 3.0.x安全等级机制更严格3DES 基本默认不可用。所以如果是 CentOS 7 这类老系统你面对的往往不只是 3DES 一个问题TLS 1.0、RC4、SHA1 证书签名大概率会一起被扫出来。2.2 到底哪个服务在协商 3DES不要只盯着报告里的 443。先把监听端口列出来ss -lntp然后把每个和加密相关的服务都过一遍Nginx、Apache、Tomcat、Java 应用、Redis TLS、MySQL TLS、PostgreSQL、还有容易被忘掉的 22 端口 SSH。我见过最典型的漏项就是把 Nginx 的 cipher 列表清得干干净净扫描器还在报——因为报的是同一个 IP 的 22 端口。如果是 Nginx用nginx -T | grep -i ssl能把加载的完整配置打出来比翻文件快得多也能顺便发现某个server块里单独写过ssl_ciphers把全局配置给覆盖了。2.3 判断这台机器能不能承受覆盖式升级我给自己的判断清单是四条任何一条不满足就坚决走并行安装而不是覆盖这是不是生产核心节点能不能接受 30 分钟以上的停机窗口有没有虚拟机快照或者系统级备份可以回滚机器上有没有跑着依赖系统 openssl 的自研程序这类程序链接的是哪个 soname有没有 yum/apt 在线源可用还是完全离线的内网环境提示内网离线机器要提前准备源码包和依赖 RPM。等到了现场才发现缺zlib-devel、缺perl-core只能来回折腾浪费时间还容易出错。3. 配置层封堵不碰系统库也能把 3DES 摘干净3.1 Nginx 和 Apache 的 cipher 列表怎么写Nginx 的核心是ssl_ciphers指令语法是 OpenSSL 的 cipher string支持!取反排除。一个我常用的写法ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!RC4:!MD5:!PSK:!SRP:!DSS;几个要点解释一下!DES和!3DES是这次的主角两个都写是为了防止某些写法下DES匹配不到DES-CBC3-SHA!RC4和!MD5顺手解决另外两个常被扫出来的问题!aNULL排除匿名套件!EXPORT排除出口级弱算法。ssl_prefer_server_ciphers on让服务端决定套件优先级避免客户端强行把弱套件抬上来。Apache 写法定类似但它默认用冒号分隔并且要显式开启服务端优先SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite HIGH:!aNULL:!MD5:!3DES:!DES:!RC4:!DHE SSLHonorCipherOrder on我建议顺手把 TLS 1.0 和 1.1 也关掉。理由很直接3DES 在 TLS 1.2 里本来就不该被协商而 TLS 1.0/1.1 恰恰是很多扫描器把 3DES 报出来的温床。关掉老协议一套整改就把两个待办合并了。3.2 Tomcat 和 Java 应用侧的处理Java 这条路走的是 JVM 层面的黑名单。JDK 8u161 及之后的版本jdk.tls.disabledAlgorithms里已经默认包含了3DES_EDE_CBC所以如果 JDK 够新什么都不用做。但如果是 8u151 之前的版本就得手工往$JAVA_HOME/jre/lib/security/java.security里加jdk.tls.disabledAlgorithmsSSLv3, RC4, DES, MD5withRSA, DH keySize 1024, EC keySize 224, 3DES_EDE_CBC, anon, NULL改完所有用到这个 JDK 的 JVM 都要重启才生效。Tomcat 自己在conf/server.xml的 Connector 上还能再加一层保险Connector port8443 protocolorg.apache.coyote.http11.Http11NioProtocol maxThreads150 SSLEnabledtrue SSLHostConfig Certificate certificateKeystoreFileconf/keystore.jks typeRSA/ Ciphers cipherTLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384/ /SSLHostConfig /Connector注意这里是白名单写法只有列出来的套件可用比黑名单更保险。3.3 SSH 的 3des-cbc 是最常被漏掉的一项这一项单独拎出来说因为它实在太容易被忽略。OpenSSH 在较老的版本里默认体系里包含3des-cbc扫描器扫 22 端口就会命中同一个 CVE。处理方式是编辑/etc/ssh/sshd_configCiphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcmopenssh.com,aes256-gcmopenssh.com,chacha20-poly1305openssh.com MACs hmac-sha2-256,hmac-sha2-512,umac-128openssh.com,hmac-sha2-256-etmopenssh.com,hmac-sha2-512-etmopenssh.com KexAlgorithms curve25519-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,diffie-hellman-group-exchange-sha256改完之后不要直接systemctl restart sshd就把当前会话断开。正确做法是先开一个空闲的新窗口留着不关在这个新窗口里执行sshd -t检查语法语法通过之后 reload 或者 restart然后另开一个窗口验证能不能登录成功。全部确认没问题再关掉那个保底窗口。这个习惯能救你很多次——尤其在不能带外管理、只能靠 SSH 进去的机器上。禁掉3des-cbc的副作用也要提前想好一些老旧的交换机、防火墙管理口、工业控制终端、银行前置的老客户端可能只支持 3des-cbc。如果你的环境里有这类设备禁用之后它们就连不上了这个必须提前登记清楚再动手。4. 真要升级 OpenSSL编译、装载与本地验证4.1 源码编译的参数该怎么定假设系统库太老、配置层走不通那就得自己编译一份。我固定用下面这套参数tar -zxvf openssl-1.1.1w.tar.gz cd openssl-1.1.1w ./config --prefix/usr/local/openssl --openssldir/usr/local/openssl shared zlib make -j$(nproc) make test make install逐个参数解释因为这里改错一个后面会很麻烦--prefix/usr/local/openssl决定了安装根目录。我坚持放在/usr/local下面而不是直接覆盖/usr就是为了和系统自带的库物理隔离。这么做之后系统自带的libssl.so.10原封不动躺在/usr/lib64新装的libssl.so.1.1在/usr/local/openssl/lib谁也不碰谁。--openssldir指的是证书和配置文件目录。两者设成一样是为了少踩坑有些老程序读配置时会去找openssl.cnf路径分叉了就是一个文件找不到的报错。shared生成动态库。必须加否则只会出静态库libssl.aNginx 这类需要动态链接的程序就没办法用。zlib启用压缩支持。不加的话某些依赖压缩的握手场景会有兼容问题。make test不要省。它会跑一遍自带的测试用例能在安装之前就发现这个平台的编译器有问题或者架构不匹配之类的硬伤。ARM 平台、国产 CPU 平台上跑一遍测试尤其必要。4.2 让程序真正用上新库链接路径的三种做法装完不等于生效。系统里可能同时存在三份 opensslwhich openssl找到哪个完全取决于 PATH 顺序。这时候要让目标程序明确链接到新库常见三种做法第一种编译时打 rpath。在编译 Nginx 或者自研程序时把库路径直接写进二进制./configure --prefix/usr/local/nginx \ --with-openssl/usr/local/src/openssl-1.1.1w \ --with-openssl-optshared \ --with-http_ssl_module make make install--with-openssl指向源码目录时Nginx 会把这份 openssl 一起编进自己的二进制里最终产物不再依赖系统库。这是我处理 Nginx 时最推荐的方式干净、彻底、不受其他因素干扰。第二种LD_LIBRARY_PATH临时指定。只适合调试和验证绝不要写进生产环境。它只对当前进程和子进程有效systemd 拉起来的服务根本读不到这个变量而且它会影响所有子进程出了诡异问题很难定位。第三种ld.so.conf.dldconfig。往/etc/ld.so.conf.d/openssl.conf里写一行/usr/local/openssl/lib然后ldconfig。这种方式影响面是全局的但因为新库的 soname 是libssl.so.1.1而系统的是libssl.so.10两者不冲突动态链接器会按 soname 精确匹配一般不会串。不过还是建议执行之后用ldconfig -p | grep libssl确认一下结果看看有没有出现意料之外的库版本。提示systemd 管理的服务可以用EnvironmentLD_LIBRARY_PATH/usr/local/openssl/lib单独指定库路径比全局ldconfig更克制的做法适合只想让某个服务用新库的场景。验证的时候别偷懒用绝对路径/usr/local/openssl/bin/openssl version -a ldd /usr/local/nginx/sbin/nginx | grep sslldd那行输出会告诉你 Nginx 到底链接到哪一份库。如果显示的还是/usr/lib64/libssl.so.10说明你的--with-openssl没生效得回头检查编译参数。4.3 升级完成后必须补上的四件事装完库、编译完 Nginx 只是完成了百分之七十。剩下的收尾工作少一件都可能让复扫结果对不上第一跑ldconfig刷新动态链接器缓存否则新装的库可能压根没被识别。第二把所有链接了 ssl 的自研程序重新编译一遍。源码编译的程序在链接那一刻就把要用的符号定下来了库升级之后不重编很容易出现符号找不到或者行为不一致。第三验证证书相关的操作还正常。包括证书链校验、私钥读取、p12 转换尤其是原来用 3DES 加密的私钥文件——虽然 3DES 加解密功能本身还在但格式解析路径可能有变化。第四逐个重启或者 reload 服务然后复扫。nginx -s reload之后新 worker 才会加载新配置和新库老 worker 会等到连接处理完才退出所以复扫要等一两分钟再执行。5. 升级现场最容易翻车的几个瞬间5.1 编译阶段卡在依赖和工具链上编译报错的形态五花八门但九成集中在三类。第一类是缺头文件典型报错是zlib.h: No such file or directory装zlib-devel就好。第二类是 perl 相关OpenSSL 的构建系统重度依赖 perl 脚本缺perl-core或者 perl 版本太老低于 5.10会在 configure 阶段直接挂掉。第三类是编译器版本用很老的 gcc 编译 OpenSSL 3.x 会报一堆语法错误这种情况要么升级 gcc要么退回到 1.1.1 系列。离线环境要提前准备的包大致是这些# RHEL/CentOS 系 yum install -y gcc gcc-c make perl perl-core zlib-devel # Debian/Ubuntu 系 apt install -y build-essential perl zlib1g-dev5.2 覆盖libssl.so.10之后系统命令集体失灵这一条是我见血最多的地方必须重点说。有人在老系统上按教程把源码编译出来的库直接cp到/usr/lib64/覆盖了原有的文件然后ssh: symbol lookup error: /lib64/libcrypto.so.10: undefined symbol: ... yum: error while loading shared libraries rpm: relocation error典型症状是ssh、yum、rpm、curl、sudo这些基础命令同时报动态库错误。根因就两个一是 soname 不匹配新的libssl.so.1.1顶替了旧程序要找的libssl.so.10符号对不上二是 ABI 不兼容1.0.2 和 1.1.1 之间的结构体布局有变化即使符号名字对得上也会崩。真踩进去了怎么救如果是虚拟机直接回滚快照最快。没有快照的话需要从同版本的另外一台机器上把/usr/lib64/libssl.so.10和libcrypto.so.10拷回来用 scp 不行因为 ssh 已经坏了得用 U 盘或者救援模式。如果这两个文件是被 RPM 包管理的用救援模式挂载系统后执行重装rpm -Uvh --replacepkgs --nodeps openssl-libs-1.0.2k-*.rpm正因为这个坑的修复成本极高我才坚持并行安装到/usr/local/openssl物理上不碰系统库。多花十分钟配置编译参数省下的是半夜救火的几个小时。5.3 证书和私钥处理时的格式坑升级到 OpenSSL 3.0 之后有几个操作会突然报错第一次遇到会懵。最典型的是读旧版 PKCS#12 文件# 在 3.0 下直接这么执行可能报错说算法不支持 openssl pkcs12 -in old.p12 -nodes -out new.pem # 需要显式加载 legacy provider openssl pkcs12 -in old.p12 -nodes -out new.pem -legacy原因是 OpenSSL 3.0 的 PKCS#12 默认用 AES-256-CBC 加密而读取用 RC2 等老算法加密的历史文件时那些算法被挪到了独立的 legacy provider 里不显式加载就找不到。另一个是证书链校验报unable to get local issuer certificate。这不是加密算法的问题而是 CA 证书链不完整或者顺序错了。PEM 格式的证书链文件里顺序必须是从服务器证书开始接着是中间证书最后才是根证书。顺序颠倒会直接导致部分客户端握手失败而这个错误在服务端日志里往往只能看到一句含糊的握手失败不好定位。还有一类是无密码私钥和有密码私钥的转换# 加密私钥转成无密码Nginx 之类要读无密码的 openssl rsa -in enc.key -out plain.key # 反过来给私钥加密码 openssl rsa -aes256 -in plain.key -out enc.key提示转换私钥之前一定先备份原文件。曾经有人把加密私钥转成明文私钥之后顺手删了原文件结果业务侧程序需要带密码的私钥只能重新申请证书。5.4 回滚方案要在动手之前就写好升级 openssl 之前我的习惯是先准备三样东西虚拟机快照或系统备份原库文件的副本/usr/lib64/libssl.so.*和libcrypto.so.*原版本的 RPM 包或源码包存在本地目录里。回滚步骤也要提前写在文档上而不是临时想# 1. 记录当前 rpm 版本 rpm -qa | grep openssl /root/openssl_versions_before.txt # 2. 备份原库 cp -a /usr/lib64/libssl.so.* /root/backup/ cp -a /usr/lib64/libcrypto.so.* /root/backup/ # 3. 出问题时用救援模式或单用户模式恢复 cp -a /root/backup/libssl.so.* /usr/lib64/ cp -a /root/backup/libcrypto.so.* /usr/lib64/ ldconfig这份文档平时看起来是多余的出事的时候它就是救命稻草。6. 复扫对不上验证与排查链路6.1 用命令行亲测先确认到底谁还在提供 3DES不要等扫描器自己先测。三条命令基本能定位问题# 测 TLS指定只允许 3DES如果握手成功说明还在协商 openssl s_client -connect 10.0.0.10:443 -tls1_2 -cipher DES-CBC3-SHA # 更全面直接枚举所有套件 nmap -p 443 --script ssl-enum-ciphers 10.0.0.10 # 测 SSH nmap -p 22 --script ssh2-enum-algos 10.0.0.10第一条命令如果返回no ciphers available或者handshake failure说明服务端已经不再提供这个套件整改到位。如果它正常握手并打印出了证书信息说明 3DES 还在。第二条命令的输出会按加密强度分组列出来找有没有3DES字样最快。6.2 扫描结果对不上的六个常见原因改完配置复扫还是报别急着怀疑配置写错了先按这个顺序排查现象可能原因排查动作命令行测通了扫描器还报服务没 reload老进程仍在跑ps -ef | grep nginx看 worker 启动时间报的是同一个域名但不同 IPDNS 轮询到其他节点dig或nslookup确认解析结果443 修好了还报同一个 IP22 端口 SSH 的 3des-cbc 没禁单独测 22 端口换端口仍然报8443、9443 等其他监听端口ss -lntp全量核对只有一个server块修了其他server块覆盖了全局配置nginx -T看完整配置改完立刻复扫扫描器侧有缓存等半小时或者换扫描节点我遇到最多的是第二条和第三条。尤其是 DNS 轮询负载均衡后面挂着三台机器只修了一台扫描器每次解析到的 IP 不一样结果就是时好时坏很容易误判成配置没生效。6.3 3DES 之外还会被点名的几项一次性处理掉处理 3DES 的时候顺手看一眼报告这几项通常是一起出现的一起改比来回扫省事TLS 1.0 / 1.1 支持直接关掉只留 1.2 和 1.3。前提是确认没有只支持老协议的老客户端。RC4 套件在 cipher 列表里加!RC4。证书 SHA1 签名需要重新签发证书周期长建议提前排期。SSH 的 hmac-md5 / hmac-sha1在sshd_config的MACs里排除。DH 参数小于 2048 位重新生成 DH 参数文件openssl dhparam -out dhparam.pem 2048这个生成过程很慢2048 位在低配机器上可能要跑十几分钟别以为是卡死了。提示openssl dhparam生成 DH 参数时可以加-dsaparam提速代价是灵活度略降。对大部分场景够用我在测试环境常用这个技巧。7. 特殊环境的处理国产化平台、容器与混合环境7.1 国产化操作系统上别急着源码覆盖在银河麒麟、统信 UOS 这类国产化平台上我的第一原则是优先走官方源。这些系统自带 openssl 大多已经是 1.1.1 系列或者发行方已经针对这类漏洞打过补丁包版本号看起来没变但代码里已经改过。先执行yum update openssl openssl-libs或者apt update apt upgrade openssl libssl1.1很多情况下扫描就过了。如果官方源确实没得升再考虑源码编译但依然要装到/usr/local下不要覆盖系统库。国产化平台上还有一个额外注意点部分系统的包管理器对文件校验比较严格如果你手工替换了被 RPM 管理的文件后续yum update会直接报冲突得先rpm -Va找出被改动的文件再逐个处理。这类平台的架构也更多样ARM64、MIPS、LoongArch 都有编译前确认一下 gcc 和 make 在该架构上能不能正常工作。7.2 容器镜像里的 openssl 不要进容器手改镜像里改文件是没意义的容器重建就丢了。正确做法是在 Dockerfile 层面处理FROM ubuntu:20.04 RUN apt-get update \ apt-get install -y --no-install-recommends openssl libssl1.1 \ rm -rf /var/lib/apt/lists/*如果基础镜像本身带的就是老版本且源里升不上去那就得换基础镜像或者自己基于openssl源码编一个新镜像。涉及到scratch之类的极简基础镜像替换动态库时要特别小心因为里面没有包管理器出问题只能靠重新构建。还有一个容易忽略的点有些项目用的是 multistage build编译阶段用了一个带老 openssl 的构建镜像虽然运行阶段是新镜像但编译阶段生成的二进制可能带着老库的链接信息。检查方式是构建完之后在运行镜像里执行ldd看一眼实际链接情况别只看 Dockerfile 就下结论。7.3 Windows 侧和动不了的老业务怎么处理混合环境里Windows 服务器同样会被扫出这个漏洞但处理方式完全不同走的是注册表。位置在HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002下面的Functions值把里面的TLS_RSA_WITH_3DES_EDE_CBC_SHA条目删掉然后重启生效。改注册表前一定要导出备份这个键删错了会影响整个系统的 TLS 协商。至于那些动不了的老业务系统——比如只能在特定老版本环境下跑、上游厂商已经停止支持的设备——我的处理经验是做隔离而不是做降级。具体做法是给这些设备单独开一个内部入口只允许指定的源 IP 访问外面套一层访问控制和网络层面的限制不要把整个站点的 cipher 列表都放宽。整站放宽等于为了两三个老设备牺牲所有用户的连接安全性这个交易不划算。到最后再分享一个小技巧改完这些配置之后除了用 nmap 和 s_client 自测还可以拿几个真实的客户端做一次冒烟测试——老版本的 Java 客户端、系统自带的 curl、手机浏览器各来一次。因为扫描器只关心套件列表而真实客户端关心的是握手能不能成功。我踩过一次坑配置改完扫描全绿结果某个内部系统用的老 Java 客户端连不上因为它的密码套件列表里只剩 3DES。扫描器和真实业务这两件事得分开验证。
返回列表