几天前 Google Cloud 推出了免费的公共 SSL 证书,网上也出现了不少教程,看了下都是关于 certbot 的,本来也不想折腾,顺手填了个申请表,没想到今天申请通过了,然后看了下 acme.sh 脚本的文档那边居然几天前就更新并支持了 Google,然后就又顺手申请了一下,这就记录一下。

Google 那边的原文:《Automate Public Certificates Lifecycle Management via RFC 8555 (ACME)

我们很高兴地宣布对我们的证书管理器预览版进行了增强,它允许 Google Cloud 客户为他们的工作负载获取公共证书,从而直接终止 TLS,或者为他们的跨云和本地工作负载获取公共证书。这是通过自动证书管理环境(ACME)协议实现的,该协议与证书颁发机构用来实现 TLS 证书的无缝自动生命周期管理的协议相同。

这些证书来自 Google Trust Services,当我们代表您使用全球外部 HTTPS 负载均衡器管理证书时,默认情况下使用相同的证书颁发机构(CA)。通过对托管证书和非托管证书使用相同的 CA,您可以确保这两种方案在使用您的服务的所有设备上都能同样好地工作。

这也使云客户能够获得更可靠的 TLS 部署。为此,它允许使用一个基于 ACME 的通用证书生命周期管理案例,而不会出现单点故障(仅依赖于一个证书颁发机构)。换句话说,现在可以放心地自由负载平衡或故障转移到多个 ACME CA。

当然是机翻的,将就看看吧(

反正和 Let’s Encrypt 差不多,而且还支持 IP 地址证书,不过好像还不支持特殊格式的那种域名,比如 emoji 的那种?另外 ECC 证书不是全链 ECC。总之用来尝鲜啦~

申请测试资格

首先需要一个 GCP 账号,在 https://cloud.google.com/ 可以注册。

然后去控制台,查看你的项目 ID(图中选中的位置)。

image-20220404195648594

有了账户之后去填申请表单。

https://docs.google.com/forms/d/1Euhflb5CXpuLik8czElhyAloTZJZobar4086dmlPqXA/viewform?ts=620a6854

填上你的电子邮件和你的项目 ID,等待咕咕给你发邮件,拿到这封邮件说明你已经成功通过了试炼,成为了下一任咳咳…下一位 Google Cloud Public Certificate 的使用者。

image-20220404200828984

注册测试账户

去这个网页点击 Enable 开启 API 权限

https://console.cloud.google.com/apis/library/publicca.googleapis.com?project=你的项目 ID

等圈圈转完并且显示API Enabled,然后打开 GCP 的命令行控制台输入

gcloud beta publicca external-account-keys create

弹窗允许,然后得到以下内容

Created an external account key
[b64MacKey: uAxSvJYW2Q9B_wd8VnDj7PbZMestCINXri35gkGypqF64a0lKfzhTLHEOo1RUcm
keyId: 3c6c432adc08439392a990bcf93f76b5]

申请证书

这一部分参考的我之前的教程的哦,使用 acme.sh 脚本。

安装环境

# Debian/Ubuntu
apt-get install openssl cron socat curl -y
apt-get update ca-certificates
systemctl enable cron
systemctl start cron

# CentOS
yum -q -y install openssl crontabs socat curl
yum update ca-certificates
systemctl enable crond
systemctl start crond

安装脚本

# 创建工作目录
mkdir -p /home/acme

# 安装 acme.sh 脚本
curl https://get.acme.sh | sh
source ~/.bashrc
source ~/.bash_profile
acme.sh  --upgrade  --auto-upgrade --log  "/home/acme/acme.log"

签发证书

这里还是以 CloudFlare 为例,[email protected] 改为你的邮箱,--eab-kid 后面填写之前申请到的 keyId,而 --eab-kid 后面填写之前申请到的b64MacKey

# 定义临时变量
# example.com 修改成你的域名
export DOMAIN="example.com"
# 下面的内容根据所使用的 DNS 服务商更改
export CF_Key="b8e8fff91ff445a1a238fc080797910b"
export CF_Email="[email protected]"

# 注册账户
acme.sh --register-account --server google \
-m "[email protected]" \
--eab-kid "xxxxxxx" \
--eab-hmac-key "xxxxxxx"
    
# 签发证书
mkdir -p /home/acme/${DOMAIN}
acme.sh --issue --server google --dns dns_cf -d ${DOMAIN} -d *.${DOMAIN}


# 移动证书
acme.sh --install-cert -d ${DOMAIN} \
--cert-file      /home/acme/${DOMAIN}/cert.pem  \
--key-file       /home/acme/${DOMAIN}/key.pem  \
--fullchain-file /home/acme/${DOMAIN}/fullchain.pem \
--reloadcmd     "echo \$(date -d \"\$current\" +%s) > /home/acme/${DOMAIN}/time.log"

成功之后证书在 /home/acme 目录下。除了签发证书里 register-account 这一部分,其它基本和之前一样。

证书信任问题

全部完成之后我在本地打开了证书,结果一看证书链没有信任,但是单独打开上一级证书和根证书,都是正常的,也不知道为什么。

image-20220404213646822

所以去下了一个根证书打开之后重新在电脑上安装了一下终于好了,不知道其它电脑会不会也有问题,所以在想放正式环境上用的话还是在过段时间吧。

image-20220404215142811

image-20220404214036974

总结

水的文章要什么总结嘛。感谢咕咕提供的免费证书~大切にします!

参考

acme.sh wiki

使用 GCP 公共 CA 签发证书初体验

Request certificates using Public Certificate Authority