给一台老Centos6 + Nginx 部署自动续签 SSL证书
嗯,没错,就是现在在跑博客的这台NAS,机器太老了。懒得升级重灌系统了,上面也没有什么特别重要敏感的数据,只是一台下载机下点电影。和放个博客发几句牢骚而已。
但比较棘手的问题是,现在各个平台免费申请的SSL证书已经普遍缩短到有效期3个月(cloudflare的方案除外),在客户的云主机上已经部署好了auto-cert / certbot 之类的脚本,但这些脚本有一个问题,依赖的 openssl centos6已经停止更新了不支持会失败。
不卖关子,解决方法请出了 deepseek,给我推荐了 acme.sh,绕过了诸多问题和限制
操作流水账如下:
1. 安装acme.sh ,如果corntab 已经有可以略过这些步骤
# 安装依赖(cron 和 curl 必需)
yum install cronie curl -y
service crond start
chkconfig crond on
# 下载安装 acme.sh
curl https://get.acme.sh | sh
source ~/.bashrc # 激活环境变量
此处可能会特到一些错误提示,acme作者贴心提示如果遭遇安装失败可能是github的dns污染问题并提供了解决方案 去 gitee.com 镜像安装
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m my@example.com
最后一行用deepseek提供的手动执行其实可以不执行,不过安装也不占空间 2M多而已。
2. 手动签发证书
根据自己的 wwwroot路径
和 域名
修改
# 创建验证目录并确保 Nginx/Apache 可访问
mkdir -p /var/www/default/.well-known/acme-challenge
# 签发证书(需提前解析域名到服务器)
~/.acme.sh/acme.sh --issue -d gen8.orz.com.cn --webroot /var/www/default --server https://acme-v02.api.letsencrypt.org/directory
签发的第三参数是必须的,如果采用默认参数会向 ZeroSSL 请求证书从而又撞上最初openssl版本过低问题。报以下类似错误
No EAB credentials found for ZeroSSL, let's get one
Usage: _hmac hashalg secret [outputhex]
Registering account: https://acme.zerossl.com/v2/DV90
Register account Error: {"type":"urn:ietf:params:acme:error:malformed","status":400,"detail":"[External Account Binding] The JWS Signature MUST be present"}
解决办法是 指定请求 Let's Encrypt,跳过 EAB
和 _hmac
问题
3. 安装证书
创建存储证书的目录
mkdir -p /etc/nginx/ssl
chmod 700 /etc/nginx/ssl # 设置严格的权限,仅允许root访问
提前修改 nginx 的对应 vhost 的 .conf ssl 部分的配置
server {
listen 443 ssl http2; # 启用 SSL 和 HTTP/2
server_name gen8.orz.com.cn; # 你的域名
# 指定证书和私钥的路径, 主要修改以下两行,根据自己的路径实际情况修改
ssl_certificate /etc/nginx/ssl/gen8.orz.com.cn.crt;
ssl_certificate_key /etc/nginx/ssl/gen8.orz.com.cn.key;
……
}
执行证书安装任务
根据自己的路径、域名 调整参数
./acme.sh --install-cert -d gen8.orz.com.cn \
--key-file /etc/nginx/ssl/gen8.orz.com.cn.key \
--fullchain-file /etc/nginx/ssl/gen8.orz.com.cn.crt \
--reloadcmd "service nginx reload"
执行完毕,可以在浏览器检查新证书是否已经生效。
以上安装命令acme会自动部署一个cron任务,每日检查证书,如有需要会自动更新并重启nginx。
验证上述全部操作配置是否正确,执行以下命令手动强制更新证书
./acme.sh --renew -d gen8.orz.com.cn --force
至此,自动SSL证书更新部署完毕.
deepseek真他娘的好用!
相关链接:
《acme提示关于中国用户github安装失败的说明》 https://github.com/acmesh-official/acme.sh/wiki/Install-in-China
《》
