前言
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 天。前者的其他特性列举如下:
- 支持多域名及通配符;(与 Let's Encrypt 相同)
- 仅支持 DNS 验证和文件验证,不支持邮件验证;(与 Let's Encrypt 相同)
- 支持 IP 地址,但是仅允许该 IP 地址块的所有者进行验证;(Let's Encrypt 暂不支持)
- 不支持 IDN (International Domain Name, 国际化域名,使用 Punycode 进行编码,形如 xn--1.xn--2).(Let's Encrypt 已经支持)
- 若 CSR 为 ECC,则仅叶子证书(最终用户证书)为 ECC.(Let's Encrypt 已经支持全链 ECC)
申请 Google Cloud API
- 申请 Google 账号(Google Cloud Platform),并填写表单 https://docs.google.com/forms/d/1Euhflb5CXpuLik8czElhyAloTZJZobar4086dmlPqXA 以申请内测权限。表单里有一项 Google Cloud Project ID,可以通过 https://console.cloud.google.com/apis/dashboard 得到。
- 申请表单提交后,大概半天内即可收到邮件(博主用了大约一个小时),大概长这样:
- 进入到 https://console.cloud.google.com/apis/library/publicca.googleapis.com?project=sundown6(sundown6 为前文提到的 Project ID),单击“启用”,等待。
- 单击右上角的激活 Cloud Shell,打开 Google Cloud Shell.
键入 gcloud beta publicca external-account-keys create 获取相关凭据,会返回如下内容:
Created an external account key [b64MacKey: ************************************** keyId: ***********************]
签发证书
使用 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。
- 按要求验证后即可得到证书。证书存储在 /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 是证书(完整证书链)。
wow厉害厉害
差评
别差评了@(怒)