文档首页> 技术教程> 用 acme.sh 给网站签发 Let's Encrypt 证书

用 acme.sh 给网站签发 Let's Encrypt 证书

发布时间:2026-09-09 22:34        更新时间:2026-09-10 01:01
给网站配 HTTPS,签发证书这一步用 acme.sh 会省不少事。它是基于 ACME(自动化证书管理环境协议)的命令行脚本,支持 Let's Encrypt 这类免费证书颁发机构,签发、续期都能一条命令搞定,社区活跃,坑也少。 准备条件 一台能通过 80 端口访问的服务器,域名已解析到服务器 IP,Nginx 已装好且有站点目录(下文以 /var/www/html 为例)。解析对不对先用命令确认,dig +short example.com 的返回应该是本机 IP,不一致就先改解析,否则签发环节的归属校验一定失败。系统需要有 curl 和 cron,CentOS 与 Ubuntu 默认都有。 安装与签发 root 下执行: curl https://get.acme.sh | sh -s email=admin@example.com 脚本会装到 ~/.acme.sh 目录,并自动写入一条 cron 任务,续期从此不用人管。第一次操作不熟可以加 --test 参数走测试环境,测试证书浏览器不认,但能练完整流程,也不占正式签发的配额。 webroot 方式适合已在运行的 Nginx:验证文件写进站点目录,通过 http://域名/.well-known/ 路径完成校验,全程不用停服务。 acme.sh --issue -d example.com -d www.example.com -w /var/www/html 多域名就多写几个 -d,签出来的是 SAN 证书(一张证书携带多个域名),www 和裸域要一起写进清单,漏了哪个,哪个就在浏览器里报证书不匹配。不确定证书覆盖了哪些域名,用 acme.sh --info -d example.com 一次看清域名清单和有效期。 安装证书到 Nginx 不要让 Nginx 直接引用 .acme.sh 目录里的原始文件,用 --install-cert 拷到固定路径: acme.sh --install-cert -d example.com \ --fullchain-file /etc/nginx/ssl/example.com.crt \ --key-file /etc/nginx/ssl/example.com.key \ --reloadcmd "nginx -s reload" reloadcmd 会在每次续期成功后自动执行,Nginx 配置里引用上面两个路径即可。私钥记得收紧权限到 600,同机其他账号不该读到它。 验证与常见报错 浏览器打开 https://example.com 看证书生效,或者用命令读有效期: openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates 签发失败先翻 ~/.acme.sh/example.com/example.com.log,常见三类原因:域名没解析到本机;80 端口被防火墙或安全组挡住;验证期间 Nginx 把 .well-known 路径重定向或拒绝了。卡在 Pending 状态多半是第三种,按日志对症处理后再签。刚配完浏览器侧可能还显示旧证书,那是缓存没过期,换无痕窗口确认,别误判成自己配错。