S/MIME 是一种长期建立的加密、签名电子邮件发送方法,基于公共互联网标准。我们经常遇到对 S/MIME 的需求,特别是来自像银行、健康和金融等受监管行业的需求。例如,在企业和政府机构之间沟通时,通常需要 S/MIME。
另一种安全邮件标准 PGP(有趣的是,它被称为“非常好的隐私”),更多地用于安全的点对点通信。由于 Gmail 和 Outlook/Hotmail 等流行的基于网络的电子邮件客户端的消费者版本无法显示加密邮件,因此 PGP 现在不太流行。这是许多需要隐私的点对点通信转移到如 WhatsApp(以及许多其他应用)等提供本地端到端加密的平台的原因之一。
PGP 和 S/MIME 都需要一个可以使用密钥和证书的邮件客户端。许多桌面和移动客户端,包括 Apple Mail、Microsoft Outlook 和 Mozilla Thunderbird 都符合这一要求,一些商业版本的网络客户端如 Microsoft Office 365 也是如此。设置密钥需要一些工作,但许多组织仍然认为这很值得,尽管最近的 漏洞披露 要求制定 解决方案 来阻止加载远程内容。
S/MIME 自 1995 年以来就存在,并经过几次修订;当前版本由 RFC 5751 覆盖。它要求交换公钥,这是一项非平凡的任务,通常需要 IT 团队或类似资源的支持。这就是来自如 SparkPost 合作伙伴 Virtru 和 Echoworkx 等公司的商业解决方案的用武之地,这使得点对点的商业邮件安全变得更加容易(有关更多信息,请参见我们的 SparkPost/Echoworkx 使用方法)。
话虽如此,让我们深入探讨一下普通的 S/MIME,看看我们可以做些什么。
我为何要关心?
简短版本:
加密为您提供邮件隐私。
签名为您提供身份验证(发件人身份)、来源不可否认性和消息完整性检查。
S/MIME 与 DKIM 和 DMARC 的工作方式不同,可以与它们共存。
隐私
如果您的邮件内容没有任何个人、私密或法律重要的信息,您可能根本不需要考虑 S/MIME。现代的邮件传递系统,如 SparkPost,已经使用“机会 TLS”来保护从发送服务器到接收服务器的邮件传输。
不过,“机会”部分确实意味着,如果发送服务器无法协商安全连接,我们将以明文形式发送邮件。如果您希望确保邮件的安全性,则这并不合适。您可以查看 哪些邮箱提供商声称支持 TLS 以及哪些 实际上支持。假设接收方的服务器支持 TLS,您的邮件是通过以下方式加密的:
TLS 确保邮件服务器之间的对话安全(这就是它被称为传输层安全的原因)。MIME(包括 S/MIME)关注的是邮件内容及其处理,可以被视为“表示层”的一部分。
S/MIME 确保邮件的 内容 从消息源到接收者邮件客户端的整个过程都是安全的(“端到端”),封装消息正文。
S/MIME 使用接收方的公钥加密邮件正文。正文无法在没有接收方私钥的情况下解码——无论是您的 ISP、SparkPost,还是接收方的邮件服务器都无法进行解码。
私钥从不被披露;它仅由接收者持有。加密的邮件通过互联网传输到接收邮件服务器。当它落在接收者的收件箱中时,它会(通常是自动)使用他们的私钥解密并变得可读。
需要注意的几个 S/MIME 陷阱:
S/MIME 加密的副作用是防止基于服务器的入站邮件扫描恶意软件,因为邮件载荷以加密形式存在,因此无法识别。
请注意邮件的 头部(发件人、收件人、主题等)并未加密,因此主题行内容需要在创建时考虑到这一点。
签名 - 身份验证
S/MIME 同样为接收者提供检查消息发送者身份的能力 是否真实 的选项。
发件人的电子邮件附有一个证书,类似于安全网站上的证书,可以追溯到一个颁发机构。签名过程的完整描述 在这里。
我们将采取先签名邮件,然后加密的方式,所以过程如下。
不可否认性
签名对接收者另一个有用的好处是来源的不可否认性。想象一个情况,其中电子邮件被用来批准合同。接收者在来自发送者的消息中获得合同。如果发送者后来试图说:“不,我从未发送过那封邮件给您”,那么收到的邮件显示发送者的证书实际上被使用。
消息完整性
签名过程创建源邮件的指纹(称为消息摘要),使用发送者的私钥对摘要进行加密,并将其包含在发送的消息中。接收者的邮件客户端可以判断消息正文是否被篡改。
也许您会说:“我认为 DKIM 给我提供消息完整性检查!”是的,DKIM 提供邮件主体和邮件头的完整性检查——防篡改保证。然而,DKIM 失败(或缺失)通常不会导致入站消息被标记为完全无效,……除非 DMARC 政策为 `p=reject`(有关 DMARC 的更多信息 在这里)。DKIM 是 ISP 可靠地为域名分配声誉的众多因素之一,当然也是您消息堆栈的一个重要部分。
如果 S/MIME 消息未通过签名检查,您的邮件客户端会显眼地向您展示:
总结:端到端 (S/MIME) 与服务器对服务器 (DKIM, DMARC, TLS)
S/MIME 是一种可以在两个电子邮件最终用户之间运行的表示层能力(拥有有效的证书/密钥),而无需电子邮件管理员采取任何行动。S/MIME 提供加密和签名,并对每个用户是个人化的。
S/MIME 绑定到完整的发送地址(本地部分和域名部分),例如,alice@bigcorp.com 和 bob@bigcorp.com 将需要不同的证书。相比之下,DKIM 验证电子邮件是来自签名域名。DKIM 是一个独立的主题;这篇文章 是很好的切入点。
DKIM 和 DMARC 的设置由您的电子邮件管理员完成(在邮件服务器和 DNS 记录上工作)。一旦设置,它们对域名有效,而不是个别用户。
这与 SparkPost 有什么关系?
用于点对点消息的邮件系统,例如 Microsoft Exchange Server,长期支持 S/MIME。
如果您使用 SparkPost 发送给使用可以读取 S/MIME 的邮件客户端的特定收件人,那么对您的消息进行 S/MIME 签名可能是合理的。S/MIME 签名进一步确保消息确实来自您(或您的系统),并且没有被篡改,这在某些用例中可能是有价值的。您只需要您自己的密钥和一些我们将在本文第二部分演示的免费软件。
使用 S/MIME 加密是另一个需要做出的选择。您需要每个收件人的公钥。获取这个可能像让他们给您(或您的应用)发送一封签名电子邮件一样简单。我们将在后续文章中探讨通过 SparkPost 发送 S/MIME 签名和加密邮件的实用工具。
哪些客户端支持 S/MIME?
消费者 Gmail
普通 Gmail 网络客户端显示传入邮件签名(见下文),但没有设置保存您的私钥以读取加密邮件。即使通过第三方插件有可能,上传您的私钥从安全角度来看也并不是一个好主意。
我完全无法让 Yahoo! Mail 解码邮件中的签名。
消费者版本的 Microsoft Outlook/Hotmail 帐户会提醒您有 S/MIME 签名的存在,但不会让您完全访问以查看或检查证书。
托管商业邮件
对于托管邮件的组织,Microsoft Office 365 和 G Suite 企业版支持 S/MIME。
Outlook 邮件客户端
基于客户端的 Microsoft Outlook(例如 Windows 2010)工作:
单击图标可获取更多信息:
在 Outlook 2010 / Windows 中,证书存储通过文件 / 选项 / 信任中心 / 信任中心设置 / 电子邮件安全 / 导入 / 导出进行访问。
Thunderbird – 跨平台且免费
如果您在寻找一个免费的客户端,Mozilla Thunderbird 就符合要求。它可在 PC、Mac 和 Linux 上使用,并跨所有这些平台支持 S/MIME。以下是 Mac 上消息的外观。 “密封信封”图标表示信息已签署,而锁定则表示其被加密。
单击信封/锁定会显示有关邮件的信息:
Thunderbird 有自己的密钥存储,可在每个平台上通过类似的方式访问:
Mac 通过偏好设置 / 高级 / 证书 / 管理证书
PC:菜单(右上角的“汉堡”),高级 / 证书 / 管理证书
Linux:菜单(右上角的“汉堡”),偏好设置 / 高级 / 管理证书
Mac Mail
Mac Mail 也支持 S/MIME。它依赖您的 Mac 钥匙串来保存密钥。
iOS Mail
首先,像这样导入您的邮箱账户证书,然后您可以查看 S/MIME 签名和加密的电子邮件。它们在查看屏幕上看起来也没有太大不同。
Android
一些设备和应用支持 S/MIME;这里的 Variety 通常有很多种类。 三星 有一个指南。
最后……
这是我们对 S/MIME 实用用途的快速概述。如果您想获取自己的邮件证书,这里有一个提供商列表 在这里。我发现 Comodo 非常好用(非商业用途免费——在 Firefox 中打开,而不是 Chrome)。
在第二部分中,我们将探讨如何将 S/MIME 签名和加密应用于通过 SparkPost 发送的消息。
进一步阅读
微软有一篇关于 S/MIME 的良好介绍文章 在这里。
有关 EFAIL 漏洞及其解决方法的更多信息,请参见 这个 是权威网站。其他易于理解的解释可以在 这里 和 这里 找到。