acme.sh申请ssl证书
一、 acme.sh自动获取ssl证书
1.安装依赖
yum install socat2. 下载项目acme.sh项目到root家目录下[开源项目地址](https://github.com/acmesh-official/acme.sh)
wget https://wwp.lanzout.com/iMKMz20q1hvi3. 执行脚本并安装acme(my@example.com为你自己的邮箱地址)
设置默认证书分发机构为letsencrypt.org, 原因非盈利机构letsencrypt目前为止比较安全. ZeroSSL则是商业机构
cd ./acme.sh
./acme.sh --install -m my@example.com
切换默认CA为Let's Encrypt:
./acme.sh --set-default-ca --server letsencrypt
更换默认CA为ZeroSSL:
./acme.sh --set-default-ca --server zerossl
4.更换默认CA为google(acme国内无法申请)
./acme.sh --set-default-ca --server google5.进入 GCP Public Certificate Authority API 管理页面
https://console.cloud.google.com/apis/library/publicca.googleapis.com
6.如果没有启用,需要点击启用:

7.如果要给一台服务器首次申请证书,需要提前准备好一套 API,并且 GCP 至少有一个现成的项目,如果没有,请新建一个。
点击页面右上角“激活 Cloud Shell”:

8.如果 GCP 账户里有多个项目,请先输入:
gcloud config set project 项目名称以某个项目的身份提供API。
如果你的 GCP 里只有一个项目,不用输入以上命令,终端(Shell)会自动切换到默认项目上,输入:
gcloud beta publicca external-account-keys create执行命令前需要授权,然后获得一套 API
将输出结果复制出来,并保存在本地。
设置 Google CA API
./acme.sh --register-account --server google -m '注册 GCP 账户电邮' --eab-kid '上述第2节 keyId 对应值' --eab-hmac-key '上述第2节 b64MacKey 对应值'显示如下则为成功
二、acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证
1.如下为dns验证
获取DNS服务商的DP_Id和DP_Key(腾讯云)
https://console.dnspod.cn/account/token/token
腾讯云api
export DP_Id="123xxx"
export DP_Key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
vim ~/.acme.sh/account.conf
阿里云api
export Ali_Key="xxxxxxxxxxxxxx"
export Ali_Secret="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Cloudflare api
export CF_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export CF_Account_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
2. 申请泛域名显示如下图则为成功
问题描述:对 *.jumpzy.top 申请了通配符域名,但是在访问 https://jumpzy.top 是时候出问题。
解决办法:必须在申请证书时同时指定根域名 jumpzy.com 和通配符域名 *.jumpzy.top 两个域名,这样生成的证书才是完整的通配符证书:
腾讯云:dns_dp
阿里云:dns_ali
cloudflare:dns_cf
三、相关命令
泛域名
./acme.sh --issue --dns dns_dp -d *.jumpzy.top -d jumpzy.top
ecc泛域名
./acme.sh --issue --dns dns_dp -d *.jumpzy.top -d jumpzy.top -k ec-384
单域名
./acme.sh --issue --dns dns_dp -d abc.jumpzy.top
ecc单域名
./acme.sh --issue --dns dns_dp -d abc.jumpzy.top -k ec-384
例:安装到nginx
./acme.sh --install-cert -d jumpzy.top \
--key-file /etc/nginx/ssl1/key.pem \
--fullchain-file /etc/nginx/ssl1/cert.pem \
--reloadcmd "service nginx force-reload"
ecc泛域名安装
./acme.sh --install-cert -d *.jumpzy.top --ecc \
--key-file /etc/nginx/ssl1/*.jumpzy.top.key \
--fullchain-file /etc/nginx/ssl1/fullchain.cer \
--reloadcmd "service nginx force-reload"
泛域名安装
./acme.sh --install-cert -d *.jumpzy.top \
--key-file /etc/nginx/ssl1/*.jumpzy.top.key \
--fullchain-file /etc/nginx/ssl1/fullchain.cer \
--reloadcmd "service nginx force-reload"
安装到Apache
单域名
acme.sh --install-cert -d example.com \
--cert-file /path/to/certfile/in/apache/cert.pem \
--key-file /path/to/keyfile/in/apache/key.pem \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd "service apache2 force-reload"
泛域名安装
./acme.sh --install-cert -d *.example.com \
--cert-file /path/to/certfile/in/apache/cert.pem \
--key-file /path/to/keyfile/in/apache/key.pem \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd "service apache2 force-reload"
二进制安装
--reloadcmd "service httpd force-reload"
升级 acme.sh 到最新版 :
acme.sh --upgrade
如果你不想手动升级, 可以开启自动升级:
acme.sh --upgrade --auto-upgrade
之后, acme.sh 就会自动保持更新了.
你也可以随时关闭自动更新:
acme.sh --upgrade --auto-upgrade 0
卸载acme.sh
acme.sh --uninstall
出错怎么办:
如果出错, 请添加 debug log:
acme.sh --issue ..... --debug
或者:
acme.sh --issue ..... --debug 2
手动更新证书(覆盖之前的申请的证书)
acme.sh --renew -d jumpzy.top --force --ecc ecc证书更新
acme.sh --renew -d jumpzy.top --force 单域名
acme.sh --renew -d *.jumpzy.top -d jumpzy.top --force 通配符更新
列出所有证书
acme.sh --list
手动更新所有证书
acme.sh --renew-all --force
撤销ecc证书
acme.sh --revoke -d 域名 --ecc
撤销证书
acme.sh --revoke -d 域名
删除证书
acme.sh --remove -d 域名
进入证书目录,查看证书过期时间
cd /usr/ssl/cert
openssl x509 -in yanggb.crt -noout -dates
四、监控证书状态
1.每次更新证书获取更新通知, 及时了解域名更新成功或失败, 有问题可以提前处理.
网站如果使用HTTPS策略, 证书过期巨大影响, 有必要第一时间获知解证书更新情况.
2.以Dingtalk钉钉为例,钉钉Dingtalk设置
创建一个acme.sh证书提示群(名字自定义)
设置——智能群助手——机器人管理——添加机器人
选择它

在acme.sh设置参数
vim /root/.acme.sh/account.conf
export NOTIFY_LEVEL='3'
export DINGTALK_WEBHOOK='上面复制的Webhook'
export DINGTALK_KEYWORD=acme
设置通知为钉钉Dingtalk
acme.sh --set-notify --notify-hook dingtalk
设置成功后
telm通知
@BotFather 申请机器人, /newbot 可获取TELEGRAM_BOT_APITOKEN,
@userinfobot 输入 /start 可获取 TELEGRAM_BOT_CHATID
export NOTIFY_LEVEL='3'
export TELEGRAM_BOT_APITOKEN="..."
export TELEGRAM_BOT_CHATID="..."
设置通知为telm
acme.sh --set-notify --notify-hook telm