Tominysun

更新

目前Dnsflare面板已经集成了本文的功能,实现了可视化修改。
详见Cloudflare Partner管理面板部署 - 九曦笔记

前言

我在检查域名时意外发现,有的域名使用的是Let's Encrypt的证书,有的使用的却是Google的证书。
(当然最早的都是Cloudflare自行颁发的,根证书是Digicert,现在除了还未过期的,大部分应该都替换成Let's Encrypt的证书了。)
批注 2023-02-01 182147.png
批注 2023-02-01 182258.png
要知道,Google的根证书可是Globalsign的,比Let's Encrypt的根证书更加广泛受信。
因此,我开始查找Cloudflare的文档,但无所获。
Cloudflare官方提供了在控制面板处切换证书提供商的方法,但是需要为每个域名购买10$/mo的高级证书管理器...
接下来简单介绍下Cloudflare官方Docs中涉及的部分api接口,不想了解的可以直接跳转到“自由”部分
部分资料来自一篇博文,在此感谢!

Universal SSL Settings for a Zone

一个域中的通用SSL配置

Universal SSL Settings Details (GET)

通用SSL配置详情(GET)

https://api.cloudflare.com/client/v4/zones/{zone_identifier}/ssl/universal/settings

Example 范例

curl --request GET \
  --url https://api.cloudflare.com/client/v4/zones/zone_identifier/ssl/universal/settings \
  --header 'Content-Type: application/json' \
  --header 'X-Auth-Email: '

Edit Universal SSL Settings (PATCH)

编辑通用SSL配置(PATCH)

https://api.cloudflare.com/client/v4/zones/{zone_identifier}/ssl/universal/settings

Example 范例

curl --request PATCH \
  --url https://api.cloudflare.com/client/v4/zones/zone_identifier/ssl/universal/settings \
  --header 'Content-Type: application/json' \
  --header 'X-Auth-Email: ' \
  --data '{
  "enabled": true
}'

补充
请求数据中的Data部分,参数类型为application/json,总共包含两个参数,一是enabled,二是certificate_authority
enabled参数类型为booleancertificate_authority参数类型为string
我们需要的就是certificate_authority参数,其可选类型经测试,包括lets_encryptgoogledigicert

根据测试,若提供错误参数,会提示{"success":false,"errors":[{"code":1007,"message":"Invalid certificate authority setting. Valid options are: digicert, sectigo, and lets_encrypt"}],"messages":[],"result":null}
但推测实际上sectigo的证书应该已经替换为Google Trust Service了,相关提示可能还未修改。

若替换后想立刻更新证书或者遇到证书长时间不颁发等问题,可以向上述请求地址发送"enabled":false,等待五分钟后,再次请求"enabled":true,等待一段时间后重新签发相关证书。(Cloudflare官方提供)
非必要或业务相关,强烈不建议使用上述方法。该方法禁用通用证书后会删除相关证书,若无自定义证书上传将会导致相关服务无法通过HTTPS访问,重新签发证书视情况可能需要15min-6h左右,由相关业务域名数量以及是否NS接入决定。(非NS接入不会签发泛域名证书,全部子域名签发完毕时间较长)

Request

请求

Security: API Key (api_email)
An API key is a token that you provide when making API calls. Include the token in a header parameter called X-Auth-Email.
Example: X-Auth-Email: 123
Security: API Key (api_key)
An API key is a token that you provide when making API calls. Include the token in a header parameter called X-Auth-Key.
Example: X-Auth-Key: 123
Security: Bearer Auth
Provide your bearer token in the Authorization header when making requests to protected resources.
Example: Authorization: Bearer 123

简要说明

若使用Global API Key,则需要在请求头中提供X-Auth-EmailX-Auth-Key
为了账户安全,建议使用API令牌(Bearer Auth),此时只需在请求头中提供Authorization即可。

自由(白嫖)

Mac/Linux

curl -sX PATCH "https://api.cloudflare.com/client/v4/zones/[DOMAIN_ZONE_ID_HERE]/ssl/universal/settings" -H "X-Auth-Email: [CLOUDFLARE_EMAIL_HERE]" -H "X-Auth-Key: [GLOBAL_API_KEY_HERE]" -H "Content-Type: application/json" --data '{"certificate_authority":"google"}'

Windows

curl -sX PATCH "https://api.cloudflare.com/client/v4/zones/[DOMAIN_ZONE_ID_HERE]/ssl/universal/settings" -H "X-Auth-Email: [CLOUDFLARE_EMAIL_HERE]" -H "X-Auth-Key: [GLOBAL_API_KEY_HERE]" -H "Content-Type: application/json" --data "{\"certificate_authority\":\"google\"}"

对比

SSL颁发机构有效期广泛受信泛域名兼容性
Let's Encrypt90days✅(新根证书老设备❎)✅(DNS接入Cloudflare)Cloudflare同时提供ECC和RSA
Google Trust Services90days✅(Globalsign)✅(DNS接入Cloudflare)RSA
Digicert(Baltimore CyberTrust)365days✅(Digicert)✅(DNS接入Cloudflare)ECC
(上述表格对比来自笔者自身体验和相关非权威(官方)来源,数据谬误烦请指正!)

链接

https://blog.feizhuqwq.com/46
https://community.cloudflare.com/t/i-want-to-use-google-trusts-ssl-certificate-instead-of-lets-encrypt/420446
https://developers.cloudflare.com/api/operations/custom-ssl-for-a-zone-list-ssl-configurations

添加新评论