几天前 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(图中选中的位置)。
有了账户之后去填申请表单。
https://docs.google.com/forms/d/1Euhflb5CXpuLik8czElhyAloTZJZobar4086dmlPqXA/viewform?ts=620a6854
填上你的电子邮件和你的项目 ID,等待咕咕给你发邮件,拿到这封邮件说明你已经成功通过了试炼,成为了下一任咳咳…下一位 Google Cloud Public Certificate 的使用者。
注册测试账户
去这个网页点击 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 为例,admin@example.com
改为你的邮箱,--eab-kid
后面填写之前申请到的 keyId
,而 --eab-kid
后面填写之前申请到的b64MacKey
# 定义临时变量
# example.com 修改成你的域名
export DOMAIN="example.com"
# 下面的内容根据所使用的 DNS 服务商更改
export CF_Key="b8e8fff91ff445a1a238fc080797910b"
export CF_Email="admin@example.com"
# 注册账户
acme.sh --register-account --server google \
-m "admin@example.com" \
--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
这一部分,其它基本和之前一样。
证书信任问题
全部完成之后我在本地打开了证书,结果一看证书链没有信任,但是单独打开上一级证书和根证书,都是正常的,也不知道为什么。
所以去下了一个根证书打开之后重新在电脑上安装了一下终于好了,不知道其它电脑会不会也有问题,所以在想放正式环境上用的话还是在过段时间吧。