
badkeys v0.0.20
用于发现加密公钥中常见漏洞的工具
badkeys
用于检查加密公钥已知漏洞的工具和库
是什么?
badkeys 检查各种格式的公钥是否存在已知漏洞。网页版可在 badkeys.info 找到。
安装
badkeys 可以通过 pip 安装:
pip3 install badkeys
你可能想使用虚拟环境。有关不同安装选项的详细信息,请 查阅官方 Python 文档。或者,你也可以直接从 git 仓库调用 ./badkeys-cli。
你可以在 Repology 上找到 Linux 发行版和其他操作系统的 badkeys 软件包概览。
用法
在使用 badkeys 之前,你需要下载黑名单数据:
badkeys --update-bl
之后,你可以调用 badkeys 并将包含加密公钥的文件作为参数传递:
badkeys test.crt my.key
它会自动尝试检测文件格式。支持 PEM 格式(包括 PKCS #1 和 PKCS #8)的公钥和私钥、X.509 证书、证书签名请求(CSR)以及 SSH 公钥。你可以在 tests/data 目录下找到一些测试密钥。
默认情况下,badkeys 只会输出有关易受攻击密钥的信息,这意味着如果未发现漏洞,则不会产生任何输出。使用 -a 参数可以为所有密钥生成输出。
命令行工具在扫描密钥、未发生错误且未检测到漏洞时返回 0。应用程序错误返回 1,如果任何输入无法扫描(解析错误、不支持的密钥类型、不包含密钥的文件)则返回 2,如果发现易受攻击的密钥则返回 4。返回码可以组合成位掩码。(例如,2|4=6 表示某些密钥存在漏洞,某些密钥无法扫描。)
扫描
badkeys 可以扫描 SSH 和 TLS 主机并自动检查其公钥。这可以通过参数 -s(SSH)和 -t(TLS)启用。默认情况下,SSH 扫描端口 22,TLS 扫描多个常用协议端口(https/443、smtps/465、ldaps/636、ftps/990、imaps/993、pop3s/995 以及通常用作非标准 https 端口的 8443)。
可以使用 --tls-ports 和 --ssh-ports 配置替代端口。
TLS 和 SSH 扫描可以结合使用:
badkeys -ts example.org
请注意,扫描模式存在局限性。通常更可取的做法是使用其他工具收集 TLS/SSH 密钥,然后使用 badkeys 在本地扫描。
SSH 扫描需要 paramiko 作为额外依赖项。
TLS 扫描无法检测到同一主机上的多个证书(例如 ECDSA 和 RSA)。这是 Python 的 ssl.get_server_certificate() 函数的限制。
Python 模块和 API
badkeys 也可以用作 Python 模块。然而,目前该软件处于测试阶段,API 可能会频繁更改。
关于
badkeys 由 Hanno Böck 编写。
这项工作最初于 2022 年由 Industriens Fond 通过 CIDI 项目(丹麦工业中的网络安全物联网)以及 哥本哈根 IT 大学信息安全与信任中心(CISAT) 资助。在 2025/2026 年,badkeys 获得了 NLnet 的 NGI0 Core Fund 支持。