鉴于腾讯云改后的免费证书有效期只有90天了,而且要手动安装很麻烦 所以改用决定改用Let's Encrypt的免费SSL证书
acme.sh是一个可以自动化创建&维护SSL证书的脚本。
1.安装脚本
curl https://get.acme.sh | sh
这会将acme.sh作为命令添加到环境变量中,安装完成后重新打开终端让终端生效
2.生成证书
acme.sh脚本默认ca服务器是zerossl,经常出错,会导致获取证书的时候一直出现:Pending, The CA is processing your order, please just wait,所以首先设置默认的CA服务器为letsencrypt
acme.sh --set-default-ca --server letsencrypt
生成证书有两个方法
1.HTTP验证 - 在网站root目录下生成一个文件进行验证域名所有权 (推荐)
2.DNS验证 - 手动在域名上添加一条 txt 解析记录
方法1,直接在服务器上运行以下命令进行证书生成
acme.sh -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/ --server letsencrypt
#如果你使用apache&nginx,也可以使用以下命令来自动完成验证而不需要指定网站根目录
acme.sh --issue -d mydomain.com --apache
acme.sh --issue -d mydomain.com --nginx
成功后会像下面这样输出证书的所在路径
如果一直Pending或者出现The retryafter=86400 value is too large (> 600), will not retry anymore,请确保设置了默认ca是letsencrypt,并重复尝试2-3次,一般都能成功。
方法2.DNS验证
DNS验证支持直接操作域名解析商提供的API来添加TXT记录,验证域名所有权,并在完成后清理TXT解析记录
这里以DNSPOD国内版为例,其他域名解析商参考这里
export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"
acme.sh --issue --dns dns_dp -d example.com -d *.example.com
3.安装证书
来自官方文档的注意:不要直接使用~/acme.sh中的文件,这些文件只供脚本内部使用,且文件目录结构未来可能发生变化。
我们可以用--install-cert来安装证书 下列路径根据实际nginx配置进行替换
acme.sh --install-cert -d example.com \
--key-file /var/www/html/example.key \
--fullchain-file /var/www/html/example.crt \
--reloadcmd "service nginx force-reload"
这些命令参数会被保留,并在未来的自动更新中使用。
默认证书会每60天刷新一次,可以通过crontab -l进行确认。
[root@pinecovo html]# crontab -l
43 15 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
此外,可以开启脚本自动更新,确保实时适配LetsEncrypt。
acme.sh --upgrade --auto-upgrade
更多参见acme.sh官方中文说明