图文流程使用acme.sh全自动续签SSL证书
前言
其实网上已经有很多关于acme.sh的教程了,但是我还是想写一篇,这里面部分参考了官方WIKI。
因为大多数都没有使用cloudflare的apikey来自动完成dns challenge的中文教程,都是使用nginx插件或者在根目录下放一个文件之类的来验证域名所有权,而我正巧需要续签的服务器上是不开放访问的私人后台,没办法公开访问来让Let’s Encryption验证,没办法只好使用dns验证域名所有权了。
而且我的有图片流程,配置cfkey的流程会更详细一点吧
顺便一提Let’s Encryption的SSL证书的有效期真的是越来越短了,前不久还取消了邮件证书到期通知,总是过期了以后才想起来手动续签实在麻烦,所以还是用acme.sh来自动续签吧。
acme.sh会自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书,如果快过期了需要更新,就会自动更新证书并安装。这样就再也不怕过期了。
安装acme.sh
ssh登录到你的服务器
建议创建一个 ~/.acme.sh/ 目录
在目录下执行以下命令
1 | curl https://get.acme.sh | sh -s email=youremail@example.com |
配置cloudflare的apikey
首先去cloud flare官网创建一个 API 令牌
在dashbord右上角的配置文件里面选择API令牌。
创建API令牌的传送门
点击创建令牌。
使用编辑区域DNS的模板。
在区域资源里选择你要续期的顶级域名,其他的都不要改,然后点击继续以显示摘要。
点击创建令牌。
点击复制令牌,在复制之前千万别关闭这个页面,否则这个令牌key就不会再次展示了,只能重新创建一个了。
好了,令牌创建完了,先临时保存到一个地方,等会要用到。
回到dashbord主页复制区域ID
找到要续期的域名,然后它右边的三个点,选择复制区域ID。
修改acme.sh的默认CA
acme.sh 脚本默认 CA 服务器是 ZeroSSL,有时可能会导致获取证书的时候一直出现:Pending,The CA is processing your order,please just wait.
所以还是Let’s Encrypt比较好用,把 CA 服务器改成 Let’s Encrypt
1 | acme.sh --set-default-ca --server letsencrypt |
配置acme.sh
在服务器的ssh上配置环境变量
1 | #你刚刚复制的cloudflare apikey |
这些设置的环境变量会被保存在 ~/.acme.sh/account.conf 中,以便在将来使用 dns_cf 签发新证书或续期现有证书时自动使用。
生成证书
1 | acme.sh --issue --dns dns_cf -d example.com |
执行成功后会输出类似以下的信息
1 | Your cert is in: /root/.acme.sh/your.example.com_ecc/your.example.com.cer |
复制安装证书
证书生成好以后,需要把证书复制给对应的服务器目录去使用。
每次自动续签证书也会自动执行下面配置的安装命令
注意:必须使用 –install-cert 命令来把证书复制到目标文件,请勿直接使用 ~/.acme.sh/ 目录下的证书文件,acme官方wiki说这里面的文件都是内部使用,而且目录结构将来可能会变化。
1 | acme.sh --install-cert -d example.com \ |
默认情况下,证书每 60 天更新一次(可自定义)。
更新证书后,reloadcmd 里的命令会自动执行,重启网页服务并更新证书。
自动更新 acme.sh
开启自动升级:
1 | acme.sh --upgrade --auto-upgrade |
之后,acme.sh 就会自动保持更新了。
完成啦,以后就再也不用担心证书过期的问题了。
参考
这也算是我写过第一篇技术相关的长篇博客吧,好像这个blog自创建以来也没写什么正经东西。