
在这个系列中,我们已经看到,包含 S/MIME 签名是相当直接的。发送 S/MIME 加密邮件则更复杂,因为您需要获取收件人的公钥。当您使用像 Thunderbird 这样的电子邮件客户端时,这是一回事,但应用程序生成的电子邮件流又如何运作呢?
Business in a box.
探索我们的解决方案。
与我们的销售团队交谈
在第1部分中,我们快速浏览了S/MIME,了解了在各种邮件客户端中对信息流进行签名和加密的方法。第2部分介绍了如何通过一个简单的命令行工具签名和加密电子邮件,然后通过SparkPost发送。第3部分展示了如何将安全邮件流注入到如Port25 PowerMTA和Momentum等本地平台。
在这个系列中,我们看到包括S/MIME签名是相对简单的。发送S/MIME加密邮件更加复杂,因为您需要获取收件人的公钥。当您使用如Thunderbird这样的邮件客户端时,这还可行——但应用生成的邮件流该如何运作呢?
但是等等——还有另一种方法可以进入Mordor获取那些密钥。您的服务可以邀请您的客户(通过电子邮件,当然)发送一封签名邮件到已知的客户服务地址。使用SparkPost Inbound Relay webhooks的神奇力量,我们会为您提取并存储该公钥以供使用。
我们可以用一个简单的使用案例来总结:
作为消息的接收者,我通过电子邮件向您的服务提供我的个人电子邮件签名,以便将来电子邮件可以以S/MIME加密形式发送给我。
从中,让我们推导一些更详细的要求:
我们需要一个始终在线、可靠的入站邮件服务来接收那些签名电子邮件。
邮件格式不应有特殊要求,除了它应携带S/MIME签名。
因为任何人都可以尝试向该服务发送邮件,所以应防御性设计,例如,拒绝来自不良行为者的“欺骗”消息。需要有多层检查。
如果一切检查无误,服务将以使用众所周知的纯文本隐私增强邮件(PEM)格式存储证书。
有一些非功能性要求:
机器对机器的webhook服务,仅从响应中了解内部发生的事情可能很困难。服务应提供广泛的人类可读的应用程序级日志。特别是,证书解析和检查应被记录。
我们为应用程序内部添加测试用例,使用不错的Pytest框架,并使用Travis CI与GitHub集成自动运行这些测试。
好吧——让我们开始吧!
1. 解决方案概览
这是整体解决方案的外观。

2. 安装、配置和启动 web app
3. SparkPost inbound relay webhooks 设置
首先,我们选择一个域名作为我们的入站消息地址 – 在这里,它将是 inbound.thetucks.com。按照本指南设置你的域名。我详细使用的步骤如下:
3.1 添加MX记录
你需要访问特定的互联网服务提供商账户。完成后,你可以使用 dig 检查它们 – 这是我域名的命令。
dig +short MX inbound.thetucks.com
你应该看到:
10 rx3.sparkpostmail.com. 10 rx1.sparkpostmail.com. 10 rx2.sparkpostmail.com.
3.2 创建一个入站域名
使用 SparkPost Postman API 集合,选择入站域名/创建..调用。POST 请求的主体包含你的域名,例如:
{ "domain": "inbound.thetucks.com" }

3.3 创建一个中继Web挂钩
使用相关的 Postman 调用创建一个入站中继 Webhook。在我的例子中,消息体包含:
{ "name": "Certificate Collection Webhook", "target": "https://app.trymsys.net:8855/", "auth_token": "t0p s3cr3t t0k3n", "match": { "protocol": "SMTP", "domain": "inbound.thetucks.com" } }
如前所述,我建议设置一个 auth_token为你自己的秘密值,如在你的主机上的 webapp.ini 文件中设置的那样。
你的“target”值需要匹配你的主机地址和你将托管 Web 应用程序的TCP端口。
你的“domain”值需要匹配在步骤1中设置的MX记录。

就是这样!管道设置完成。你现在应该能够将证书发送到你的入站地址,它们将被处理并显示在你的网络应用程序主机上 – 在这种情况下,一个名为 bob.lumreeker@gmail.com.crt 的文件中。
现在你可以使用本系列第 2 和 3 部分中描述的工具向 Bob 发送加密电子邮件。
你可以使用以下命令检查证书的内容:
openssl x509 -inform PEM -in bob.lumreeker\@gmail.com.crt -text -noout
4. Internals: DKIM 检查, 证书验证
该应用程序检查接收到的电子邮件是否具有有效的DKIM,并检查证书本身的有效性,如此处所述。 其中还有实现说明和进一步工作的想法。
总结…
我们已经看到如何使用电子邮件轻松收集收件人的公钥,这是通过转入中继webhooks地址完成的。完成后,这些收件人可以接收S/MIME加密形式的消息。
就到这里!发送愉快。