3个不稳定版本
0.1.1 | 2022年2月17日 |
---|---|
0.1.0 | 2022年2月17日 |
0.0.1 | 2021年9月13日 |
#840 in 密码学
用于 ca_injector
220KB
5.5K SLoC
Coyote: 一个ACME工具包
Coyote 允许您创建 ACME 服务器,但无法保证它们不会在您面前爆炸。您必须自己编写代码来实现。
coyote 旨在解决一些问题(以下并非所有问题都已解决;请参阅下面的“任务列表”)
- 通过 Rust 的存储实现特性提供您喜欢的后端存储来支持 ACME
- 在非合规场景中提供 ACME(例如,在企业防火墙后面)
- 提供具有对验证系统钩子的 ACME 服务,因此您可以以任何您喜欢的方式实现验证。
- 这是一个库;您可以根据需要将其做得尽可能大或小。无需多个实现。
- 一个开源替代方案,用于 letsencrypt 的标准实现,并且也针对 LE 的测试套件进行了测试。
acmed
是 coyote 中的示例;它是一个针对 PostgreSQL 后端存储的完整标准实现。它(故意)允许所有挑战通过,并不适用于生产使用。
coyote
的目的是让您在不使用 acmed
的前提下构建 ACME 服务,利用此库中可用的特性和工具进行脚手架搭建。例如,实现基于 Redis 的 nonce 验证系统的努力将只是一个特性实现,即使它尚未存在于本库中。
运行 acmed
acmed 是 coyote 的一个非常小的示例实现,旨在演示其使用方法。它不打算或设计用于生产环境。它无法正确执行挑战,允许所有进入的挑战通过。
您需要 docker
来启动 postgres 实例。使用 certbot
进行测试时,plain HTTP 与 certbot
一起使用效果更好,因此您无需修改 root 权限;如果您想使用 caddy
或其他 ACME 客户端,则需要使用启用 HTTPS 的服务,请参阅下面的“TLS”。
启动
$ make postgres
$ cargo run --example acmed
它将在 http://127.0.0.1:8000
上启动一个服务,然后您可以将它作为 --server
标志传递给 certbot
,例如。
certbot --server 'http://127.0.0.1:8000' certonly --standalone -d 'foo.com' -m '[email protected]' --agree-tos
运行 acmed-tls
我们提供了TLS示例作为acmed-tls;只需提供HOSTNAME
来设置TLS服务的域名;否则默认为localhost
。在您运行cargo
命令的目录中,将生成CA证书ca.pem
和私钥ca.key
,您需要将这些证书传递给客户端。另外,还会生成一个用于服务acmed
实例的TLS内存证书。它将在https://${HOSTNAME}:8000
上启动服务,您可以将它作为caddy中的acme_ca
全局指令传递。
否则,使用方式相同。
访问数据库
要访问acmed
运行的postgres实例(由make postgres
提供)
psql -U postgres -h localhost coyote
测试
运行测试需要docker
。测试在5900X处理器上大约需要70秒,大部分测试运行时间都使用了24个线程。请注意它们所需的时间,尤其是在较慢的系统上运行时。
cargo test
任务列表
JOSE/ACME协议
- JWS解码;serde编解码器(在中间件中处理)
- JWK转换为openssl类型;签名和验证
- 完整的验证和非ces生成
- ACME受保护头部的完整验证(在中间件中)
- RFC7807 "问题细节" HTTP错误返回值
- ACME结构体的各种验证编解码器
- 可能:速率限制(参见RFC8555的6.6),但可能稍后
- 将常用的第三方ACME客户端集成到测试中
处理器
- Nonce处理器
- Nonce中间件
- 账户(RFC8555 7.3)
- 处理器
- 新账户
- 查找账户
- 注销
- 处理器
- 订单(RFC8555 7.4)
- 挑战特质
- HTTP基本实现:用于certbot测试
- 可能:DNS基本实现;请参阅下文“其他关注点”
- 处理器
- 授权请求
- 获取挑战
- 启动挑战
- 停用挑战
- 挑战状态
- 最终化
- 获取证书
- 撤销证书
- 挑战特质
- 其他关注点
- 密钥更改(
/key-change
端点,请参阅RFC8555 7.3.5) - 找到一个良好的解决方案来解决DNS挑战(可能是
trust-dns-client
)
- 密钥更改(
存储
- 数据库层
- PostgreSQL实现
- Nonce存储
- 账户存储
- 订单信息/状态机存储
- 证书存储
- 静态加密
Coyote目前不处理的事项
这些是我们最初目标之外的事项,我们认为它们不是更高优先级的项目。我们愿意接受此功能的拉取请求。
- 账户
- 服务条款变更
- 外部账户绑定
许可证
本软件受BSD-3-Clause许可证的保护。有关详细信息,请参阅LICENSE.txt。
依赖关系
~26–40MB
~746K SLoC