改用 LetsEncrypt 的免费 SSL 证书服务

@zen
2017年3月27日

最近通过 Google Chrome 访问自己的域名时,突然发现证书报警!原来 Mozilla 将封杀沃通和 StartSSL 一年内新签发的所有证书。自己也因为使用了 StartSSL 的服务而不幸中招了…

一 初识 LetsEncrypt#

经过一番寻觅之后,发现了“新时代”的免费 SSL 证书服务提供商 LetsEncrypt。但其之所以被我成为“新时代”,正因为其提出了一整套新玩法:

  1. 授权证书只有 90 天的有效期;
  2. 通过即时的域名认证以判断执行人的合法性;
  3. 使用一套名为 ACME 的协议草案授权证书;
  4. 通过客户端的定期更新机制保证实际体验的延续性。

那其它的证书销售商是如何允许其存活地呢?

来源 LetsEncrypt其它证书销售商
Orgnization No Yes
* No Yes
EV No Yes

是的,LetsEncrypt 确实仅仅是“让我们加密通信”而已…丝毫没有触及其它证书销售商的蛋糕。

以阴谋论的角度去猜测,没准还有很多基金会愿意赞助他们以推广和强化这种服务。比如…你们懂的。

二 选择客户端 acme.sh#

因为我的服务器环境都是 Debian 的关系,所以从众多客户端中选择了据说最牛X的一个 acme.sh

咳咳,其实主要原因是在于我的某些二级域名针对于特定环境——80 端口无法正常通信——ACME 协议中最基础的基于域名服务器的 HTTP 服务的认证无法完成——被迫只能使用比较偏门的 DNS 认证方法。而 acme.sh 在这一块的实现同样很赞!

等熟悉了这个套路之后,我发现其实 DNS 认证方法比服务器的 HTTP 服务的认证方法其实偷懒得多——无需在服务器上噼里啪啦搞一堆配置。所以干脆就把所有的域名都使用 DNS 认证方法搞定了。

三 配置 DNSPod#

DNSPodacme.sh 第二个支持的 DNS 服务商,也恰好是我习惯使用的 DNS 服务商。

比较折腾的是,DNSPod 的 API Token 功能隐藏得很深,需要「用户中心」—「安全设置」—「API Token」一路才能找到。够绅士!

而让人欣慰地是,acme.sh 只需要首次执行时告知 API Token,而后其会自己记录下来,以便其定期自动更新。

四 安全#

因为 ACME 协议包括基于域名服务器的 HTTP 服务验证和 DNS 验证,所以

  1. 服务器的 HTTP 服务必须非管理员禁止操作;
  2. DNS 必须非管理员禁止维护;
  3. 服务器安装 acme.sh 的帐号目录必须非管理员禁止查看。