告别手动续期:使用 acme.sh 实现 Nginx 证书全自动化管理

2026-02-13 探索 Linux, Nginx

通过acme.sh获取 SSL 证书

在使用云服务器搭建完整过程中,若不手动配置 SSL 证书,无法使用 HTTPS 加密访问,会导致一些服务无法使用,常规方案是通过购买云厂商的 SSL 证书,目前云厂商基本上只提供3个月的免费证书,过期后需要续费。

由于云厂商目前将免费证书有效期缩短至 90 天,手动更新的工作量翻了四倍。acme.sh 配合 Crontab 是目前实现 HTTPS 自动化的最优解。

1. 安装 acme.sh

首先,通过简单的 shell 命令安装。建议使用你的常用邮箱,以便在证书即将过期且自动更新失败时收到警告通知。

curl https://get.acme.sh | sh -s email=you@example.com

2. 选择验证方式

这是获取证书最关键的一步,通常有两种主流方案:

方案一: DNS API 验证

这种方式最简单。它不需要修改 Nginx 配置,也不需要开放 80 端口,且支持生成 通配符证书(如 *.lantech.top)。

  1. 获取 API Key:去你的域名注册商(如阿里云、腾讯云、Cloudflare)后台,生成 API Key 和 Secret,并给这个用户授权DNS编辑相关权限。

  2. 导入环境变量(以阿里云为例):

export Ali_Key="你的Key"
export Ali_Secret="你的Secret"
  1. 申请证书
acme.sh --issue --dns dns_ali -d lantech.top -d *.lantech.top(换成你的域名)

方案二:HTTP 验证(单域名方案)

如果你不想动 DNS,且 Nginx 已经在运行:

acme.sh --issue -d lantech.top --nginx

它会临时修改 Nginx 配置来完成验证,完成后自动还原。

3.安装证书到 Nginx

注意: 不要直接指向 ~/.acme.sh/ 下的证书文件,因为结构可能会变。应该使用 --install-cert 命令将证书“分发”到你指定的目录。

acme.sh --install-cert -d lantech.top \
--key-file       /etc/nginx/ssl/lantech.key  \
--fullchain-file /etc/nginx/ssl/fullchain.cer \
--reloadcmd     "systemctl force-reload nginx"

--reloadcmd 非常重要,它确保每次证书自动更新后,Nginx 都会重载配置以应用新证书。

4.配置Nginx

在你的 Nginx 配置文件中引用刚才安装的路径:

server {
    listen 443 ssl;
    server_name lantech.top;

    ssl_certificate     /etc/nginx/ssl/fullchain.cer;
    ssl_certificate_key /etc/nginx/ssl/lantech.key;
    
    # 推荐的安全配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
}

部署完成后,你可以使用浏览器点击地址栏的小锁,或在终端输入以下命令查看证书有效期:

openssl x509 -in /etc/nginx/ssl/fullchain.cer -noout -dates

5. 自动化更新

acme.sh 在安装时会自动添加一个 Crontab 定时任务。你可以通过 crontab -l 查看。

6.写在最后

当我们更新了对应账号的AK和SK之后,需要更新account.conf中的信息,以便下次更新。
该文件位于~/.acme.sh/account.conf

本文由一方天地发布 · 查看完整体验