本文最后更新于 302 天前,其中的信息可能已经有所发展或是发生改变。
Cloudflare Free Plan 目前支持三个证书颁发机构,即
- Digicert (sni.cloudflare.com 默认使用这个)
- Let’s Encrypt
- Google GTS (Google Trust Services)
- (第四个
Sectigo
, 但是这个 CA 不支持免费用户,需要 Enterprise 订阅)
三个都是随机签署的,签到前两个的可能性更大,其中只有 Google 在大陆有 OCSP 服务器,可以一定程度上优化大陆访客的体验;对于购买了 Advanced Certificate Manager (高级证书管理, 10USD/mo) 的用户可以手动在面板切换证书,但是免费用户不支持,不过可以通过请求 API 的方式更换,以上三个 CA 全部支持。
OCSP (Online Certificate Status Protocol / 在线证书状态协议)
OCSP 是一个用于获取X.509数字证书撤销状态的协议,根据该协议,访问网站前浏览器会请求 OCSP 检查证书可用状态,部分 CA 的 OCSP 在中国大陆无法正常访问,会造成网站的打开缓慢,而 Google 在中国大陆设有 OCSP 服务器且正常提供服务。
Cloudflare 用来执行这个操作的 API 是 https://api.cloudflare.com/client/v4/zones/<ZoneID>/ssl/universal/settings
,请求方式是 curl,所以可以通过 curl 下面这个 url 来更换证书
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/<ZoneID>/ssl/universal/settings" \
-H "X-Auth-Email: <Cloudflare Email>" \
-H "X-Auth-Key: <Global API Key>" \
-H "Content-Type: application/json" \
--data '{"enabled":true,"certificate_authority":"google"}'
其中
-
<ZoneID>
为 Cloudflare 控制台某个域名的 Overview (总览) 页面显示的 「API Zone ID」 <Cloudflare Email>
为注册 Cloudflare 的邮箱<Global API Key>
在 这里 查询"google"
字段代表签发 GTS 证书,如果需要另外两个 CA 的证书可以分别改为"digicert"
/"lets_encrypt"
<ZoneID>
<Global API Key>
,dash.cloudflare.com/profile/api-tokens如果返回以下字段则代表已经更改成功
{"result":{"enabled":true,"certificate_authority":"google"},"success":true,"errors":[],"messages":[]}
如果此时你使用浏览器隐私标签或另一个浏览器打开但并没有看到证书更新,可以去控制台看一下是否已经切换,没切换的话可以使用以下方式重新请求 API (把最后一行的 true
改为 false
重新提交)
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/<ZoneID>/ssl/universal/settings" \
-H "X-Auth-Email: <Cloudflare Email>" \
-H "X-Auth-Key: <Global API Key>" \
-H "Content-Type: application/json" \
--data '{"enabled":false,"certificate_authority":"google"}'
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/<ZoneID>/ssl/universal/settings" \
-H "X-Auth-Email: <Cloudflare Email>" \
-H "X-Auth-Key: <Global API Key>" \
-H "Content-Type: application/json" \
--data '{"enabled":true,"certificate_authority":"google"}'
随后再次更换浏览器或使用隐私模式打开你的域名,应该就已经更新了证书了(如果还没更新的话,检查控制台是否存在两个证书,删掉你不想要的那个即可)