目的
ドキュメントで英語の文字だけを読んでもわかりづらい部分があるので、フロー図を作ってわかりやすく整理しておきます。
(ついでに Qiita で mermaid
使う練習)
カスタムホスト作成(Add Custom Hostname)
- Verify custom hostnames · Cloudflare for Platforms docs
- Validate certificates · Cloudflare for Platforms docs
カスタムホスト作成時には、このようなフローになります。
以下、ポイントを解説します。
- カスタムホスト利用開始時に、ダウンタイムが許容されるかで
Pre-validation
を実施すべきかを決める - ダウンタイムが許容される場合
- どの検証方法も使えるが、先に DNS 宛先を設定し、自動
Auto
検証を使うことで手間を省くことできる(もちろん他の検証方法も利用可能)
- どの検証方法も使えるが、先に DNS 宛先を設定し、自動
- ダウンタイムが許容されない場合
- 両方の検証において、事前に
Pre-validation
を実施し、ホスト名と証明書の両方がActive
であることを確認した上で、DNS 宛先を切り替えることでダウンタイムを回避できる
- 両方の検証において、事前に
- ワイルドカード証明書を使う場合には、TXT ベースの DCV(証明書ドメイン認証)が必須
固定 IP (Static IP) オプションの必要性
Static IP addresses: Cloudflare sets static IP addresses for your domain. For more details, contact your account team.
Zone Apex など、DNS 宛先設定に A/AAAA レコードを使う必要がある場合は 固定 IP (Static IP) オプションを別途追加して利用することが望ましい
- 通信フローに関して、A/AAAA レコードの宛先が Cloudflare IP Ranges の範囲であれば、問題なく機能するが Cloudflare IP Ranges が変更されない保証はない
- 固定 IP (Static IP) オプションであれば、固定である(変更されない)ことが保証される
- Apex Proxying によるホスト名検証に関しては初回の一度きり完了すればよいが、該当の SaaS ゾーンに紐づいた Apex Proxying 用の IP に変更があった場合は、新規カスタムホスト名検証時に都度変更を周知する必要がある
証明書更新(Renew)
証明書更新時には、このようなフローになります。
自動更新(Auto-Renew)となるように設計することが推奨です。
手動による検証再始動
You can send a PATCH request to request an immediate validation check on any certificate. The PATCH data only needs include the same ssl object as the original request.
ダッシュボードから Custom Hostname > Refresh をクリックするか、同じ ssl
設定で PATCH
リクエストを送ることで、Hostname / Certificate validation check を再始動できます。
(一旦、Hostname validation check が Active
になった後は、Hostname validation check は再始動しません。)
export EMAIL='YOUR_EMAIL'
export APIKEY='YOUR_APIKEY'
export ZONE_ID='YOUR_ZONE_ID'
export CUSTHOST_UUID='YOUR_CUSTOM_HOSTNAME_ID'
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/custom_hostnames/$CUSTHOST_UUID" \
-X 'PATCH' \
-H "X-Auth-Email: $EMAIL" \
-H "X-Auth-Key: $APIKEY" \
-H "Content-Type: application/json" \
--data-raw '{"ssl":{"method":"txt","type":"dv","settings":{"min_tls_version":"1.2"}}}'
【参考】HTTP 検証エンドポイント / TXT 検証レコードの例
- Hostname validation check
- HTTP token
- url:
http://$CUSTOM_HOSTNAME/.well-known/cf-custom-hostname-challenge/<custom-hostname-UUID>
- url:
- TXT record
- name:
_cf-custom-hostname.$CUSTOM_HOSTNAME
- name:
- HTTP token
- Certificate validation check
- HTTP token
- name:
http://$CUSTOM_HOSTNAME/.well-known/acme-challenge/<TOKEN>
- Ref. Challenge Types - Let's Encrypt
- name:
- TXT record (Manual)
_acme-challenge.$CUSTOM_HOSTNAME
- TXT based DCV Delegation
- CNAME:
_acme-challenge.$CUSTOM_HOSTNAME
- target:
$CUSTOM_HOSTNAME.<Target-UUID>.dcv.cloudflare.com
- Ref. Out now! Auto-renew TLS certificates with DCV Delegation
- CNAME:
- HTTP token