使用 ACME 协议签发 GTS 证书

前言

ACME 协议是由 Github 项目 acme.sh 建立的,基于 HTTP 协议自动管理 SSL 证书的生命周期,俗称自动续签。

2022 年 3 月 30 日,谷歌 GTS(Google Trust Services)在其博客上发表了名为:Automate Public Certificates Lifecycle Management via RFC 8555 (ACME)。即推出了基于 RFC 8555 (ACME)的证书签发服务。

文章大意是:Google Cloud 推出了自动化的公共证书管理服务,现在大家可以通过 ACME 协议申请 Google Trust Services 的证书了。

那么,想要使用来自谷歌的技术红利的话,那就敬请看下文吧。

2022-04-16
00:00
发布文章
第一个版本,尚未作出修改

特点

通过博文的内容,我们可以得知该 CA 服务具有以下特点:

  1. 免费,且仅支持 ACME 协议进行申请
  2. 支持多域名及通配符(与 Let's Encrypt 相同)
  3. 仅支持 DNS 验证和文件验证,不支持邮件验证(与 Let's Encrypt 相同)
  4. 支持 IP 地址,但是仅允许该 IP 地址块的所有者进行验证(Let's Encrypt 暂不支持)
  5. 不支持 IDN (使用 Punycode 进行编码的域名,形如 xn--1.xn--2)(Let's Encrypt 已经支持)
  6. 目前不提供完整 ECDSA 链,若 CSR 为 ECC,则仅最终用户证书为 ECC(Let's Encrypt 已经支持全链 ECC)
  7. 证书有效期在 1 - 90 天内可选,但是目前 ACME 客户端似乎都还不支持设置证书有效期
  8. 国内的 OCSP 由北京和上海的谷翔机房负责,未受阻断且速度不错
  9. 由于谷歌 GTS 的 ACME Endpoint 被阻断,国内服务器需要使用特殊手段进行申请

使用

准备

由于该项服务仍处于测试阶段,所以想要使用需要进行申请审核。

先准备一个 Google Cloud Platform 账号,可以使用 Google 账号直接登录,从官网进入需要验证信用卡激活账户,但是只是申请使用 GTS 的 API 服务只需要一个账户。直接进入以下页面,创建一个项目:https://console.cloud.google.com/projectcreate

项目名称随意,项目 ID 可选择随机或者自定义,日后需要。

创建好了之后,到这个页面填写申请表:https://docs.google.com/forms/d/1Euhflb5CXpuLik8czElhyAloTZJZobar4086dmlPqXA/

只需要如实填写项目 ID,其他随意。

等待一天左右(工作日更快)就会收到以下来信,提示您已经通过审核,如下图:

 

随后进入您的 Google Cloud Platform 项目控制台,进入这个地址:https://console.cloud.google.com/apis/library/publicca.googleapis.com?project=<您的项目 ID>

点击启用服务,即可对您的项目开启 GTS 证书申请服务的 API 了。

点击右上角的按钮,进入 Cloud Shell 终端,接着就会进入 Google Cloud Platform 的终端系统,如下图:

接着按照提示,输入

 gcloud config set project <您的项目 ID>

会弹出提示让您授权项目访问权限,如下图,授权即可:

(如果之前设置过,下次会自动进入项目不需要授权。)

执行下面的指令,会获取您当前项目的密钥,用于后续验证账户:

# 获取项目密钥(使用一次后会自动失效)
 gcloud alpha publicca external-account-keys create

之后会返回以下内容:

Created an external account key
[b64MacKey: <机密内容,不予展示>
keyId: <机密内容,不予展示>]

保存项目密钥的 b64MacKey 和 keyId,转到服务器端进行获取。

申请

ACME 有很多客户端可以进行证书申请,这里演示 acme.sh:

如下教程基于 Ubuntu Server 20.04 LTS 系统进行演示,使用腾讯云香港 CVM 作为实例

acme.sh 的 Github 项目仓库,详细用法请参阅此项目 Wiki:

使用 acme.sh 签发

1 . 安装

执行以下命令以安装脚本

# 使用 wget 命令安装
wget -O - https://get.acme.sh | sh

# 使用 curl 命令安装
curl https://get.acme.sh | sh

# 完成后重启 SSH 连接或者执行下列代码重载 .bashrc
source ~/.bashrc

命令行输出 Install success! 即为安装成功,直接运行 acme.sh 查看是否可以使用。

1.2 . 导入 DNS 服务商的 API 进行自动续签(可选)

详情请查阅官方文档(acme.sh wiki

2. 注册 ACME 账户

 acme.sh --register-account -m <你的邮箱> --server google \
--eab-kid < keyId > \
--eab-hmac-key < b64MacKey >

执行以上命令将会在 Google 的服务器注册 ACME 账户,成功后效果如下:

3. 申请证书

通常情况下,如果您设置了 DNSAPI,只需按照下列命令,即可完成签发

acme.sh --issue --server google \
-d <你的域名> --dns <DNSAPI 接口名称> --keylength ec-256

如果想要自行进行 DNS 解析,执行下列命令:

acme.sh --issue --server google --dns  \
-d <你的域名> --yes-I-know-dns-manual-mode-enough-go-ahead-please --keylength ec-256

按照输出的提示进行解析即可,如下图:

进入 DNS 服务商的控制台,按照提示进行解析,如下图:

按照提示内容进行解析后,再次执行下列命令进行确认:

acme.sh --renew --server google \
-d <你的域名> --yes-I-know-dns-manual-mode-enough-go-ahead-please --ecc

(注意域名需要和申请时相同)

以上两种方法,成功后会提示以下内容:

使用 WinSSH 等工具,即可将签发的证书下载到本地进行使用。

3.1 可选参数

-d 即签发域名的参数,可创建多个,支持使用 *.example.com 类的通配符

--keylength 即签发域名的算法,支持以下算法:

  1. ec-256 (prime256v1, "ECDSA P-256")
  2. ec-384 (secp384r1, "ECDSA P-384")
  3. ec-521 (secp521r1, "ECDSA P-521")

如未配置,即为默认的 RSA 2048 密钥算法。

使用 certbot 签发

详细文档查看 certbot 官方

1. 安装

使用以下命令进行 Certbot 在 Ubuntu Server 20.04 LTS 环境下的安装:

 apt install -y certbot

安装完成后,输入 certbot -h 命令以测试是否部署成功,如下图:

2. 注册 ACME 账户

输入以下命令即可在 Certbot 注册并保存 ACME 账户:

certbot register --email <你的邮箱> --no-eff-email --server "https://dv.acme-v02.api.pki.goog/directory" --eab-kid "<keyId>" --eab-hmac-key "<b64MacKey>"

执行后会需要您同意 GTS 的协议,输入 a 即可,完成后效果如下图:

 

2.1. 部署 DNS 服务商插件(可选)

与 acme.sh 不同,certbot 并不自带 DNSAPI 的自动部署,如需该功能请自行查阅官方文档:User Guide — Certbot 1.26.0 documentation (eff-certbot.readthedocs.io)

3. 签发证书

如果您部署了 DNS 服务商插件,请自行参阅其提供的验证参数,如果手动解析 DNS,请执行以下命令:

 certbot certonly -d <你的域名> --server "https://dv.acme-v02.api.pki.goog/directory" --manual

执行后会询问您是否同意协议,如下图:

 

如果同意,需要您在网站目录下按照提示添加文件,返回信息如下图:

文件创建完成后进行回车,即可完成验证。

3.1 可选参数

Certbot 提供了大量可选的执行参数,详情可参阅 User Guide — Certbot 1.26.0 documentation (eff-certbot.readthedocs.io),可在此查阅如何签发 ECDSA 密钥算法的证书,因篇幅问题不再赘述。

完全自动化部署

Nginx 服务器

使用 acme.sh 提供的 Nginx 模式,可以自动部署到 Nginx 的网站配置文件,实现完全自动化。

通过执行以下命令,即可使用 Webroot 模式,在自动签发证书时自动创建验证文件,以达成自动签发:

acme.sh --issue --server google -d <您的域名> --nginx <网站配置文件路径>

签发文件到网站证书存放目录

使用此方法可防止 acme.sh 无法正确修改网站配置时使用,执行以下命令:

acme.sh --install-cert --server google -d <你的域名> \
--key-file <您的证书目录>/<密钥文件名>.pem \
--fullchain-file <您的证书目录>/<证书文件名>.pem \
--reloadcmd "service nginx force-reload"

# 如需证书链,请添加以下参数
--cert-file <您的证书目录>/<证书链文件名>.pem \

Apache 服务器

使用 acme.sh 提供的 Apache 模式,可以自动部署到 Apache 的网站配置文件,实现完全自动化。

通过执行以下命令,即可使用 Webroot 模式,在自动签发证书时自动创建验证文件,以达成自动签发:

acme.sh --issue --server google -d <您的域名> --apache

签发文件到网站证书存放目录

使用此方法可防止 acme.sh 无法正确修改网站配置时使用,执行以下命令:

acme.sh --install-cert --server google -d <你的域名> \
--cert-file <您的证书目录>/<证书链文件名>.pem \
--key-file <您的证书目录>/<密钥文件名>.pem \
--fullchain-file <您的证书目录>/<证书文件名>.pem \
--reloadcmd "service apache2 force-reload"

计划任务参数

如果您使用宝塔部署计划任务,参阅下图:

结言

谷歌 GTS 新公开的 SSL 证书还是很不错的,使用 GlobalSign Root CA 作为根证书,兼容性极佳,下至 Windows XP 系统依旧可以访问,并且在国内有 OCSP 服务器,有利于访客的体验。可以使用 ACME 协议进行自动签发,一次折腾,后续都不需要操心了。这样的好处希望各大互联网大厂都能提供免费 CA 服务,造福于广大站长。

文章完成进度
100%

- EOF -

版权声明:本文归 Gong_cx 版权所有|如未注明,均为原创,盗用者必究|本网站采用 BY-NC-SA 4.0 协议进行授权

评论

  1. 博主
    Windows Edge 100.0.1185.39
    1月前
    2022-4-16 0:09:04

    啊哈哈哈,寄汤来咯!热心提示:博主已经有 8 分钟没有更新了!

本文评论已关闭
上一篇
下一篇