什么是域控制驗證(DCV)?
在公共信任的證書頒發(fā)機構(gòu)為主機名頒發(fā)證書之前,請求者必須證明他們可以控制該主機名。 (在此上下文中,域名和主機名可以互換使用)
有幾種方法可以用來完成此過程,Cloudflare使用的主要方法是:
HTTP令牌
CNAME DNS記錄
TXT DNS記錄
使用Cloudflare完成域的DCV
通過更新您的注冊商以使用Cloudflare名稱服務(wù)器來注冊Cloudflare時,Cloudflare能夠代表您自動處理DCV。
對于使用CNAME設(shè)置的域,此過程并不那么簡單。
更改證書訂單的DCV方法主要是CNAME設(shè)置區(qū)域的主題。
默認情況下,在CNAME設(shè)置下使用Universal SSL,Cloudflare將放置一個HTTP令牌來完成DCV。證書頒發(fā)機構(gòu)可在以下情況下立即使用此令牌:
主機名具有從域名權(quán)威DNS到Cloudflare的CNAME。
在Cloudflare的DNS設(shè)置中,主機名是橙云。
這意味著默認情況下,在頒發(fā)證書之前,給定主機名的上述各項必須完整。
據(jù)報告,一旦更改DNS,頒發(fā)證書的過程非常快,但是您可能需要堅定保證,在進行轉(zhuǎn)換之前,您的證書已準備就緒,以避免任何潛在的停機時間。
使用客戶端API,我們可以更改驗證方法,以允許在通過實時流量之前頒發(fā)證書。
Apex驗證
即使不希望為該主機名提供代理服務(wù),除非使用Cloudflare切換到完整DNS配置,但完成以上針對域最高端的過程將使我們能夠為所有子域完成DCV。
作為最佳實踐,即使您不打算在CNAME設(shè)置中代理頂點的流量,也最好根據(jù)頂點進行驗證。
否則,需要手動驗證每個子域。
1.檢查驗證方法
首先,找到cert_pack_uuid您要更改驗證方法的順序。
curl -sX GET \
"https://api.cloudflare.com/client/v4/zones/:zone_id/ssl/verification/" \
-H 'X-Auth-Email: YOUR_EMAIL' \
-H 'X-Auth-Key: API_KEY'
{
"result": [
{
"certificate_status": "pending_validation",
"cert_pack_uuid": "4228d4df-b9c7-47bb-8903-ff76452458b1",
"validation_method": "http",
"validation_type": "dv",
"verification_info": {
"http_url": "http://example.com/.well-known/pki-validation/ca3-15cd5a33b4fd469784851d8c021e3ee3.txt",
"http_body": "ca3-d4db80cdcb40496ab71a66a0ab985306"
},
"hostname": "example.com"
},
],
"success": true,
"errors": [],
"messages": []
}
這向我們顯示了創(chuàng)建的掛單,并且完成驗證所需的HTTP DCV信息位于verification_info元素中。
您可以在此處將驗證方法更改為CNAME或TXT記錄。
讓我們繼續(xù),將DCV方法更改為CNAME。
2.變更確認方法
該端點將修改所選證書訂單的驗證方法。請注意validation_method在請求正文中設(shè)置的值。
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/:zone_id/ssl/verification/<cert_pack_uuid>" \
-H "X-Auth-Email: user@example.com" \
-H "X-Auth-Key: API_KEY" \
-H "Content-Type: application/json" \
--data '{"validation_method":"cname"}'
{
"result": {
"certificate_status": "pending_validation",
"cert_pack_uuid": "4228d4df-b9c7-47bb-8903-ff76452458b1",
"validation_method": "cname",
"validation_type": "dv",
"verification_info": {
"cname": "_ca3-e82a555f7fe04fb394d2b14c7eb24946.example.com",
"cname_target": "dcv.digicert.com"
},
"status": "pending_validation",
"hostname": "example.com"
},
"success": true,
"errors": [],
"messages": []
}
然后,您可以verification_info在權(quán)威DNS中獲取并設(shè)置CNAME記錄的值??梢酝ㄟ^使用執(zhí)行此類手動DNS查找來驗證這一點dig。
$ dig _ca3-e82a555f7fe04fb394d2b14c7eb24946.example.com cname +short
dcv.digicert.com.
3.驗證狀態(tài)現(xiàn)在處于活動狀態(tài)
一旦通過證書頒發(fā)機構(gòu)驗證,“獲取驗證方法”端點將按以下順序顯示訂單:
curl -sX GET \
"https://api.cloudflare.com/client/v4/zones/:zone_id/ssl/verification/" \
-H 'X-Auth-Email: YOUR_EMAIL' \
-H 'X-Auth-Key: API_KEY'
{
"result": [
{
"certificate_status": "active",
"cert_pack_uuid": "4228d4df-b9c7-47bb-8903-ff76452458b1",
"validation_method": "http",
"validation_type": "dv",
"hostname": "example.com"
}
],
"success": true,
"errors": [],
"messages": []
}
狀態(tài):active表示證書已部署到Cloudflare的邊緣網(wǎng)絡(luò),并且將HTTP流量代理到Cloudflare后將立即提供證書。