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

2026-02-13 探索 Linux, Nginx
# 通过acme.sh获取 SSL 证书 在使用云服务器搭建完整过程中,若不手动配置 SSL 证书,无法使用 HTTPS 加密访问,会导致一些服务无法使用,常规方案是通过购买云厂商的 SSL 证书,目前云厂商基本上只提供3个月的免费证书,过期后需要续费。 由于云厂商目前将免费证书有效期缩短至 90 天,手动更新的工作量翻了四倍。**acme.sh 配合 Crontab** 是目前实现 HTTPS 自动化的最优解。 ## 1. 安装 acme.sh 首先,通过简单的 shell 命令安装。建议使用你的常用邮箱,以便在证书即将过期且自动更新失败时收到警告通知。 ```Bash 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. **导入环境变量**(以阿里云为例): ```Bash export Ali_Key="你的Key" export Ali_Secret="你的Secret" ``` 3. **申请证书**: ```Bash acme.sh --issue --dns dns_ali -d lantech.top -d *.lantech.top(换成你的域名) ``` ### 方案二:HTTP 验证(单域名方案) 如果你不想动 DNS,且 Nginx 已经在运行: ```bash acme.sh --issue -d lantech.top --nginx ``` 它会临时修改 Nginx 配置来完成验证,完成后自动还原。 ## 3.安装证书到 Nginx **注意:** 不要直接指向 `~/.acme.sh/` 下的证书文件,因为结构可能会变。应该使用 `--install-cert` 命令将证书“分发”到你指定的目录。 ```Bash 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 配置文件中引用刚才安装的路径: ```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; } ``` 部署完成后,你可以使用浏览器点击地址栏的小锁,或在终端输入以下命令查看证书有效期: ```Bash openssl x509 -in /etc/nginx/ssl/fullchain.cer -noout -dates ``` ## 5. 自动化更新 `acme.sh` 在安装时会自动添加一个 **Crontab** 定时任务。你可以通过 `crontab -l` 查看。 - 它每天会检查一次证书,如果证书剩余有效期少于 30 天,它会自动触发更新、分发文件并重载 Nginx。 - **真正实现“一次配置,终身无忧”。** ## 6.写在最后 当我们更新了对应账号的AK和SK之后,需要更新`account.conf`中的信息,以便下次更新。 该文件位于`~/.acme.sh/account.conf`
本文由一方天地发布 · 查看完整体验