


























之前在研究 GPG 加密,但发现几乎没有邮件客户端支持,都需要安装第三方软件;而 S/MIME 也是一种邮件签名加密的协议,相反就有很多系统和软件都自带这个功能。这篇教程会教你如何申请 S/MIME 证书,添加到相应的电子邮件软件中,对邮件进行签名和加密。
两者都使用公私钥进行签名加密(非对称),但在信任方式上有根本区别:
我更喜欢在电子邮件中使用 S/MIME,其优点如下:
但是,S/MIME 相比 GPG 也有缺点:
如果你想,似乎可以将 GPG 和 S/MIME 结合使用,例如使用可信的 S/MIME 签名,再将带有签名的明文用一次性的 GPG 密钥加密。每次发送信息前都重新生成新的 GPG 密钥,并在交换公钥的过程中使用 S/MIME 签名。
我很不情愿地推荐你在 Actalis 上申请证书。推荐是因为我只找到 Actalis 可以申请第一年免费 S/MIME 证书(续费 6 欧元);不情愿是因为它不允许你通过上传 CSR 的方式申请,而是在它自己的服务器上生成私钥。而由于一旦拥有私钥就能签名,有了签名你的信息就具有不可否认性,所以如果它想做恶,后果可想而知。在 Actalis 上申请免费一年的用于测试是没问题的。
打开〈Actalis 官网〉,翻到下面就可以申请第一年免费的 Mailbox Validated 证书,点击 PROCEED 添加到购物车,然后进行购买。需要注册一个 Actalis 账号,注册邮箱就用需要申请证书的邮箱即可。

申请后,稍后会往你邮箱中发确认申请的邮件,邮件上半是意大利语,下半是英语,点击英语部分的 Confirm email 就行。确认后,稍等 10 分钟,会往你邮箱中发证书私钥的密码。再等 10 分钟,刷新 Actalis 后台页面,就可以下载 p12 格式的证书文件了。

然后使用以下命令从 p12 文件中导出公钥, 需要输入私钥密码(没有 openssl 就自行安装):
openssl pkcs12 -in <p12 文件> -clcerts -nokeys -out public.cer导出的 public.cer 公钥文件可以分享给他人,后面也会讲解如何导入他人的公钥。
如果你想更安全,并且有安全的私钥保存方法,那可以在 Certum 申请,可以通过上传 CSR 的方式申请,私钥保存在本地,支持 RSA 2048/3072/4096、ECC 256/384(prime256v1 / secp384r1)(ECC 证书只能用于签名,无法加密)。如果没使用过 CSR 也可以看下面步骤学习下,弄错了也没关系,Certum 可以重新签发证书。
建议创建一个干净的 Linux 虚拟机再进行以下操作
安装 Java 17,然后下载〈Certum Tools application〉,应下载 .jar 格式的。通过 java -jar certum-tools.jar 运行程序。运行之后,点右上角切换语言为英语。在中间的 Common Name 中输入申请的邮箱,选择算法和密钥大小(建议用 RSA,2048 位密钥的够安全了,申请 4096 位的也行)。然后点击 Generate CSR,就会生成私钥和 CSR,分别点击 Save 并保存好。
保存好后,先不要关闭软件,待会要用这个软件组合公私钥。
打开〈Certum 商店〉,点击右上角注册账号(用需要申请证书的邮箱注册),然后在账户设置里添加一个 Billing Address,国家选一个东亚国家,Buyer 选 Person,剩下的信息建议写详细点(可以写虚拟地址,但不要明显乱填,下图为错误示范)。这个操作是为了避免在结算价格里计算税费。

然后回到商店页面,选择你要的 S/MIME 证书。我推荐最便宜的 Certum S/MIME Mailbox,新证书一年 9.5 欧,两年 15 欧,建议直接买两年划算。续费都比新办便宜 0.5 欧。如果你有更高级的需求(钱用不完),可以买 Certum S/MIME Individual。这个证书会显示你的姓名,而不仅仅是邮件地址。如果要买这个,需要把 Billing Address 中的姓名改为真实的。

添加到购物车并购买,付款方式自选(可以使用内地外币卡)。付款完成后,点击右上角 My Account 中的 My orders,可以看见订单状态变为了 In Progress,稍等一会,就会收到邮件「Begin certificate activation. Order …」,打开里面的链接进入 Certum CertManager Dashboard。在页面下方,可以看到刚才购买的证书,点击 Email verification 开始激活证书。

输入邮箱后,确定,稍后就会有激活邮件发来,点击链接即可。激活后,回到刚才的页面,点击 Activate certificate。

激活的时候,选择 CSR 作为生成方式,然后将刚才生成的 CSR 文件中的内容复制进去,然后一直下一步就行。激活过程一般很快,之后就能下载证书文件了。如果以后私钥丢了等情况,需要重新生成证书,直接点 Reissue certificate,粘贴新的 CSR 进去就行。
等证书激活好后,点击 Download PEM 下载证书(公钥文件)。然后回到 Certum Tools,切换到 PFX Generator (P12) 选项卡,选择下载好的证书文件,以及刚才保存的私钥文件,并输入一个导出密码来保护证书文件。密码最好复杂点,但也要记得住。导出的 pfx 文件可以保存好,方便添加到不同设备。

Mozilla Thunderbird 是由 Mozilla 基金会研发的一款自由及开放源码的跨平台电邮客户端、新闻阅读器、聚合器以及即时通信软件。(来自 Wikipedia)
虽然 Thunderbird 支持的电子邮件协议有限,但是其 IMAP 协议也支持大部分邮箱的即时推送,就类似 Exchange ActiveSync 那种收到邮件马上就有通知,而不用像传统意义上的 IMAP/POP3 协议一样需要定期与服务器同步。
强烈建议在所有操作前,开启 Thunderbird 的主控密码,这样会加密添加的邮件帐户的密码和导入的 S/MIME 证书,并且在每次启动 Thunderbird 前都需要输入这个主控密码。如果要开启主控密码,点击右上角的三条横线,进入设定,点击隐私权和安全性选项卡,然后打开主控密码选项,也可以同时打开上面的需要装置登入选项。

在添加了邮件帐号后,点击右上角的三条横线,进入帐号设定,点击端到端加密选项卡里面的「管理 S/MIME 凭证」,在这里就能汇入 p12/pfx 格式的证书文件。

导入证书后,分别按两个「选择」按钮,选择刚刚添加的证书,作为用于签名和加密的证书。然后勾选「对新信息启用加密」和「签署未加密信息」选项,如图。

这样一来,在撰写邮件时,就会默认启用 S/MIME 加密和签名。但还有一个问题,我们需要收件人的公钥才能进行加密,否则只能签名,所以下面会讲解如何手动添加对方的公钥。
注意我这里说的是手动添加,因为正常来说 S/MIME 其实不需要手动添加,你只需要收到带有对方签名的邮件,Thunderbird 就会自动添加对方的公钥,然后就可以发送加密邮件了。不过如果你已经有对方的公钥,并且通过对比指纹确认公钥未遭篡改,那也能直接添加公钥。
点击右上角的三条横线,进入帐号设定,点击端到端加密选项卡里面的「管理 S/MIME 凭证」,然后切换到人员选项卡,点击「汇入」就能导入其他人的公钥,然后就可以直接给对方发加密的邮件了。

将 p12/pfx 传进手机的文件 App 里,单击下就能以描述文件的形式安装。然后打开设定 App,信任刚才添加的描述文件即可,过程中需要输入手机密码和证书密码。
然后还是在设定里,找到邮件 App 的单独设定,点击已有的邮件帐号-帐号设定-高级,就可以设置 S/MIME 签名和预设加密,建议把两个选项都打开,然后选择刚才导入的证书就可以了。这样在发送所有邮件时都会默认签名,同时如果有收件人公钥,也会默认加密。
iOS 应该只能通过收到带有签名的证书的方式来添加公钥,而不能手动添加(虽然也可以用描述文件导入公钥,但是邮件 App 无法识别)。
收到他人的邮件后,点击寄件人的名字-查看证书,再点安装就可以了,如图。
然后在发送邮件,输入收件人地址时,如果有可用的公钥,就会出现一个锁上的锁,否则就是打开的锁。
其他软件,比如 Outlook,就请自行在网上搜教程吧,不过我用 Outlook (classic) 在处理 S/MIME 签名加密时经常报错,不懂什么原因,所以还是转 Thunderbird 了。
为了方便快速获取他人的 S/MIME 公钥,而不必一一手动添加,可以将公钥上传至公开的 LDAP 目录服务器,就像 GPG 公钥服务器一样。通过这种方式,无需先交换经过签名的邮件,只要两个使用者都连接到同一个目录服务器,获取到对方的公钥,就能建立加密通信。
其实这种方式大多适用于公司/组织内的使用,公开的 S/MIME 目录服务器并不像 GPG 公钥服务器那么流行,而且也无法去中心化。不过如果你想试试,也可以上传公钥看看(我也上传了)。
我使用的公开 LDAP 目录服务是 Z1 Global TrustPoint,由一家德国公司建立,资料处理符合 GDPR 规范,链接〈官网〉〈使用条款〉〈隐私政策〉
打开 Z1 Global TrustPoint 上传页面,选择「User certificate」,将公钥上传上去,然后会往对应邮箱里发一封确认邮件,点击其中的链接即可。

然后返回主页,搜索下你的邮件地址,如果搜得出来对应的公钥,就可以继续了。
点击右上角的三条横线-新增帐号-新增通讯录-LDAP 通讯录,按以下信息填写,然后确定保存。
名称:随便
主机名称:ldap.globaltrustpoint.com
端口:636,并勾选使用安全连接
Base DN:dc=globaltrustpoint,dc=com
然后打开 Thunderbird 设定,在编辑选项卡中,将「使用下列功能以加速寻找符合的收件者」里的三个勾全部选上,如果已经选上了,最好取消勾选,然后再重新勾选一遍。目录服务器选择刚刚添加的。

这样一来,如果启用了对新消息启用加密的选项,在填写完收件人地址后,Thunderbird 就会自动向 LDAP 服务器查询对应邮件地址有无对应的公钥,如果有,就会自动添加,如图

以上就是全部内容,欢迎留言。如果你也用 WordPress 也可以试试看我写的一个插件〈为 WordPress 外发邮件添加 S/MIME 签名〉。需要测试,可以直接给我发邮件([email protected]),我的公钥可以在这里下载。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。