Linux-使用 ACME 申请证书并自动续期

2024-08-07 16:39:25 浏览数 (2)

目前 HTTP2.0 作为新一代的 WEB 协议已经日渐取代使用明文传输的 HTTP 协议,以保障站点数据安全并提高 WEB 服务体验。浏览器要求必须启用 HTTPS 才可以接入 HTTP2,故而我们想要体验 HTTP2 须要有一张 SSL 证书。以下是我对使用 ACME 脚本申请证书并自动续期详细步骤的记录。

1.安装 ACME 脚本,并更换默认证书。

代码语言:javascript复制
// 安装 ACME 脚本
curl https://get.acme.sh | sh

// 设置acme.sh别名,方便后续使用
alias acme.sh=~/.acme.sh/acme.sh

// 设置 ACME 脚本自动更新
acme.sh --upgrade --auto-upgrade

// 由于 ZeroSSL 作为默认 CA,必须先注册帐户才能颁发新证书,故而更换为 Letsencrypt。
acme.sh --set-default-ca --server letsencrypt

2.域名验证 如果没有公网 IP,可使用 DNS 验证,具体步骤遵循各域名服务商指导。该方式可以申请多域名、泛域名证书,达到很多域名可以共用一张证书的目的,但无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。

如果有一台有公网 IP 的服务器即可通过下列方式进行验证,下面以 jike.dev 为例进行验证,实际使用中需要把 jike.dev 更换为你的域名和网站服务目录。

代码语言:javascript复制
// 若已搭建 Nginx 服务,可使用 Nginx 验证
acme.sh --issue -d jike.dev -d www.jike.dev --nginx

// 有的时候找不到 Nginx 的 conf 地址,可自定义地址。
acme.sh --issue -d jike.dev --nginx /etc/nginx/conf.d/jike.dev.conf

// 若已搭建网络服务,可使用 HTTP 验证
acme.sh --issue -d jike.dev -d www.jike.dev --webroot /home/wwwroot/jike.dev/

// 如果 80 端口空闲,ACME 脚本可临时监听在 80 端口完成验证
acme.sh --issue -d jike.dev -d www.jike.dev --standalone

3.安装证书到指定文件夹 为了保证证书后期的自动更新,不要直接使用或拷贝默认生成的证书,而要使用 acme.sh --install-cert 命令指定目标位置。下面以 jike.dev 为例进行安装,实际使用中需要把 jike.dev 更换为你的域名和网站服务目录。

代码语言:javascript复制
// reloadcmd命令使证书更新后重启网络服务
acme.sh --install-cert -d jike.dev 
    --key-file  /root/jike.dev.key  
    --fullchain-file  /root/jike.dev.pem  
    --reloadcmd  "service nginx force-reload"

4.更新证书 目前证书无需任何操作会在 60 天以后自动更新,若想要停止某域名证书的自动更新使用 acme.sh --remove -d jike.dev 命令,或者在安装目录中删除对应域名目录即可。

目前 ACME 脚本应该会在一个月后自动更新证书,如果未能自动更新,我在这里提供一个排查思路。 运行 acme.sh --renew -d jike.dev --force 强制更新域名证书,如果更新失败并返回 Invalid status, ···/well-known/acme-challenge/··· was rejected. Our fetch received an HTTP status code of 404. 可以检查一下 Nginx 是否将所有 80 端口访问全部重定向至 443。 如果全部重定向至 443,需要保留 /.well-known/acme-challenge/这个路径的 80 端口访问。

0 人点赞