【运维开发】acme.sh 安装|签发泛域名SSL证书,宝塔Nginx部署+自动续期

写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除!


文章目录


前言

大陆服务器直接拉取GitHub安装acme.sh极易超时失败,本文使用Gitee国内镜像完整部署;通过腾讯云API自动解析验证申请*.域名泛域名证书,踩坑解决宝塔证书目录权限不足问题,配置定时任务实现90天证书自动续签,全程实操命令可直接复制。

Gitee国内镜像安装acme.sh

官方说明文档:https://github.com/acmesh-official/acme.sh/wiki/Install-in-China

国内服务器访问Github不稳定,直接使用Gitee镜像克隆安装。

克隆源码并安装

bash 复制代码
# 拉取Gitee国内镜像仓库,邮箱不改也可执行
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m my@example.com  

加载环境变量,验证安装

安装完成后无法直接识别acme.sh命令,重载环境变量:

bash 复制代码
# 刷新bash配置,查看版本验证是否安装成功
source ~/.bashrc
acme.sh --version

成功输出示例:

配置腾讯云API密钥,自动DNS验证泛域名证书

生成腾讯云API密钥

一般不推荐使用主账户进行操作,因为一旦泄露会导致账户的面临无法预测的损失。因此推荐子用户的权限,对权限进行限制,即便泄露也为无法影响到未授权的部分。

  • 新建用户


  • 设置权限,给个DNS解析就行


  • 创建子账户API密钥

API密钥只有在创建时可见,所有妥善保存,同时请勿外泄。

持久化配置腾讯云密钥

泛域名证书*.你的域名无法使用HTTP文件验证,必须DNS解析验证,acme.sh内置腾讯云DNS插件dns_tencent。

由于后续对宝塔的密钥文件进行更改,但需管理员权限sudo acme.sh是行不通的,因此建议在root用户进行下列操作,将其保存未环境变量。

bash 复制代码
sudo su

编辑bash环境变量文件,永久保存SecretId、SecretKey:

bash 复制代码
nano ~/.bashrc

文件末尾追加下面两行,替换为自己腾讯云密钥:

bash 复制代码
export Tencent_SecretId="xxxx"
export Tencent_SecretKey="xxx"

保存退出后重载生效:

bash 复制代码
source ~/.bashrc
# 校验环境变量是否写入成功
echo $Tencent_SecretId

一键申请根域名+泛域名证书

bash 复制代码
acme.sh --issue --dns dns_tencent -d 你的域名 -d *.你的域名

工具会自动调用腾讯云API添加_acme-challenge解析记录,自动完成域名校验并签发证书。

证书部署至宝塔Nginx

宝塔面板证书统一存放目录:/www/server/panel/vhost/cert/域名/

普通ubuntu用户无该目录写入权限,直接执行部署命令会出现权限报错,所以提前激活root:

复制代码
touch: cannot touch '/www/server/panel/vhost/cert/域名/privkey.pem': Permission denied

部署操作

root下执行证书部署命令

bash 复制代码
acme.sh --installcert -d 域名 \
--key-file    /www/server/panel/vhost/cert/域名/privkey.pem \
--fullchain-file /www/server/panel/vhost/cert/域名/fullchain.pem \
--reloadcmd     "/www/server/nginx/sbin/nginx -s reload"

成功执行日志参考:

校验证书文件生成

查看证书目录文件权限:

bash 复制代码
ls -la /www/server/panel/vhost/cert/域名/

输出结果:

配置证书自动续期,Cron定时任务

acme.sh安装时自动为root生成定时任务,每日检测证书有效期,剩余30天自动续签,自动重载Nginx。

查看定时任务

bash 复制代码
crontab -l

能看到acme.sh自带定时脚本:

复制代码
34 15 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

手动测试自动续期逻辑

bash 复制代码
/root/.acme.sh/acme.sh --cron --home /root/.acme.sh

未到续期时间输出日志:

强制手动续签

bash 复制代码
/root/.acme.sh/acme.sh --renew -d 域名 --force

总结

总结: 本文介绍了通过Gitee国内镜像安装acme.sh工具,利用腾讯云API实现泛域名证书的自动DNS验证与申请。针对宝塔面板证书目录权限问题,提供了root用户部署方案,并配置定时任务实现90天自动续签。


互动

  • 上述内容对你有用吗?

欢迎在评论区解答上述问题,分享你的经验和疑问!

当然,也欢迎一键三连给我鼓励和支持:👍点赞 📁 关注 💬评论 💰打赏。


致谢

欲尽善本文,因所视短浅,怎奈所书皆是瞽言蒭议。行文至此,诚向予助与余者致以谢意。


参考

1 https://github.com/acmesh-official/acme.sh/wiki/Install-in-China

2 腾讯云-创建子账号并授权

相关推荐
天空依然蔚蓝9 小时前
分享一个自动检测网站在线状态的python程序
python·运维开发·1024程序员节
yunlaodacom13 小时前
腾讯云国际站服务代理商:CVM连接TencentDB失败排查指南
云计算·php·腾讯云
DevLoom_17 小时前
macOS 命令行 curl/git 报 SSL 证书错误?eMudhra 事件完整修复指南
git·macos·ssl
闲云自留地21 小时前
K8s Ingress 全解:ingress-nginx 部署、域名路径路由、HTTPS 限流灰度一篇通
nginx·https·kubernetes
腾讯云大数据21 小时前
腾讯云+TBDS+智算平台:多模态数据处理与机器学习一体化实践
大数据·机器学习·云计算·腾讯云
zxanz11 天前
国密 SM2 SSL 证书和国际证书怎么选,一文理清差异
https·ssl
幽默小吴1 天前
nginx篇
运维·nginx
正经教主1 天前
【FDE系列】阶段2:Day 45(up详细版):综合实战 — Docker + Nginx + Git 完整部署与本周收官
人工智能·git·nginx·docker·fde
甜到心里的蛋糕1 天前
AI 生成 MV 音频异响排查:频谱定位、片段替换与 Nginx 缓存
人工智能·python·nginx·ffmpeg·音视频·音频处理
行思理2 天前
Nginx 跨站请求(CORS)配置完全指南:从原理到生产实践
java·前端·nginx