使用 ACME 申请 Google CA SSL 证书

使用 ACME 申请 Google CA SSL 证书

William
2023-07-08 / 0 评论 / 275 阅读 / 正在检测是否收录...

Google Cloud 在上个月也推出了通过 Automatic Certificate Management Environment(也就是我们常说的 acme 协议)实现的自动化证书管理服务。这也意味着我们现在可以免费申请到和 Let’s Encrypt 一样的 Google 公共证书了,主要特性如下:

  • 支持多域名以及通配符证书(通配符证书目前需要通过 DNS 验证)
  • 支持申请 ECC 和 RSA 证书
  • 支持申请 IP 证书(目前只能该 IP Block 的所有者进行验证)
  • 证书最长有效期 90 天
  • 不支持 IDN 域名
  • OCSP 地址为 ocsp.pki.goog,有国内服务器节点

1、查看 Project ID

https://console.cloud.google.com/apis/dashboard

复制上面链接进入到谷歌云控制台,点击左上角你的项目名称,随后即可在弹出的列表中查看到你的 Project ID 。

2、启用 API

打开如下链接,启用 API ,其中填写你刚才申请时使用的 Project ID 即可。

https://console.cloud.google.com/apis/library/publicca.googleapis.com?project=<Project ID>

打开该链接后点击“启用”,随后等待右侧出现“API已启用”则可以关闭该页。

3、申请 KEY

随后打开 Google Cloud Shell(在右上角点击激活 CloudShell 图标)

等待分配完成后在 Shell 窗口内输入如下命令:

gcloud config set project <Project ID>
gcloud beta publicca external-account-keys create

此时会弹出 为 Cloud Shell 提供授权,点击授权即可。

执行完成后会返回类似如下输出;注意不要在没有收到 Google 的邮件时执行该命令,会返回命令不存在。

返回结果大概是下面这样:

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

4、申请证书

4.1、安装 ACME

执行如下命令自动安装,注意替换自己的邮箱

curl https://get.acme.sh | sh -s email=<EMAIL>
source ~/.bashrc

4.2、签发证书

以使用 Cloudflare 的 API 为例,通过 DNS 验证申请通配符证书

获取 Cloudflare API,可以自己选择全局 API 还是单域 API,我这里选择了单域 API,获取到 API 后注意保存,然后导入:

# 单域
export CF_Token="xxxxxxxxxxxxxxxxxxxxxxxx"
export CF_Account_ID="xxxxxxxxxxxxxxxxxxxxxxxx"
export CF_Zone_ID="xxxxxxxxxxxxxxxxxxxxxxxx"

# 全局
export CF_Key='xxxxxxxxxxxxxxxxxxxxxxxx'
export CF_Email="你的cloudflare邮箱"

其中 CF_Token 为你获取到的 API 密钥,CF_Account_IDCF_Zone_ID 可以在你域名概述页面侧边栏的 API 分栏看到。

4.3、设置 API

acme.sh --register-account -m <EMAIL> --server google \
    --eab-kid xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
    --eab-hmac-key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

--server google 也可以改成 --server https://dv.acme-v02.api.pki.goog/directory 手动指定服务器

API 获取的凭证应该是只能使用一次,重新获取 API 凭证之后可以成功注册

4.4、设置默认 CA

如果你一台服务器上有多个域名的 acme 任务,则可能自动更新失败,因此这里推荐使用 --accountconf 指定一个配置文件

acme.sh --set-default-ca --server google --accountconf /root/.acme.sh/account-custom.conf

4.5、签证书

没有特殊指定:

acme.sh --issue --dns dns_cf -d mydomain.com -d *.mydomain.com --accountconf /root/.acme.sh/account-custom.conf

ECC 证书

acme.sh --issue --dns dns_cf -d mydomain.com -d *.mydomain.com --ecc --accountconf /root/.acme.sh/iyumetop.conf --dnssleep 30

4.6、多证书添加Cron

使用了 --accountconf 参数指定了配置文件,此时你的 Cron 自动任务也要做出对应的修改,运行 crontab -e 进行修改(如果有多个域名则应该相应的有多个任务)

30 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" --accountconf "/root/.acme.sh/account-custom.conf" > /dev/null

5、安装证书

申请证书成功过后可以将证书安装到指定目录下

acme.sh --install-cert -d mydomain.com 
--key-file       /path/to/ssl/private.key  
--fullchain-file /path/to/ssl/fullchain.pem 

如果是ECC的,执行下面的:

acme.sh --install-cert -d mydomain.com --ecc 
--key-file       /path/to/ssl/ecc_private.key  
--fullchain-file /path/to/ssl/ecc_fullchain.pem 
0

评论 (0)

取消