使用 acme.sh 申请网站 SSL 证书

50 阅读2分钟

#1 安装 acme.sh

git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m it@top-booking.com

# 并创建 一个 shell 的 alias, 例如 .bashrc,方便你的使用: `alias acme.sh=~/.acme.sh/acme.sh`
vim ~/.bashrc
# 添加下面这行
alias acme.sh=~/.acme.sh/acme.sh
# 存档后让别名生效
source ~/.bashrc

#2 更换证书颁发商家

## 切换 Let's Encrypt
acme.sh --set-default-ca --server letsencrypt

##切换 Buypass
acme.sh --set-default-ca --server buypass

##切换 ZeroSSL
acme.sh --set-default-ca --server zerossl

## 切换 [SSL.com](http://ssl.com/)
acme.sh --set-default-ca --server ssl.com

##切换 Google Public CA
acme.sh --set-default-ca --server google

#3 手动申请证书

acme.sh --issue --dns -d top-booking.com -d www.top-booking.com -d agoda.top-booking.com --yes-I-know-dns-manual-mode-enough-go-ahead-please --force

参数 --yes-I-know-dns-manual-mode-enough-go-ahead-please :acme.sh 更希望用户使用自动申请证书的方式,如果你确实需要手动申请,需加上这个参数,否则命令不会正常执行。

如果一切顺利,acme.sh 命令会输出两段 TXT 信息,需要你手动添加到对应域名的 DNS 解析中,以验证你确实对这个域名拥有权限。在证书申请完成之后,可以删除对应的 TXT 记录

登录域名服务商(新网)后台,在域名解析中添加上对应的 TXT 记录,然后再运行以下命令,即可生成证书:

acme.sh --renew -d top-booking.com -d www.top-booking.com -d agoda.top-booking.com --yes-I-know-dns-manual-mode-enough-go-ahead-please --force

证书会被保存在 ~/.acme.sh/ 目录下,包含以下四个文件:

  • mydomain.com.cer 证书
  • mydomain.com.key 密钥
  • ca.cer
  • fullchain.cer 全链路证书

其中在网站场景主要使用 fullchain.cer 文件和 mydomain.com.key 文件。

3.1 续期的时候

执行下面的命令,也是需要到新网那边更新txt record,然后再次执行即会生成新的证书(相当于需要执行两遍

acme.sh --renew -d top-booking.com -d www.top-booking.com -d agoda.top-booking.com --yes-I-know-dns-manual-mode-enough-go-ahead-please --force

#4 应用到nginx

# ssl_certificate      /etc/nginx/cert/top-booking.pem;
# ssl_certificate_key  /etc/nginx/cert/top-booking.key;
cp /etc/nginx/cert/top-booking.com.cer /etc/nginx/cert/top-booking.com.cer.20241120
cp /etc/nginx/cert/top-booking.com.key /etc/nginx/cert/top-booking.com.key.20241120

cp ~/.acme.sh/top-booking.com/top-booking.com.cer /etc/nginx/cert/top-booking.com.cer
# **使用let's encrypt it 免费证书时,遇到SSLHandshakeException、“unable to verify the first certificate” 错误时,须将domain-name.cer更换为fullchain.cer。**
cp ~/.acme.sh/top-booking.com/fullchain.cer /etc/nginx/cert/top-booking.com.cer
cp ~/.acme.sh/top-booking.com/top-booking.com.key /etc/nginx/cert/top-booking.com.key

ls -al /etc/nginx/cert/

## 强制更新nginx配置
service nginx force-reload

#5 其他

查看证书

acme.sh --info -d top-booking.com

更新 acme.sh

目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.

升级 acme.sh 到最新版 :

acme.sh --upgrade

如果你不想手动升级, 可以开启自动升级:

acme.sh --upgrade --auto-upgrade

之后, acme.sh 就会自动保持更新了.

你也可以随时关闭自动更新:

acme.sh --upgrade --auto-upgrade  0

#6 参考资料