嗯,没错,就是现在在跑博客的这台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
《》

标签: nginx, centos, https, ssl, 自动续签

添加新评论