网络安全应用安全CLI漏洞扫描【免费下载链接】testssl.shTesting TLS/SSL encryption anywhere on any port项目地址https://gitcode.com/gh_mirrors/te/testssl.sh点击查看免费下载导读本文围绕 testssl.sh 仓库中 bin/Readme.md 展开系统讲解bin/目录下三份预编译 OpenSSL 二进制openssl.Linux.x86_64、openssl.Darwin.x86_64、openssl.FreeBSD.amd64的定位、由来、能力边界与安全注意事项。你将理解为什么测试 TLS/SSL 时需要一个故意留后门的 OpenSSL 版本它与现代发行版自带 OpenSSL 的差异testssl.sh 如何自动发现并选用它find_openssl_binary查找链与OPENSSL环境变量以及何时其实根本不需要它——因为 testssl.sh 的 bash sockets 已经能覆盖绝大多数弱加密场景。这些二进制是什么为测出服务器有多烂而生的 OpenSSLtestssl.sh 的目标是在任何端口测试任意位置的 TLS/SSL 加密而要完整评估一台服务器的安全性恰恰需要先探测它是否还在使用各种已废弃、弱或危险的加密特性。现代操作系统自带的 OpenSSL 出于安全考虑在编译时或源码层面就禁用了 SSLv2、SSLv3、export/ANON 密码套件、弱 DH 参数、弱椭圆曲线等脏特性——你无法在运行时重新打开它们。bin/目录下的预编译二进制正是为了解决这一问题它们基于OpenSSL 1.0.2 的修改版快照openssl-1.0.2.bad编译而来在 Peter Mosman 的 openssl fork 基础上追加了少量补丁保留了全部弱加密支持让安全测试人员可以验证目标服务器是否仍暴露在这些危险特性之下。从仓库内容可以确认的实际文件包括bin/openssl.Linux.x86_64Linux x86_64 静态链接二进制bin/openssl.Darwin.x86_64macOS x86_64 二进制bin/openssl.FreeBSD.amd64FreeBSD amd64 二进制bin/openssl-Vall.txtciphers -V ALL:COMPLEMENTOFALL的完整输出实录179 个密码套件bin/OPENSSL-LICENSE.txtOpenSSL 许可证文本扩展的弱加密能力清单根据 bin/Readme.md 的说明这些二进制相比官方 OpenSSL/LibreSSL 额外支持类别具体内容低强度密钥40 位、56 位密码套件导出级密码export / ANON匿名密码套件弱 DH弱 DH 参数与相关 DHE 套件弱 EC 曲线弱椭圆曲线套件老协议SSLv2 等官方分支之外的高级套件旧版 CHACHA20POLY1305、CAMELLIA 256 位密码套件这一点可以在 bin/openssl-Vall.txt 得到实证文件记录了./openssl.Linux.x86_64 ciphers -V ALL:COMPLEMENTOFALL的 179 行输出其中包含SSLv2套件如0x05,0x00,0x80 - IDEA-CBC-MD5、0x01,0x00,0x80 - RC4-MD5、EXP-*导出级套件如EXP-RC4-MD5、EXP-DES-CBC-SHA均为 40 位 export、ADH-*匿名 DH 套件、AECDH-*匿名 ECDH 套件、NULL-*空加密套件以及ECDHE-*-CHACHA20-POLY1305-OLD旧版 CHACHA20POLY1305等。该文件同时记录了openssl version -a的输出OpenSSL 1.0.2-chacha (1.0.2i-dev) built on: Wed Jun 22 19:32:29 2016 platform: linux-x86_64以及file的鉴定结果ELF 64-bit LSB executable, x86-64, statically linked, ..., stripped确认它是静态链接且经过 strip 的 Linux 可执行文件。最重要的安全警告切勿用于生产环境bin/Readme.md 开篇即以醒目方式强调DO NOT USE THESE BINARIES FOR PRODUCTION PURPOSES至少不要在服务端使用。因为大量安全限制已被移除我们想要测试的是服务器到底有多糟糕。这一点必须放在最前面理解这些二进制刻意移除了安全限制例如保留 SSLv2/SSLv3、export 密码、空加密NULL套件等。它们是测试武器不是运行基础设施的工具。任何把这类二进制部署到生产服务端的做法都会带来严重风险。其定位与testssl.sh主程序一致——只用于诊断与验证绝不用于对外提供服务。二进制的来源与构建上游血统bin/目录下的已 strip二进制全部编译自testssl 维护的 openssl-1.0.2.bad 快照该 fork 在 Peter Mosman 的 openssl fork 基础上追加了少量功能IPv6 支持IPv6 proxy 除外部分 STARTTLS backport截至文档撰写时已修复若干 CVE仓库内可佐证的线索包括testssl.sh 的 FAQ.md 中将这类二进制称为 OpenSSL-bad version并给出了直接调用示例OPENSSL_CONF ./bin/openssl.Linux.x86_64 s_client -connect host:port同时指出该版本 SSLv2/SSLv3 已启用且包含更多坏东西但不支持 TLS 1.3也不支持现代椭圆曲线详见后文能力边界。编译方式bin/Readme.md 将具体编译步骤指向 openssl-1.0.2.bad 仓库中的00-testssl-stuff/Readme.md本文不展开外部链接编译细节请以该 fork 仓库为准。编译产物的典型形态可以从 bin/openssl-Vall.txt 的version -a输出观察到编译选项包含-static、-DOPENSSL_USE_IPV6以及一系列 x86_64 汇编加速宏BN_ASM_MONT5、AES_ASM、SHA*_ASM、GHASH_ASM等。分发与平台当前仓库保留了Linux x86_64、Darwin x86_64、FreeBSD amd64三份二进制。根据 bin/Readme.md历史版本还曾包含Kerberos 二进制和 32 位二进制在最新版本中已被移除更多架构的未 strip二进制可从 testssl.sh 网站的 contributed binaries 页面获取贡献者清单见仓库根目录的 CREDITS.md。testssl.sh 如何找到并使用这些二进制这些二进制不是孤立存在的testssl.sh 主程序会按一套明确优先级自动发现可用的 OpenSSL 二进制。对应实现位于 testssl.sh 的find_openssl_binary()约 L21285 起与test_openssl_suffix()约 L21262 起二进制命名规则test_openssl_suffix()依次尝试以下命名形态$1为候选目录$1/openssl$1/openssl.$(uname).$(uname -m)例如bin/openssl.Linux.x86_64、bin/openssl.Darwin.x86_64$1/openssl.$(uname -m)例如openssl.x86_64$1/openssl$(32|64)按架构位数拼接这与 utils/00_unittest_baseline.sh 中的用法一致OPENSSLbin/openssl.$(uname).$(uname -m)也解释了为什么bin/下的文件必须按openssl.OS.arch命名才能被自动识别。查找优先级链find_openssl_binary()按以下顺序解析OPENSSL变量源码中标注为 05 号步骤环境变量若OPENSSL已设置且可执行直接使用若设置了但不可执行则给出警告并继续寻找。WSL 特例仅当位于 Bash on Windows检测到/mnt/c/Windows/System32/bash.exe时直接使用系统二进制。在testssl.sh 安装目录下按命名规则查找。在$TESTSSL_INSTALL_DIR/bin下查找——这正是bin/openssl.*被命中的路径源码注释称之为未来的标准、平台无关路径。回退到$PATH中的系统 openssl。如果最终仍找不到fatal cannot exec or find any openssl binary会终止运行。此外若系统 openssl.cnf 无法被该二进制解析源码中引用了 issue #1982testssl.sh 会切换到仓库自带的 etc/openssl.cnf 重试。命令行覆盖方式用户可以在运行 testssl.sh 时通过命令行或环境变量强制指定二进制testssl.sh --openssl /usr/bin/openssl URI OPENSSL/usr/bin/openssl testssl.sh URI WIDEtrue OPENSSL/usr/bin/openssl testssl.sh --starttlssmtp URI依据 doc/testssl.1.mdL138--openssl path会优先在 testssl.sh 所在目录树、启动目录等处尽力查找指定二进制失败后回退到系统$PATH中的 openssl命令行优先级高于环境变量。手册同时提示针对现代服务器选择与目标在密码套件/协议上有更大重叠的 OpenSSL 版本可能更快OpenSSL 3.x 通常比旧版本快详见下文速度对比。与系统 OpenSSL 的协同值得一提的机制testssl.sh 并非从头到尾只用一份二进制。对现代服务器如果bin/中的旧二进制如openssl.Linux.x86_64不支持某个新特性例如 X25519testssl.sh 会透明地切换到系统 OpenSSL。测试基线中甚至有专门的对比测试 t/12_diff_opensslversions.t注释提到~/bin/openssl.Linux.x86_64与系统版本的结果差异以及 t/21_baseline_starttls.t明确说明 MacOS silicon 没有openssl.Darwin.arm64二进制因此改用系统 openssl。此外 t/32_isHTML_valid.t 特意选择/usr/bin/openssl以避免旧二进制的调试提示。使用这些二进制时的考量bin/Readme.md 以Considerations regarding binaries一节专门讨论了是否还需要它们的问题核心结论是在现代 testssl.sh 中这些二进制大多数时候已经没有必要。背景bash sockets 已覆盖弱加密testssl.sh 诞生较早那时二进制是测试弱加密的主要手段。但现在当厂商自带的二进制无法处理弱加密时testssl.sh 会改用自实现的 bash sockets来完成对应探测因此弱加密检测不再依赖这些旧二进制。文档明确指出在未来的某个版本中这些二进制可能被退役因为它们不再带来总体收益同时 glibc 静态链接也不再像过去那样完美。速度对比bin/Readme.md 给出了一份实测对比在一台还算强劲的 8 核 Linux 系统上对若干公开服务器与一台内部旧系统分别使用自带二进制与/usr/bin/openssl做默认扫描的耗时秒多次运行取多组值目标服务器说明自带 openssl 耗时 [s]/usr/bin/openssl 耗时 [s]testssl.shTLS 1.0 - 1.3104, 77, 88, 97106, 100, 95, 98testssl.net无 RSA 密码TLS ≥ 1.279, 76, 85, 8073, 66, (107), 72heise.de无 TLS 1.0102, 95, 10498, 95, 99owasp.orgTLS ≥ 1.285, 96, 10588, 97, 98易受攻击的旧系统SSLv3 - TLS 1.2100, 104, 103134, 138, 141文档给出的解读是选用哪个二进制对总体耗时影响不大。即便对同一目标多次运行的标准差都可能比两个二进制之间的差异更大唯一例外是最后一行内部旧系统其系统 openssl 明显更慢而跨目标比较耗时还取决于服务器提供的密码套件、漏洞面等。也就是说换一个二进制就更快通常是一种错觉除非目标恰好与某版本 OpenSSL 的能力重合度更高如手册中关于--openssl的提示。能力边界这些旧二进制存在明确的现代性短板不支持 TLS 1.3缺少较新的 TLS 1.2 密码套件如 X25519、现代 AEAD 组合作为补偿它们完整支持SSLv2 到 TLS 1.2而这恰恰是官方分支缺失的。文档同时指出截至 2024/2025 年多数发行版/厂商仍以 TLS 1.0 / TLS 1.1 支持较弱加密多数甚至仍支持 SSLv3——这些场景 testssl.sh 通过自身 tweaks 即可应对因此通常并不需要 bin/ 中的旧二进制。FAQ.md 亦印证SSLv2/SSLv3 这类无法用别的方式测出的坏密码学正是这类二进制仅存的用武之地且其 TLS 1.3/现代曲线缺失会被 testssl.sh 透明地补偿bash sockets 或自动切换到新版 OpenSSL。实战用法示例1. 直接调用二进制测试弱密码想绕过系统 OpenSSL 的限制、以弱密码连接目标仅限测试环境可直接执行OPENSSL_CONF ./bin/openssl.Linux.x86_64 s_client -connect host:port示例源自 FAQ.md设置OPENSSL_CONF是为了避免加载可能禁用弱特性的配置。2. 枚举二进制支持的全部密码套件./bin/openssl.Linux.x86_64 ciphers -V ALL:COMPLEMENTOFALLbin/openssl-Vall.txt 给出了这条命令的完整 179 行输出可用于核对各类弱套件是否存在例如0xCC,0x14 - ECDHE-ECDSA-CHACHA20-POLY1305-OLD TLSv1.2 ... 0x00,0x03 - EXP-RC4-MD5 SSLv3 ... export 0x00,0x1A - ADH-DES-CBC-SHA SSLv3 ... AuNone 0x05,0x00,0x80 - IDEA-CBC-MD5 SSLv2 ... 0x00,0x01 - NULL-MD5 SSLv3 ...仓库内 utils/parse_client_ciphers.pl 也演示了如何以../bin/openssl.Linux.x86_64 ciphers -V ALL:COMPLEMENTOFALL:STRENGTH的输出来解析套件列表。3. 让 testssl.sh 自动使用它们无需任何参数只要按openssl.$(uname).$(uname -m)命名并放在bin/下testssl.sh 即会在find_openssl_binary()的第 4 步命中。若希望强制覆盖用--openssl或OPENSSL环境变量即可详见上文。小结bin/目录的预编译 OpenSSL 二进制是 testssl.sh 生态中一个为测试而保留坏特性的特殊组件它们以 OpenSSL 1.0.2 修改版为基础保留了 SSLv2、export/ANON、弱 DH/弱曲线、40/56 位密码及旧版 CHACHA20POLY1305、CAMELLIA 256 等官方分支早已移除的能力用于验证服务器是否仍暴露于这些危险特性。使用时务必牢记其非生产定位而在现代 testssl.sh 中由于 bash sockets 已覆盖绝大多数弱加密探测这些二进制通常只是锦上添花甚至可能在后续版本中被退役。理解它们的来源、命名规则与查找链find_openssl_binary/test_openssl_suffix能帮助你准确判断何时值得手动指定二进制--openssl/OPENSSL何时直接依赖 testssl.sh 的默认行为即可。延伸阅读仓库内本主题官方文档bin/Readme.md主程序二进制发现逻辑testssl.shfind_openssl_binary()与test_openssl_suffix()二进制能力实录bin/openssl-Vall.txt命令行手册doc/testssl.1.md--openssl选项相关 FAQFAQ.md版本对比测试t/12_diff_opensslversions.t、t/21_baseline_starttls.t上游 fork 说明与贡献者CREDITS.md赞分享网络安全应用安全CLI漏洞扫描【免费下载链接】testssl.shTesting TLS/SSL encryption anywhere on any port项目地址https://gitcode.com/gh_mirrors/te/testssl.sh点击查看免费下载相关推荐RVC 变声器指南10 分钟语音数据训练出可用 AI 音色模型RVC 变声器指南10 分钟语音数据训练出可用 AI 音色模型 手上只有 10 分钟录音也能把任意歌声或配音换成目标音色。开源语音转换框架 RVC 基于 V人工智能AI 应用语音音频深度学习突破加密边界testssl.sh全面解析QUIC协议测试与部署实践突破加密边界testssl.sh全面解析QUIC协议测试与部署实践 在网络安全领域传输层安全协议的选择直接关系到数据传输的保密性和完整性。testssl.s网络安全应用安全CLI漏洞扫描5步掌握React SaaS主题定制从零打造个性化企业级界面5步掌握React SaaS主题定制从零打造个性化企业级界面 想要快速构建专业SaaS应用却苦于界面设计React SaaS Template为你提供了完美上一篇告别兼容噩梦PHP 7到PHP 8的ramsey/uuid无缝迁移指南下一篇Prism未来功能开发者投票结果创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?