acme申请免费SSL证书

严懿 276 2024-10-29

大部分对外网站已经抛弃http协议,强制https协议。腾讯云目前对企业用户不颁发免费的SSL证书。这里介绍一个免费开源自动续期SSL证书的Shell脚本。官网acme.sh
操作系统依赖openssl,socat,curl三个包,如果没有安装需要安装这三个包,用yum或者apt安装即可

  • 安装
curl https://get.acme.sh | sh -s email=yanyi@gmail.com
  • 证书供应商注册
    我使用的是zerossl颁发的证书,去zerossl官网注册一个账户,其他还有letsencrypt google等等选择合适自己的。
    证书供应商列表

  • 设置证书颁发机构并注册

acme.sh  --register-account  -m myemail@example.com --server zerossl

邮箱填入你在zerossl注册的时候填入的邮箱。注册成功会显示ACCOUNT_THUMBPRINT的KEY。
如果失败,进入/root/.acme.sh/ca/目录,删除acme.zerossl.com这个文件夹重新注册。

  • 设置默认的CA为zerossl
acme.sh --set-default-ca --server zerossl
  • 配置dnsapi
    到acme的文档链接,查询你的域名供应商api的调用方法。我使用的是腾讯的DNSPod
    image
    文档说明需要申请一个ID与KEY
    image-1730187778731
    记录你的ID与KEY
    将ID与KEY配置到系统的环境变量里面
export DP_Id="507xxx"
export DP_Key="8b9373bf3c5xxx"
  • 自动申请证书
acme.sh --issue -d xxxx@xxx.com -d *.xxxx@xxx.com --dns dns_dp --server zerossl 

申请泛域名通配符证书,–server指定颁发机构为zerossl,–dns dns_dp 指定dns的参数。
自动签发证书必须使用dns的方式才可自动续签

  • 证书的安装
acme.sh --install-cert -d xxx.com \
  --key-file /etc/nginx/ssl/xxx.com.key \
  --fullchain-file /etc/nginx/ssl/xxx.com.cer \
  --reloadcmd "systemctl restart nginx.service"

脚本会在证书到期前的30天左右自动调用api自动签发证书并安装到设定的目录,reloadcmd后面的值是重启nginx使证书生效。

一年又省了5000多,免费目前够用,签发时间需要三个月更新一次,都是全自动的。后期如果需求不满足再申请购买专业的证书。
image-1730188719649

  • 其他常用命令
acme.sh --h                                              查看帮助
acme.sh --list                                           列出证书
acme.sh --issue                                          申请证书
acme.sh --cron                                           检查证书是否快过期,更新所有证书
acme.sh --cron --force                                   不管证书是否临期,强制更新所有证书
acme.sh --renew-all                                      检查证书是否快过期,更新所有证书
acme.sh --renew-all --force                              不管证书是否临期,强制更新所有证书

acme.sh --info                                           查看acme配置
acme.sh --info -d xxxx@xxx.com                           查看域名的证书配置
acme.sh --renew -d xxx@xxx.com                           只更新xxx@xxx.com证书
acme.sh --remove -d xxxx@xxx.com                         移除更新xxx@xxx.com证书(这里的移除仅是不通过acme管理,不会自动续签)
acme.sh --revoke -d xxxx@xxx.com                         吊销xxx@xxx.com证书

acme.sh  --register-account  -m myemail@example.com --server zerossl  
关联zerossl账户,要先到zerossl注册好在执行这个命令,邮箱要对应

acme.sh --set-default-ca --server zerossl                设置默认的CA证书颁发机构为zerossl

acme.sh --issue -d xxxx@xxx.com -d *.xxxx@xxx.com --dns dns_dp --server zerossl  
申请泛域名通配符证书,--server指定颁发机构为zerossl,--dns dns_dp 指定dns的参数

acme.sh --issue -d xxxx@xxx.com --dns dns_dp --server zerossl  
申请xxxx@xxx.com域名证书,--server指定颁发机构为zerossl,--dns dns_dp 指定dns的参数

acme.sh --issue -d a.xxxx@xxx.com -d b.xxxx@xxx.com -d c.xxxx@xxx.com --dns dns_dp --server zerossl 
申请多域名证书,--server指定颁发机构为zerossl,--dns dns_dp 指定dns的参数

acme.sh --upgrade                       				升级 acme.sh 到最新版
acme.sh  --upgrade  --auto-upgrade      				开启自动升级
acme.sh --upgrade  --auto-upgrade 0     				关闭自动更新