13 个版本
0.2.0 | 2024 年 5 月 17 日 |
---|---|
0.2.0-alpha.2 | 2024 年 4 月 13 日 |
0.2.0-alpha.1 | 2024 年 3 月 18 日 |
0.1.0 | 2023 年 11 月 24 日 |
0.0.1 | 2022 年 12 月 22 日 |
#376 在 电子邮件
用于 2 crates
310KB
6K SLoC
viadkim
viadkim 库包含 域密钥识别邮件(DKIM)的完整实现。DKIM 规范在 RFC 6376 中。
该库提供了用于签名和验证电子邮件消息的高级 API,以及实现此功能所需使用的低级 API。它是一个基于 Tokio 异步运行时的异步库。
该库是根据 RFC 规范和相关文档从头独立开发的。以下概述的设计目标是指导开发的。
设计目标
viadkim 的目标是提供一个适合长期运行的邮件服务器进程的免费 DKIM 库,具有强大的 RFC 兼容性保证。
特别重要的是,库应该是 高效的。以下是一些值得注意的事项:并发执行公钥记录的 DNS 请求;在可能的情况下绕过或简化消息体处理,同时整个消息不必一次性全部加载到内存中;或者在不同签名评估任务之间共享消息体规范化结果。
同样重要的是 健壮性 和 处理输入的兼容性。值得注意的是,viadkim 完全支持国际化电子邮件。但也透明地处理了实践中出现的格式不良的输入,例如标题中的散乱 Latin 1 字节。通常,所有输入都被优雅地处理,所有输出都应该格式良好。
此外,库的 广泛适用性 是一个目标:为签名和验证过程提供广泛的配置选项,以及产生大量输出数据的选项,应能够实现广泛的 DKIM 使用模式。
最后,严格 遵守 RFC 6376,包括 RFC 更新和勘误表。已提及对国际化电子邮件的支持,但例如,也采用了对支持的签名算法的最新建议,例如添加 ed25519-sha256 并退役 rsa-sha1。
使用方法
这是一个 Rust 库。像往常一样,在 Cargo.toml
中包含 viadkim。
两个结构体提供了使用 viadkim 进行 DKIM 处理的入口点
有关使用说明,请参阅 API 文档。
最低支持的 Rust 版本为 1.67.0。
示例
包含两个简单的命令行工具作为示例,一个用于签名消息,另一个用于验证消息的签名。
程序 dkimsign
为标准输入提供的消息生成 DKIM 签名。它接受三个参数:包含签名密钥的 PKCS#8 PEM 格式密钥文件的路径、域名(d= 标签)和选择器(s= 标签)。然后它打印一个可以添加到消息前面的 DKIM-Signature 标头。
示例调用
cargo run --example dkimsign -- \
/path/to/key.pem example.com selector < /path/to/msg-to-sign
程序 dkimverify
验证标准输入提供的消息的 DKIM 签名。它将每个验证结果打印为 Rust 数据结构。
示例调用
cargo run --features hickory-resolver \
--example dkimverify < /path/to/msg-to-verify
在两个示例中,导出环境变量 RUST_LOG=viadkim=trace
以启用库的跟踪日志。编辑示例以实验不同的配置选项。
有关 viadkim 库的交互式使用,请参阅命令行工具 dkimdo。
致谢
虽然这是一个从头开始创建的独立 DKIM 实现,但作者希望感谢 OpenDKIM 项目。作为 OpenDKIM 的长期用户,作者不禁采用了其中的一些设计思想。一个例子是“分阶段”处理方法,它不需要整个消息同时驻留在内存中。
许可证
版权 © 2022–2024 David Bürgin
本程序是自由软件:您可以按照自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它,许可证版本为 3,或者(根据您的选择)任何较新版本。
本程序分发的目的是希望它是有用的,但没有任何保证;甚至没有关于其适销性或适用于特定目的的隐含保证。有关详细信息,请参阅 GNU 通用公共许可证。
您应该已经随本程序收到了 GNU 通用公共许可证的一份副本。如果没有,请参阅 https://www.gnu.org/licenses/。
依赖关系
~8–16MB
~241K SLoC