使用 Acme.sh 申请 Google 的免费 SSL 证书

一、申请证书-获取EAB 密钥

通过 ACME 脚本申请 GTS 证书时,会要求你提供 b64MacKeykeyId,以下是它的获取方法。 DnsApi wiki

通过 Google Cloud Shell 获取 (网页端操作)

1.1、前往 Google Cloud 页面,在右上角新建一个名为 Google Trust Services 的项目,并启用 Public Certificate Authority API step one

1.2、选择你刚刚创建的新项目,点击右上角的"激活 Cloud Shell"

step two

1.3、中间可能需要授权,成功授权后在 Cloud Shell 输入

1
2
# 如需请求 EAB 密钥 ID 和 HMAC,请运行以下命令:
gcloud publicca external-account-keys create

step three

此命令会返回对生产环境有效的 EAB 密钥 和公共 CA 环境中。在响应正文中,keyId 字段包含 EAB 密钥 ID,b64MacKey 字段包含 EAB HMAC。

Created an external account key [b64MacKey: xxxxxx keyId: xxxxxx]

您必须在获得 EAB 密钥后的 7 天内使用该密钥。如果 7 天内未使用 EAB Secret 则会失效。使用 EAB 密钥注册的 ACME 账号没有到期时间。

如果你决定不再使用该 API,请在 Google Cloud 删除此项目!

二、安装并配置 acme.sh

1、安装 acme.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15

# 安装acme脚本,指定邮箱用于接收证书过期通知
# 将[Your Mail]替换为您的邮箱地址。
curl https://get.acme.sh | sh -s email=[Your Mail]

# 重新加载当前用户的环境变量,确保 acme.sh 的命令可立即生效。
source ~/.bashrc

#  设置 ACME 脚本自动更新
acme.sh --upgrade --auto-upgrade

# 设置 Google 作为默认 CA
# 如果你一台服务器上有多个域名的 acme 任务,则可能自动更新失败
# 因此这里推荐使用 --accountconf 指定一个配置文件
acme.sh --set-default-ca --server google --accountconf /root/.acme.sh/account-custom.conf

如果你正在使用 ACME 脚本为多个域名,使用不同的账号/CA颁发证书,请善用--accountconf 命令为每个域名创建自己的配置。 account-custom.conf 可以自定义名称

acme.sh 官网文档

2、注册 acme 账号

1
2
3
4
acme.sh --register-account \
        --server google -m [Your Mail] \
        --eab-kid [Your keyId] \
        --eab-hmac-key [Your b64MacKey]        
  • 将[Your Mail]替换为您的邮箱地址。
  • 将 [Your keyId]、[Your b64MacKey]替换为 步骤1️⃣申请到的 keyId 和b64MacKey。
  • 你也可以将 –server google 替换为 –server https://dv.acme-v02.api.pki.goog/directory

看到类似下面的输出内容,即代表注册成功

1
2
3
Registering account: https://dv.acme-v02.api.pki.goog/directory
Registered
ACCOUNT_THUMBPRINT='xxxxxxxxxxxxxxxxxxxxxxxx'

三通过 DNS 验证域名所有权

1、获取并导入 API Token 你可以选择使用 全局 API 还是单域 API,两者都可以在 Cloudflare API Token 获取。 创建单域 API : step 4 此令牌只会显示一次,请及时保存。 step 5

选择系统自带的模版即可,有特殊需求的可以在页面底部选择自定义(注意下面令牌权限)

step 6 区域资源代表这个 API 可以控制的区域

我这里选择了单域 API,使用命令导入 API:

1
2
3
4
# 单域 API (只能控制这个域名)
export CF_Token="xxxxxxxxxxxxxxxxxxxxxxxx"
export CF_Account_ID="xxxxxxxxxxxxxxxxxxxxxxxx"
export CF_Zone_ID="xxxxxxxxxxxxxxxxxxxxxxxx"
  • CF_Token 为你获取到的 用户 API 令牌
  • CF_Account_ID 和 CF_Zone_ID 可以在你域名概述页面侧边栏的 API 分栏看到。

step 7

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# --dns dns_cf 指定cfdns
acme.sh --issue  --server google    -d zlog.me  -d '*.zlog.me'  --dns dns_cf    --keylength ec-256

#创建证书
acme.sh --install-cert -d zlog.me --ecc  \
    --key-file         /etc/nginx/ssl/zlog.me.key  \
    --fullchain-file   /etc/nginx/ssl/zlog.me.pem  \
    --ca-file          /etc/nginx/ssl/ca.pem  \
    --reloadcmd  "service nginx force-reload" \
    --server google

转自

0%