🐥
Cloudflare Gateway TLS インスペクションと不正なサーバー証明書
はじめに
Cloudflare Gateway で TLS インスペクションをする時の話です。
HTTP ポリシーの Allow アクションに Untrusted certificate action というオプションがあります。
これは TLS インスペクションしようとした接続先のサーバー証明書が不正だった場合の動作を定義します。
設定オプション
Error
Block
Pass through
のいずれかで動作させることができます。
- Error: Gateway のエラーページ
526
を表示(デフォルトと同じ) - Block: Gateway の Block ページを表示
- Pass through: エラーや警告なくコンテンツを表示
設定手順
- カスタムルート CA の導入(Pass through を使う場合のみ)
- Gateway HTTP ポリシーの定義
- Allow のオプションで Untrusted certificate action を切り替え
カスタムルート CA の作成と Gateway へのアップロード
Devdocs では openssl を使っていますが、cfssl を使うとより楽に Cloudflare API 指定のボディ形式に格納できそうです。👉API Endpoint
作成した CA はアップロードするまでにしておきます。
# CSR 準備
$ cat csr.json
{
"CN": "Gateway Signer for Untrusted Certificates",
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"C": "JP",
"O": "MyMyMy"
}
]
# CA 作成とアップロード
$ cfssl genkey -initca csr.json | \
tee >(cfssljson -bare ca) | \
jq '{name: "alt_ca_for_badssl", certificates: .cert, private_key: .key, ca: true}' | \
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/mtls_certificates" -H "X-Auth-Email: $EMAIL" -H "X-Auth-Key: $API_KEY" -H "Content-Type: application/json" --data @- -s | \
jq '.'
## 応答の ID をメモ
{
"success":true,
"errors":[],
"messages":[],
"result":{
"id":"910c209e-3568-4a03-8a4d-17b901778b2d",
"name":"alt_ca_for_badssl",
"issuer"
:
## 作成された ca.pem は WARP デバイスに展開
$ ls
ca-key.pem ca.csr ca.pem csr.json
WARP デバイスにカスタムルート証明書を展開
WARP デバイスにカスタムルート証明書(ca.pem)を展開します。
(ご利用の MDM や Active Directory GPO 、手動など)
TLS インスペクトに利用する CA をカスタムルート CA に切り替え
アップロードしたカスタムルート CA の ID を custom_certificate
で有効化します("enabled": true
, PATCH
)。👉API Endpoint
$ curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/configuration" -H "X-Auth-Email: $EMAIL" -H "X-Auth-Key: $API_KEY" -H "Content-Type: application/json" \
--data '{
"settings": {
"custom_certificate": {
"enabled": true,
"id": "910c209e-3568-4a03-8a4d-17b901778b2d"
}
}
}' -X PATCH
Gateway HTTP ポリシーの設定
ポリシーを設定します。
badssl.com に不正な証明書を持ったサーバーが用意されているので対象にします。
Action を Allow にし、Untrusted certificate action を切り替えます。
テスト
Error
デフォルトと同じ状態で、Gateway のエラー(526)が表示されます。
Block
Pass through
アップロードしたカスタムルート CA で署名されています。信頼できる証明書ストアに登録されているため警告はでません。
試しに証明書ストアからカスタムルート証明書を消すとブラウザーが警告が出ました。
以上
Discussion