Featured image of post 使用acme.sh解决烦人的证书更新

使用acme.sh解决烦人的证书更新

前言

不知道从什么时候开始网站的免费证书从一年一更新改成三个月。我的三个域名证书不是同一时间申请,所以时不时就收到证书过期提醒。上周又一域名证书需要更新。趁周末通过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管理服务

Licensed under CC BY-NC-SA 4.0
本博客已稳定运行
发表了94篇文章 · 总计73.19k字
 赣ICP备18015110号-1   
使用 Hugo 构建 主题 StackJimmy 设计