前言
不知道从什么时候开始网站的免费证书从一年一更新改成三个月。我的三个域名证书不是同一时间申请,所以时不时就收到证书过期提醒。上周又一域名证书需要更新。趁周末通过acme.sh彻底解决域名证书更新的烦恼,在这做个记录顺便分享给和我有同样烦恼的朋友。
正文
acme.sh 是一个开源的 ACME 协议客户端,主要用于自动化申请、更新和管理 Let’s Encrypt 或其他兼容 ACME 协议的 SSL/TLS 证书。它的核心功能是简化 HTTPS 证书的获取和续签流程,特别适合在服务器或嵌入式设备上使用。
acme.sh使用步骤
acme.sh安装
git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install -m my@example.com #申请证书时使用的邮箱
vi ~/.bash_profile
alias acme.sh=~/.acme.sh/acme.sh
source ~/.bash_profile
选择证书验证方式
acme.sh提供多种证书验证方式,这里推荐使用WebRoot文件验证方式
#切换使用Let's Encrypt的免费证书
acme.sh --set-default-ca --server letsencrypt
# 手动指定要申请的域名和webroot路径
acme.sh --issue -d zfj1441.com -d www.zfj1441.com --webroot /home/zfj/www/
安装证书
# --install-cert 参数可以分别指定 key 和 证书文件需要安装到的目录路径
# --reloadcmd 指定在证书安装完成后所需要执行的指令
acme.sh --install-cert -d zfj1441.com \
--key-file ~/etc/nginx/key.pem \
--fullchain-file ~/etc/nginx/cert.pem \
--reloadcmd "systemctl reload nginx"
因我使用非root用户安装aceme.sh,执行以上脚步时需验证root密码,手动执行自然没问题,但是如果定时任务可不行。所以需要给当前用户免验证root密码
vi /usr/share/polkit-1/actions/org.freedesktop.systemd1.policy
<action id="org.freedesktop.systemd1.manage-units">
....省略多行内容
<defaults>
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
</action>
#重启policy
systemctl restart policy
定时更新证书
安装acme.sh后,会自动在当前用户的定时脚步中加入以下任务
crontab -l
11 1 * * * "/home/zfj/.acme.sh"/acme.sh --cron --home "/home/zfj/.acme.sh" > /dev/null
#手动验证定时任务
/home/zfj/.acme.sh/acme.sh --cron --home "/home/zfj/.acme.sh" --force
其他
# 查看证书
acme.sh --list
#指定证书的详细信息
acme.sh --info -d zfj1441.com
总结
再也不想收到域名证书超时的提醒了,趁周末花一个小时吧所有域名都上了acme.sh实现自动域名证书更新,一劳永逸。
参考
acmesh-official/acme.sh
正确使用 acme.sh, 让你的网站永久使用 ssl 证书,It’s free!
使用 acme.sh 进行SSL证书的申请和自动更新
Linux - 非root用户使用systemctl管理服务