自行选择Cloudflare证书颁发机构
更新
目前Dnsflare面板已经集成了本文的功能,实现了可视化修改。
详见Cloudflare Partner管理面板部署 - 九曦笔记
前言
我在检查域名时意外发现,有的域名使用的是Let's Encrypt的证书,有的使用的却是Google的证书。
(当然最早的都是Cloudflare自行颁发的,根证书是Digicert,现在除了还未过期的,大部分应该都替换成Let's Encrypt的证书了。)
要知道,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
参数类型为boolean
,certificate_authority
参数类型为string
。
我们需要的就是certificate_authority
参数,其可选类型经测试,包括lets_encrypt
,digicert
。根据测试,若提供错误参数,会提示
{"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 calledX-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 calledX-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-Email
和X-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 Encrypt | 90days | ✅(新根证书老设备❎) | ✅(DNS接入Cloudflare) | Cloudflare同时提供ECC和RSA |
Google Trust Services | 90days | ✅(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