一、 acme.sh自动获取ssl证书

1.安装依赖

yum install socat

2. 下载项目acme.sh项目到root家目录下[开源项目地址](https://github.com/acmesh-official/acme.sh)

wget https://wwp.lanzout.com/iMKMz20q1hvi

3. 执行脚本并安装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 google

5.进入 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