
sslscan v2.2.3
快速 SSL/TLS 扫描器,可发现支持的加密套件、协议和漏洞(Heartbleed、POODLE、CRIME),并包含证书链分析和密钥交换枚举。
sslscan2
sslscan 版本 2 现已发布。这包括对后端扫描代码的重大重写,这意味着许多检查不再依赖于 OpenSSL 的版本。这使得无论系统编译时使用的 OpenSSL 版本如何,都可以支持旧协议(SSLv2 和 SSLv3)以及 TLSv1.3。
这主要归功于 jtesta 的工作,他负责了大部分后端重写。
其他关键变化包括:
- 枚举服务器密钥交换组。
- 枚举服务器签名算法。
- 支持扫描 SSLv2 和 SSLv3 协议,但不扫描单个加密套件。
- 包含使用 Docker 的测试套件,以验证 sslscan 功能正确。
- 移除了
--http选项,因为它已损坏且最初使用率很低。 - 支持新的后量子组。
XML 输出变化
在版本 2.0.0-beta4 中,对 XML 输出进行了一项可能带来破坏性变更的修改。以前,可能会返回多个 <certificate> 元素(默认返回一个,如果使用了 --show-certificate 则返回第二个)。
关键变化是:
- 新增一个父元素
<certificates>,它将包含<certificate>元素。 <certificate>元素有一个新的type属性,其值可以是:short用于默认输出。full用于使用--show-certificate时。
- 对于具有多个具有不同签名算法的证书的服务器,可能会返回每种类型的一个以上证书(参见 issue #208 中的讨论)。
<certificate>元素中的<signature-algorithm>元素不再包含 "Signature Algorithm:" 前缀,也不再包含空格和换行。
如果您正在使用 XML 输出,那么您可能需要修改解析器。
README
这是 rbsec ([email protected]) 对 ioerror 版本的 sslscan 的一个分支(ioerror 版本的原始 README 包含在下文)。关键变更如下:
- 在输出中高亮 SSLv2 和 SSLv3 加密套件。
- 高亮 SSLv3 中的 CBC 加密套件(POODLE)。
- 在输出中高亮 3DES 和 RC4 加密套件。
- 在输出中将 PFS+GCM 加密套件标记为良好。
- 在输出中高亮 NULL(0 位)、弱(<40 位)和中(40 < n <= 56)加密套件。
- 在输出中高亮匿名(ADH 和 AECDH)加密套件(紫色)。
- 默认隐藏证书信息(使用
--show-certificate显示)。 - 默认隐藏被拒绝的加密套件(使用
--failed显示)。 - 添加对 TLSv1.1、TLSv1.2 和 TLSv1.3 的支持。
- 支持 IPv6(可以使用
--ipv6强制)。 - 检查 TLS 压缩(CRIME,使用
--no-compression禁用)。 - 禁用加密套件检查
--no-ciphersuites。 - 禁用彩色输出
--no-colour。 - 移除了未记录的 -p 输出选项。
- 添加了对 OpenSSL HeartBleed(CVE-2014-0160,使用
--no-heartbleed禁用)的检查。 - 标记使用 MD5 或 SHA-1 签名,或使用短 RSA 密钥(<2048 位)的证书。
- 支持使用
--rdp扫描 RDP 服务器(感谢 skettler)。 - 添加了指定 socket 超时时间的选项。
- 添加了静态编译的选项(感谢 dmke)。
- 添加了
--sleep选项以在请求之间暂停。 - 仅显示指定检查的输出(
--no-preferred)。 - 确定客户端证书可接受的 CA 列表(
--show-client-cas)。 - 实验性的 OS X 构建支持(感谢 MikeSchroll)。
- 标记一些自签名 SSL 证书。
- 实验性的 Windows 支持(感谢 jtesta)。
- 在 OpenSSL >= 1.0.2 下显示 EC 曲线名称和 DHE 密钥长度(
--no-cipher-details)。 - 在 OpenSSL >= 1.0.2 下标记弱 DHE 密钥(
--cipher-details)。 - 标记过期证书。
- 在输出中将 TLSv1.0 和 TLSv1.1 协议标记为弱。
- 实验性的 OS X 支持(仅静态构建)。
- 支持扫描 PostgreSQL 服务器(感谢 nuxi)。
- 检查 TLS Fallback SCSV 支持。
- 添加了对 LDAP 的 StartTLS 支持(
--starttls-ldap)。 - 添加了 SNI 支持(
--sni-name)(感谢 Ken)。 - 支持 MySQL 的 STARTTLS(感谢 bk2017)。
- 检查支持的密钥交换组。
- 检查支持的服务器签名算法。
- 显示 IANA/RFC 加密套件名称(
--iana-names)。 - 显示完整的证书链(
--show-certificates)。
在 Linux 上构建
建议忽略系统 OpenSSL 安装,并静态链接您自己的版本。虽然这会导致 sslscan 二进制文件占用更多资源(文件大小、内存消耗等),但这允许进行一些额外的检查,例如 TLS 压缩。请注意,从 sslscan 2.2.0 版本开始,sslscan 所需的最低 OpenSSL 版本是 3.5.0 (LTS),因此如果您的发行版带有旧版本,则无法针对它进行构建,您必须进行静态构建。
要编译自己的 OpenSSL 版本,您可能需要安装 OpenSSL 构建依赖项。以下命令可用于在 Debian 上执行此操作。
apt install git zlib1g-dev make gcc
然后运行
make static
这将克隆 OpenSSL 仓库,并在编译 sslscan 之前配置/编译/测试 OpenSSL。
请注意: 默认情况下,OpenSSL 使用 gcc 编译,没有进一步的自定义。要使用 clang 编译,请使用以下命令安装构建依赖项。
apt install git zlib1g-dev make clang
然后运行
make static CC=clang
您可以通过检查 sslscan --version 列出的版本是否带有 -static 后缀,来验证您是否拥有静态链接的 OpenSSL 版本。
使用 Docker 构建
确保您的本地 Docker 安装功能正常,然后使用以下命令构建容器:
make docker
或手动使用:
docker build -t sslscan:sslscan .
然后您可以使用以下命令运行 sslscan:
docker run --rm -ti sslscan:sslscan --help
在 Windows 上构建
感谢 jtesta 的补丁,sslscan 现在可以在 Windows 上编译。这可以通过本地编译或从 Linux 交叉编译来完成。请参阅 INSTALL 文件中的说明。
请注意,sslscan 最初是为 Linux 编写的,并且尚未在 Windows 上广泛测试。因此,Windows 版本应被视为实验性版本。
预构建的交叉编译 Windows 二进制文件可在 GitHub Releases 页面 上找到。
在 macOS(原名 OS X)上构建
有实验性的支持在 macOS(原名 OS X)上进行静态构建,但这应被视为不受支持。您可能需要安装从源码编译 OpenSSL 所需的任何依赖项。完成后,只需运行:
make static
原始 (ioerror) README
这是 sslscan.c 的一个分支,以便更好地支持 STARTTLS。
sslscan 的原始主页是:
http://www.titania.co.uk
sslscan 最初由以下人员编写:
Ian Ventura-Whiting
此分支的当前主页(直到上游合并完成的补丁)是:
http://www.github.com/ioerror/sslscan
大部分 TLS 之前的协议设置灵感来自 OpenSSL 的 s_client.c 程序。此分支的目标是在 STARTTLS 设置完善后最终与原始项目合并。
部分 OpenSSL 设置代码来自 Tor Project 的 Tor 程序。因此,遵守 BSD 许可证可能是合适的,声明为: Copyright (c) 2007-2010, The Tor Project, Inc.