MENU

使用 GCP 公共 CA 签发证书

July 17, 2022 • Read: 2270 • Linux

前言

3 月 30 日,Google Cloud 在其博客发表文章 Automate Public Certificates Lifecycle Management via RFC 8555 (ACME),原文见 https://cloud.google.com/blog/products/identity-security/automate-public-certificate-lifecycle-management-via--acme-client-api

文章大意是:我们,Google Cloud 推出了自动化的公共 CA 管理程序(流程),大家可以通过 ACME 协议来申请 Google Trust Services 的证书了。这套系统实现了大规模的公共证书的部署云云。

简而言之,对诸位站长而言,“免费” SSL 证书多了一种选择。目前 GCP 公共证书和 Let's Encrypt 一样,有效期最长 90 天。前者的其他特性列举如下:

  1. 支持多域名及通配符;(与 Let's Encrypt 相同)
  2. 仅支持 DNS 验证和文件验证,不支持邮件验证;(与 Let's Encrypt 相同)
  3. 支持 IP 地址,但是仅允许该 IP 地址块的所有者进行验证;(Let's Encrypt 暂不支持)
  4. 不支持 IDN (International Domain Name, 国际化域名,使用 Punycode 进行编码,形如 xn--1.xn--2).(Let's Encrypt 已经支持)
  5. 若 CSR 为 ECC,则仅叶子证书(最终用户证书)为 ECC.(Let's Encrypt 已经支持全链 ECC)

申请 Google Cloud API

签发证书

使用 CertBot 签发证书(不推荐)

  • 本地安装 Certbot,键入如下内容:
  certbot register \
      --email "[EMAIL_ADDRESS]" \
      --no-eff-email \
      --server "[SERVER]" \
      --eab-kid "[EAB_KID]" \
      --eab-hmac-key "[EAB_HMAC_KEY]"

其中,SERVER 为 https://dv.acme-v02.api.pki.goog/directory(用于生产)或 https://dv.acme-v02.test-api.pki.goog/directory (用于测试)EAB_KID 为 keyId,EAB_HMAC_KEY 为 b64MacKey。

新账户会被 Certbot 录为 Let'sEncrypt,请无视。

  • 键入以下内容:

    certbot certonly \
        --manual \
        --preferred-challenges "dns-01" \
        --server "https://dv.acme-v02.api.pki.goog/directory" \
        --domains "yours.domain"

dns-01 可为 tls-sni-01, http, dns 任一。若签发通配符请直接使用 dns。

yours.domain 替换为欲申请证书的域名,多个用西文逗号隔开

  • 按要求验证后即可得到证书。证书存储在 /etc/letsencrypt/live/域名/ 目录下,可以供各类软件使用。
  • ocsp.pki.goog 有国内节点,访客体验还是很不错的。

使用 acme.sh 签发证书

Linux 建议切换到 root 模式,可以减少证书安装时的问题

sudo su

注意:MacOS 推荐不用切换到 root。

  • 此处的邮箱,请填写您的真实邮箱
curl  https://get.acme.sh | sh -s email=my@example.com

安装完成后,再重新打开命令行(如果是 SSH,选择重新连接),以使 acme.sh 命令生效。 输入 acme.sh 回车,如果出现下面效果,表示安装成功了!

acme.sh --version
https://github.com/acmesh-official/acme.sh
v3.0.3
  • 设置 API 账户
acme.sh  --register-account  -m  [EMAIL_ADDRESS] --server google \
    --eab-kid [EAB_KID] \
    --eab-hmac-key [EAB_HMAC_KEY]
  • 设置默认 CA(可选)
acme.sh --set-default-ca --server google
  • HTTP 验证(不支持通配符)
acme.sh --issue -d <域名> -d <追加域名> --webroot <网站根目录绝对路径> --server google
  • DNS 验证(手动模式)
acme.sh --issue --dns -d <域名> -d <追加域名> --server google --yes-I-know-dns-manual-mode-enough-go-ahead-please

配置证书

  • 将生成的 PEM 和 KEY 填入相应服务器配置文件即可。
  • 进入/root/.acme.sh/< 域名 > 目录 可以看到证书和私钥,其中:[域名].key 为私钥,fullchain.cer 是证书(完整证书链)。
Last Modified: August 23, 2022
Archives QR Code Tip
QR Code for this page
Tipping QR Code
Leave a Comment

3 Comments
  1. 技术人才的小粉丝

    wow厉害厉害

  2. Chaping

    差评

    1. @Chaping别差评了@(怒)