返回更新列表
新发布Aug 21, 2026

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 支持

分类