SSL 证书自动更新及部署
SSL 证书自动化更新 / 部署
Backgrounds
腾讯云附赠的一年 SSL 证书到期了,再续便是 90 天有效期,十分麻烦。偶然得知 OHTTPS 服务可支持主流云服务商及多种平台 SSL 免费证书的自动化申请 / 更新及部署,一探究竟,记之此文。
笔者去年主要给四个三级域名申请了证书 ( 因为腾讯云不给泛解析证书 ),其中三个位于自己的轻量服务器,一个绑定七牛云 CDN.
Solutions
注册账号后申请了 Let’s Encrypt 的泛解析证书,向 DNS 解析添加一条 CNAME 便完成。
参考 OHTTPS 教程 进行自动化证书更新 / 部署,更新周期设为最长 75 天。七牛云节点容易配置,服务器节点则稍费工夫,通过创建 SSH 节点完成。
SSH 节点部署
前置
建议创建专门用于证书部署的用户。
1 | # 新建cert用户 |
权限控制
1 | sudo sudoer |
进入 NANO 后在文件末尾添加
1 | cert ALL=(ALL:ALL) NOPASSWD: ALL |
最后一个 ALL
代表赋予 cert 使用 sudo
执行全部命令,且不需要输入密码的权限。现在 cert 与轻量服务器默认用户名 ubuntu 具有相同权限。
NGINX 配置说明
执行 nginx -t
查找配置文件。笔者之前的 nginx.conf 配置中,与证书自动部署相关的内容为
1 | ssl_certificate /path/to/myurl_bundle.cer; |
之前使用的是 .crt 格式,改成 Let’s Encrypt 提供的 .cer 后缀。由于之前为每个域名配置单域名证书,SSL 配置也写了三份,本着增量修改的原则,这里不修改 nginx.conf,而是将自动部署到服务器的证书拷贝三份到各自目录。
OHTTPS
采用 SSH 方式进行节点部署时,OHTTPS 会按顺序远程执行前置命令、证书文件创建或更新命令、后置命令。
笔者将前置 / 后置动作分别写入 pre-run / post-run 脚本,并由前置命令和后置命令远程执行。见附录。
中间命令
中间命令由 OHTTPS 自动配置执行,在当前文件夹下创建一个证书文件夹,文件夹的名称为证书 ID,文件夹内有两个文件:私钥文件 cert.key(PEM格式)、证书文件 fullchain.cer(PEM格式),当证书文件夹或证书文件已经存在时,不会进行重复创建,只会对证书内容进行更新。
1 | # 此处仅展示该命令基本逻辑 |
权限问题
在此记录笔者遇到的权限问题。首先,用户目录 cert 创建后为只读,包括对 cert 自己,这应该属于基本功,也是提醒自己 Linux 水平该补课了。一种粗糙的解决方案是将 cert 的所有工作目录全部提权为 777
,cert 也给自己创建的目录及时提权便于后续的拷贝等动作。这部分逻辑在脚本中实现。
再便是报一些 BadInterrupter 问题,如 ^M
等,是在 Windows 下编辑文件导致。不做赘述。
历经失败 5 次后部署成功。执行以下命令验证证书过期时间
1 | openssl x509 -in /path/to/fullchain.cer -[enddate|text] -noout |
注意给 OHTTPS 服务器地址加白。
FAQs
别名证书
以 Gitlab 为例,别名后是 Gitlab 给申请证书。不过 CNAME 并不一定要证书,如果完全重定向过去,用的就是对方的 SSL 证书。
References
附录
pre-cmds
1 | WORKING_DIR=/home/cert/ohttps |
post-cmds
1 | cd .. # back to $WORKING_DIR |
1 |
|
1 |
|