在任何端口上随时随地测试TLS/SSL加密
根据作者的说法testssl.sh是一个免费的命令行工具,它检查服务器在任何端口上的服务是否支持TLS/SSL密码、协议以及一些加密缺陷。在测试https上的一些内容工具是非常方便的
主要特点
•清晰的输出:你可以很容易地判断出任何东西是好是坏。
•机器可读输出(CSV,两种JSON格式)
•无需安装或配置某些东西。没有宝石、CPAN、pip等。
•开箱即用:Linux、OSX/Darwin、FreeBSD、NetBSD、MSYS2/Cygwin、WSL(Windows上的bash)。只有OpenBSD需要bash。
•提供了一个Dockerfile,还有一个官方的容器build@dockerhub。
•灵活性:您可以测试任何启用SSL/TLS和STARTTLS的服务,而不仅仅是端口443的Web服务器。
•工具箱:几个命令行选项可帮助您运行测试和配置输出。
•可靠性:功能经过彻底测试。
•隐私:只有你看到结果,而不是第三方。
•自由:它是100%开源的。您可以查看代码,看看发生了什么。
安装
因为脚本运行是bash,所以需先准备一个linux环境,然后用下列命令下载sh脚本
git clone --depth 1 https://github.com/drwetter/testssl.sh.git
下载完后就可以直接用./testssl.sh
来运行
由于现在应为docker镜像被ban了,现在下载镜像在"没配置"的机器上下载很麻烦,如果有需求的师傅可以前往项目页面查找下载的方式GitHub - drwetter/testssl.sh: Testing TLS/SSL encryption anywhere on any port
运行
下载完成后就可以直接执行了
我常用的参数是 -p -U
./testssl.sh -p -U https://baidu.com
-p是测试TLS/SSL的协议
-U是测试所有漏洞
"testssl.sh [选项] <URI>" 或者 "testssl.sh <选项>"
"testssl.sh <选项>", 其中 <选项> 通常是独立的,且为以下之一:
--help 显示你现在看到的帮助信息
-b, --banner 显示 testssl.sh 的横幅和版本信息
-v, --version 与前一个选项相同
-V, --local [pattern] 美化输出所有本地加密套件(仅限 openssl)。如果提供了搜索模式:它是一个忽略大小写的字模式、加密套件的十六进制代码或其他在名称、kx 或比特数中的字符串
"testssl.sh [选项] <URI>", 其中 <URI> 为:
<URI> 主机|主机:端口|URL|URL:端口 默认端口为 443,URL 只能使用 HTTPS 协议
而 [选项] 为:
-t, --starttls <协议> 针对启用 STARTTLS 的服务运行测试,支持的协议有:ftp、smtp、lmtp、pop3、imap、sieve、xmpp、xmpp-server、telnet、ldap、nntp、postgres、mysql
--xmpphost <目标域名> 对于 STARTTLS xmpp 或 xmpp-server 检查,它提供域名(如同 SNI)
--mx <域名/主机> 测试从高到低优先级的 MX 记录(STARTTLS,端口 25)
--file/-iL <文件名> 批量测试选项:从 <文件名> 读取每行 testssl.sh 命令。可以与 --serial 或 --parallel 配合使用。默认启用 "--warnings batch"。
文本格式 1:允许通过 # 注释,EOF 表示 <文件名> 结束
文本格式 2:nmap 输出的 greppable 格式 (-oG),每行仅允许 1 个端口
--mode <serial|parallel> 批量测试可以是串行(默认)或并行(--parallel 是后者的快捷方式)
--warnings <batch|off> "batch" 在遇到测试错误时不继续,off 则继续并跳过警告
--connect-timeout <秒数> 用于避免挂起。最大等待时间 <秒数>,等待 TCP 套接字连接返回
--openssl-timeout <秒数> 用于避免挂起。最大等待时间 <秒数>,等待 openssl 连接被终止
单一检查(<选项> 作为参数)("testssl.sh URI" 执行所有操作,除了 -E 和 -g):
-e, --each-cipher 检查每个本地加密套件的远程可用性
-E, --cipher-per-proto 按协议检查加密套件
-s, --std, --categories 测试标准加密套件类别(按强度排序)
-f, --fs, --nsa 检查前向保密设置
-p, --protocols 检查 TLS/SSL 协议(包括 SPDY/HTTP2)
-g, --grease 测试多个服务器实现的漏洞,如 GREASE 和大小限制
-S, --server-defaults 显示服务器的默认选择和证书信息
-P, --server-preference 显示服务器选择的协议+加密套件
-x, --single-cipher <模式> 测试匹配的 <模式> 加密套件
(如果 <模式> 不是数字:按词匹配)
-c, --client-simulation 测试客户端模拟,查看哪个客户端与加密套件和协议协商
-h, --header, --headers 测试 HSTS、HPKP、服务器/应用横幅、安全头、Cookie、反向代理、IPv4 地址
-U, --vulnerable 测试所有(以下)漏洞(如果适用)
-H, --heartbleed 测试 Heartbleed 漏洞
-I, --ccs, --ccs-injection 测试 CCS 注入漏洞
-T, --ticketbleed 测试 BigIP 负载均衡器中的 Ticketbleed 漏洞
--BB, --robot 测试 Bleichenbacher's Oracle Threat (ROBOT) 漏洞
--SI, --starttls-injection 测试 STARTTLS 注入问题
-R, --renegotiation 测试重协商漏洞
-C, --compression, --crime 测试 CRIME 漏洞(TLS 压缩问题)
-B, --breach 测试 BREACH 漏洞(HTTP 压缩问题)
-O, --poodle 测试 POODLE(SSL)漏洞
-Z, --tls-fallback 检查 TLS_FALLBACK_SCSV 缓解措施
-W, --sweet32 测试 64 位块加密套件(3DES、RC2 和 IDEA):SWEET32 漏洞
-A, --beast 测试 BEAST 漏洞
-L, --lucky13 测试 LUCKY13
-WS, --winshock 测试 winshock 漏洞
-F, --freak 测试 FREAK 漏洞
-J, --logjam 测试 LOGJAM 漏洞
-D, --drown 测试 DROWN 漏洞
-4, --rc4, --appelbaum 测试提供的 RC4 加密套件
调优/连接选项(大多数也可以通过环境变量设置):
-9, --full 包括对实现漏洞和每协议加密套件的测试(可能会被移除)
--bugs 启用 s_client 的 "-bugs" 选项,例如一些有缺陷的 F5 设备
--assume-http 如果协议检查失败,则假设为 HTTP 协议并强制进行 HTTP 检查
--ssl-native 在通常使用套接字的地方使用 OpenSSL。速度更快,但不准确,尽量避免使用
--openssl <路径> 使用此 openssl 二进制文件(默认:在 $PATH、$RUN_DIR 中查找 testssl.sh)
--proxy <主机:端口|auto> (实验性)通过 <主机:端口> 使用代理连接,auto: 使用 $env 中的值($http(s)_proxy)
-6 还使用 IPv6。仅当支持的 OpenSSL 版本和 IPv6 连接时有效
--ip <ip> a) 测试提供的 <ip> v4 或 v6 地址,而不是解析 URI 中的主机
b) "one" 表示:仅测试 DNS 返回的第一个地址(当有多个 IP 时很有用)
c) "proxy" 表示通过代理解析 DNS。当主机没有 DNS 时需要使用。
-n, --nodns <min|none> 如果 "none":不进行任何 DNS 查询,"min" 查询 A、AAAA 和 MX 记录
--sneaky 减少目标日志中的痕迹:如 User-Agent 和 Referer
--user-agent <user agent> 设置自定义的 User-Agent,而不是默认的 User-Agent
--ids-friendly 跳过可能导致 IDS 阻止扫描 IP 的漏洞检查
--phone-out 允许联系外部服务器进行 CRL 下载和查询 OCSP 响应者
--add-ca <CA 文件|CA 目录> 包含信任检查的 CA 文件路径 <CAdir> 或以逗号分隔的 CA 文件列表
--mtls <客户端证书文件> 指定 PEM 格式的 <客户端证书> 文件,包含未加密的证书密钥(测试版)
--basicauth <用户:密码> 提供 HTTP 基本认证信息
--reqheader <头信息> 添加自定义 HTTP 请求头
输出选项(也可以通过环境变量预设):
--quiet 不输出横幅。通过此操作,你确认已阅读并同意横幅中的使用条款
--wide 扩展输出,适用于像 RC4、BEAST 等测试。FS 也以十六进制显示,包含 kx、强度、RFC 名称
--show-each 在扩展输出中:显示所有测试的加密套件 ------ 而不仅仅是成功的
--mapping <openssl| openssl:使用 OpenSSL 加密套件名称作为主要名称
iana|rfc -> 使用 IANA/(RFC) 加密套件名称作为主要名称
no-openssl| -> 不显示