由于单域名证书用起来十分不方便,因此决定更换为泛域名证书,使用acme.sh来进行自动申请以及续签。
此文章仅记录我自己申请泛域名证书的过程
—安装
由于权限问题,建议使用root账户进行安装,以下所有操作均在root账户下执行
curl https://get.acme.sh | sh -s email=my@example.com
//my@example.com是你自己的邮箱
//由于安装时需要访问github,可能会有无法安装的情况,请各显神通
执行结束后,将会在当前账户的家目录下生成一个.acme.sh/ 目录
刷新环境变量:
source ~/.bashrc
—第一次申请
这里我使用的是ZeroSSL并使用阿里云的DNS验证,acme.sh支持的其它厂商可以在官方文档中查看
首先,在阿里云控制台内创建一个给予DNS权限的PAM用户,申请AccessKey(得到KeyID和Keys)
接下来使用acme.sh进行第一次申请:
export Ali_Key="你的KeyID"
export Ali_Secret="你的Key"
//首先给需要使用的环境变量赋值
acme.sh --issue --dns dns_ali -d example.com -d *.example.com
//最好添加一个根域名的证书
acme.sh会开始申请证书,过程耗时大概在1~3min左右,申请成功的证书会被存放在.acme.sh/ 下
如果申请不成功,使用 --log 获取详细的错误日志
—安装证书
acme.sh具有直接读取 nginx / apache2 配置完成自动更换的功能
acme.sh --issue --nginx -d example.com -d *.example.com //nginx
也可以使用 --install-cert
参数将证书文件手动释放到指定位置,配合Nginx配置完成自动更换
acme.sh --install-cert -d example.com --key-file /[path]/key.pem --fullchain-file /[path]/cert.pem
此时的nginx证书配置为:
ssl_certificate /[path]/cert.pem;
ssl_certificate_key /[path]/key.pem;
执行完毕后进行nginx重载:
acme.sh --reloadcmd "nginx -s reload"
到这里为止,安装基本上就成功了
acme.sh会记录申请操作,用于自动续期
—自动续期
acme.sh具有自动续期功能,在安装时会创建一个定时任务,可通过 crontab -l
查看
默认状态下为60天一次续期,每天都会检查证书有效期
也可以通过以下命令来强制续期:
acme.sh --renew -d example.com --force
—调用外部脚本
acme.sh具有调用外部脚本的功能
可以通过自定义脚本将证书分发到各个服务器上
acme.sh --deploy -d example.com --deploy-hook "你放在.acme.sh/deploy/文件夹下的脚本"
//这是个脚本模板示例,文件名为test.sh
test.sh_deploy(){
//这里放你的脚本逻辑
}