自从 Let's Encrypt 开放签发证书服务,我就一直有在关注。
只不过一直没什么完整的时间,就没有为这博客添加 https 。
今天有空,就把这博客也加上 https,顺便记录下过程。

Let's Encrypt 是什么?

Let's Encrypt 是一个将于2015年末推出的数字证书认证机构,将通过旨在消除当前手动创建和安装证书的复杂过程的自动化流程,为安全网站提供免费的SSL/TLS证书。
Let's Encrypt 是由互联网安全研究小组(ISRG,一个公益组织)提供的服务。主要赞助商包括电子前哨基金会,Mozilla基金会,Akamai以及思科。2015年4月9日,ISRG与Linux基金会宣布合作。
用以实现这一新的数字证书认证机构的协议被称为自动证书管理环境(ACME)。GitHub上有这一规范的草案,且提案的一个版本已作为一个Internet草案发布。
Let's Encrypt 宣称这一过程将十分简单、自动化并且免费。

以上引用自维基百科

获取方法

使用 acme.sh 脚本签发和自动续期。
使用 DNS 验证的方式,比较简单快捷。
签发及自动续期的教程如下:

一、安装 acme.sh

1
curl https://get.acme.sh | sh

or

1
wget -O -  https://get.acme.sh | sh

默认情况会安装在 ~/.acme.sh 目录下。
其他方法请参考脚本作者提供的安装教程:How-to-install

二、获取 DNS API

因为我使用的是 DNSPOD 的服务,所以下面就以 DNSPOD 为例子。
进入 DNSPOD 的后台,在左侧 用户中心 - 安全设置 - API Token,
创建一个 API Token,
会得到一个 ID 和 Token。
然后在脚本所在目录执行

1
2
export DP_Id="000000"
export DP_Key="xxxxxxxx"

DP_IdDP_Key 等号后面改成你自己的。

三、生成 ECC 证书

1
acme.sh --issue --dns dns_dp -d hjw.im -d www.hjw.im --keylength  ec-256

四、配置自动更新

因为 Let's Encrypt 签发的证书有效期只有 90 天,所以需要定期更新,acme.sh 默认安装之后会添加一个定时任务

1
2
# 每个小时的第 5 分钟执行一次,检查是否需要更新
5 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

个人觉得一天检测一次足够了,所以修改如下:

1
2
3
4
5
# 执行
crontab -e

# 添加到 cron 里,每天 0 点检测是否需要更新证书
0 0 1 * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

上面的 /root/.acme.sh 请自行修改为自己 acme.sh 脚本所在目录。

定时任务设置完成之后,重启 cron

1
service cron restart

这样设置完成之后,每天都会自动检测证书是否需要更新,需要的话就自动更新。

如果你在申请 Let's Encrypt 证书时遇到问题,欢迎留言交流~