虽然一直在使用 Let's Encrypt 的 SSL 证书,不过是手动在 freessl.cn 申请并手动上传至服务器。有时候一不小心就过期了也没有发现,或者没来得及更新。
今天,在想能不能找到一个办法,自动申请 Let's Encrypt 的 SSL 证书,并且更新之。这样,就不用再担心 SSL 的问题了。于是,我找到了 acme.sh。
本文需要用到指令:curl。有些系统不会自带,需要手动安装。
首先,需要下载 acme.sh 并执行。
curl https://get.acme.sh | sh
如果显示"OK, Close and reopen your terminal to start using acme.sh",并且没有提示错误,那么就代表 acme.sh 已经下载并配置好一些东西了。
这时候,我们需要手动让 ~/.bashrc 生效。
source ~/.bashrc
get.acme.sh 干了什么?
1.下载 acme.sh 的压缩包到你账户所在的 home 目录下,并且解压之。
2.创建一个 bash 的 alias,方便使用。
3.创建 cronjob,每天 0:00 自动检查所有的证书。如果快过期,会自动更新证书。
这样,就可以开始正式使用了。
acme.sh 实现了 acme 协议支持的所有验证协议。一般有两种方式验证:HTTP 和 DNS 验证。这里使用 DNS 更加方便一些,因为国内常用的提供域名解析的服务商基本都有提供 API,我们只要申请之,然后使用 export 创建环境变量,之后就可以一劳永逸。
这里演示 DNSPod 创建 API 的过程,其余服务商可以自行查看官方文档。
登陆到 DNSPod 后,点击“用户中心 -> 安全设置 -> API Token 下的查看”就到了图示页面。
之后点击“创建 API Token”并输入名称。这里我使用了“SSL”作为名称。之后会提醒你创建成功。并让你截图或复制的方法保存 Token。之后,就可以使用了。
回归正题。之后,我们就可以使用 acme.sh 创建并自动更新证书了。
刚才申请的 API 当然是有用处的。
export DP_Id="YOURID"
export DP_Key="YOURTOKEN"
好了,这里我们创建通配符证书。
acme.sh --issue --dns dns_dp -d example.com -d *.example.com
通配符证书是好了,但是相关文件没有复制到相应位置。那么,我们难道还得手动 mv 一下?不需要,acme.sh 提供了相关的功能。
这里我们使用如下指令:
acme.sh --installcert -d konekomoe.com -d *.konekomoe.com \
--key-file /etc/nginx/ssl/YOURDOMAIN.key \
--fullchain-file /etc/nginx/ssl/full_chain.cer \
--reloadcmd "service nginx force-reload"
当然"--key-file"和"--fullchain-file"这两项后面的路径和文件名都可以更改。我只是按照我的习惯做了一些配置而已。