当前位置: > 运维管理 >

SSL免费证书自动续期 acme.sh 告别90天烦恼

时间:2025-02-05 13:19来源:未知 作者:IT
在前面的文章中我们讲到了ssl证书自动更新。但实际效果并不是很好,这不得不拿出核武器了。一起来看看acme.sh自动更新ssl证书。


关于

ACME是由 Let’s Encrypt 推出的自动化 SSL 证书管理协议。通过 ACME 协议,网站管理员可以轻松地自动申请、更新和管理 SSL 证书,完全告别手动操作的烦恼。

部署

git clone --depth 1 https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m username@example.com
图片

安装完成后,终端输入acme.sh -h便可以看到帮助命令。

图片

修改CA证书类型

目前支持的CA证书分别是 Let’s EncryptBuypassZeroSSLSSL.comGoogle Public CA,默认使用 ZeroSSL,如果需要更换可以使用如下命令:

#切换 Let’s Encrypt
acme.sh --set-default-ca --server letsencrypt
#切换 Google
acme.sh --set-default-ca --server google
以此类推!

因为笔者偏爱letsencrypt 执行上方命令即可。

图片

配置DNS API

通过服务器提供的API。让acme.sh自动创建域名验证记录以申请域名证书。本文以阿里云为例。首先登陆阿里云控制台 - 访问控制 RAM - 身份管理-用户

图片完成后,分别复制AccessKey IDAccessKey Secret的值。保存并做好备份!

图片

点击下方的添加权限。搜索DNS,选择AliyunDNSFullAccess点击确定!

图片

配置 DNS API

在隐藏目录.acme.sh中添加配置

cd 
cd .acme.sh
vim account.conf

添加配置

export Ali_Key="LTAI4Fd8J9qs4fxxxxxxxxxx"
export Ali_Secret="Xp3Z7NDOW0CJcPLKoUwqxxxxxxxxxx"
图片

申请证书

在申请证书之前,我们首先要确定原有ssl证书的位置。一般在你的nginx配置文件中。

图片

一键申请命令

acme.sh --issue --dns dns_ali -d *.test.com --fullchain-file /home/ecs-user/test.pem --key-file /home/ecs-user/test.key

命令说明:

  • –dns dns_ali:表示阿里云 DNS 的插件
  • -d  *.test.com: 表示匹配所有 test.com 域名下的子域名
  • –fullchain-file:pem证书位置
  • –key-file:证书key位置

图片完成后,便会在指定的位置生成证书。

图片在宝塔面板中。默认的证书文件名为fullchain.pemprivkey.pem。因此我们可以按照上面文件名进行生成。或者,执行下面命令。重写nginx配置文件。

acme.sh --installcert -d example.com \
--key-file       /www/server/panel/vhost/cert/xxx.com/key.pem  \
--fullchain-file /www/server/panel/vhost/cert/xxx.com/cert.pem \
--reloadcmd     "service nginx force-reload"
图片

自动部署

如果我们使用 curl https://get.acme.sh | sh 方式安装,续期任务会自动在定时任务中配置。使用acme.sh --cron便可以自动续期。

图片添加定时任务如下:

#设置每月执行一次的定时任务(每月第一天)
0 0 1 * * acme.sh --cron > /root/acme.sh/acme_cron.log 2>&1

当然,我们还可以写个脚本。更新成功后发送邮件。这里以QQ邮箱为例:

图片
在使用前,请先开启邮箱的pop3服务

安装mailx

yum install -y mailx
apt-get install -y mailx

设置/etc/mail.rc文件,在文件尾追加如下配置

set from=xxoo@qq.com(发送邮件的📮)
set smtp=smtp.qq.com
set smtp-auth-user=xxoo@qq.com(发送邮件的📮,同上)
set smtp-auth-password=ooxx(邮箱的smtp密码,注意不是邮箱登录的密码)
set smtp-auth=login
set smtp-use-starttls
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

发送测试

echo "逍遥子大表哥" | mail -s "公众号 kali笔记" 914101530@qq.com

接下来,我们更新脚本。

#脚本
#!/bin/bash
cd ~
acme.sh --issue --dns dns_ali -d *.test.com --fullchain-file /home/ecs-user/test.pem --key-file /home/ecs-user/test.key
systemctl restart nginx
echo "站点HTTP证书更新完成" | mail -s "站点NB.COM已更新" 914101530@qq.com
sleep 30 #30s后关闭脚本
exit 0

最后,添加定时任务即可!


(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容