优劣分析
- 可以设置颁发证书的有效期;(最长 90 天,最短 1 天)
- 支持多域名及通配符;(与 Let’s Encrypt 相同)
- 仅支持 DNS 验证和文件验证,不支持邮件验证;(与 Let’s Encrypt 相同)
- 支持 IP 地址,但是仅允许该 IP 地址块的所有者进行验证;(Let’s Encrypt 暂不支持)
- 不支持 IDN (International Domain Name, 国际化域名,使用 Punycode 进行编码,形如 xn–1.xn–2).(Let’s Encrypt 已经支持)
- 目前签发的证书,即使选择 ECC 类型,证书链的中级证书也是 RSA 的(Let’s Encrypt 已经支持全链 ECC)
- ocsp.pki.goog 有国内节点,访客体验还是很不错的。
- 目前有 DNSSEC CAA 问题,在 DNSPod 添加了 DNSSEC 的用户请暂缓申请
申请方法
申请 GOOGLE 域名 API
登录 google 账号后,进入下面链接
https://console.cloud.google.com/apis/library/publicca.googleapis.com
等待启用后,单击右上角的“激活 Cloud Shell”,打开 Google Cloud Shell
然后在在 Cloud Shell 输入
gcloud publicca external-account-keys create
要等待一会才会返回 keyid 和 b64mackey,不行就多输入几次
Created an external account key
[b64MacKey: xxxxxxxxxxxxxxxxxxx
keyId: xxxxxxxxxxxx]
安装 acme.sh
如果已经安装请忽略这步
curl https://get.acme.sh | sh -s email=你的邮箱 //注册或登录邮箱
cd ~/.acme.sh/ //把 Acme.sh 安装在根目录下,或者其他目录
如果是国内的机器,可以使用拖回源码直接安装:
git clone https://gitee.com/pigfei/acme.sh.git
cd acme.sh
./acme.sh --install -m [email protected]
然后在 root 目录下ls -a
就可以看到有一个.acme.sh
的文件夹,进入后里面有个 account.conf 配置文件,里面有前面安装时填写的邮箱,不知道有什么用,估计到时候会给通知什么的吧
进入.acme.sh 目录后使用下面命令开启 acme 自动更新
./acme.sh --upgrade --auto-upgrade
Acme.sh 默认生成 Let’s Encrypt R3 证书,我们需要修改一下让它默认生成 google 证书
bash acme.sh --set-default-ca --server google
申请 Google 证书(一)
配置 DNS API
不同 DNS 解析商 API 的获取方式与预设格式标准:
https://github.com/acmesh-official/acme.sh/wiki/dnsapi
通过官方说明文档可知,acme.sh 申请证书有两种方式,http 和 dns 验证
我使用的是 dnspod,所以这里写一下 dnspod 的,dnspod 的 token 生成页面,也可以进入dnspod 网站,点击右上角头像,然后点击 API 密钥,选择 DNSPod Token,就到了 dnspod 的 token 生成页面
点击创建密钥,输入获取到 ID 和 token,保存下来
然后回到服务器配置刚才拿到的密钥
export DP_Id="密钥ID"
export DP_Key="密钥token"
获取申请 google 证书的资格
bash acme.sh --register-account -m 邮箱 --server google \
--eab-kid xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
--eab-hmac-key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
注意,以上命令中带英文单引号的地方不可去除,否则电邮或 bash64 里带“-”、“_”等特殊符号有转义,不会被脚本正确识别,导致导入 API 信息出现偏差。
申请常规 google 证书(可选)
acme.sh -f --server google --issue \
-d *.imotao.com \
-w "/home/wwwroot/imotao.com" \
--reloadcmd "/etc/init.d/nginx reload"
会弹出两个 TXT 记录,解析它就行,稍等一会,重新激活申请订单
申请 ECC 证书(可选)
acme.sh -f --server google --issue \
-d *.imotao.com --keylength ec-256 \
-w "/home/wwwroot/imotao.com" \
--reloadcmd "/etc/init.d/nginx reload"
申请Google证书(二)
设置 Google CA API
bash acme.sh --register-account --server google -m '刚刚申请 key 的谷歌账号邮箱' --eab-kid '上述第2节 keyId 对应值' --eab-hmac-key '上述第2节 b64MacKey 对应值'
注意,以上命令中带英文单引号的地方不可去除,否则电邮或 bash64 里带“-”、“_”等特殊符号有转义,不会被脚本正确识别,导致导入 API 信息出现偏差。
签发证书
bash acme.sh --issue -d 当前机器IP被解析到的域名 -d *.泛域名 --dns dns_ali(这是阿里云) --keylength 申请证书类别和加密长度(如:ec-256)
./acme.sh --issue --dns dns_dp(这是dnspod) -d mydomain.com -d www.mydomain.com
申请的证书默认是放在/root/.acme.sh/
目录下的,如果要在申请证书更改证书存放目录可以加入--cert-home
参数,使用下面命令申请证书,其中 mydomain.com 是需要申请证书的域名,sslpath 是存放证书的目录
./acme.sh --issue --dns dns_dp -d mydomain.com --cert-home sslpath
删除证书
使用下面命令删除证书,mydomain.com 就是需要删除证书的域名,支持通配符域名
./acme.sh --remove -d mydomain.com
目前 acme.sh 支持 Let’s Encrypt、Buypass、ZeroSSL、SSL.com 和 Google Public CA,默认使用 ZeroSSL,如果需要更换可以使用下面命令:
切换 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
acme.sh --set-default-ca --server ssl.com
切换 Google Public CA
acme.sh --set-default-ca --server google
然后因为我这里使用的是宝塔面板,宝塔面板在使用 ssl 时会把填写的内容生成一个证书并保存到/www/server/panel/vhost/cert/网站 目录下,因此 acme 自动续期后宝塔面板的 ssl 并不会使用续期后的证书,这里只需要把网站的配置文件改一下就行
如果不再使用 acme.sh,可按以下命令卸载:
bash ~/.acme.sh/acme.sh --uninstall
rm -rf ~/.acme.sh
原创文章,作者:陌涛,如若转载,请注明出处:https://imotao.com/8252.html