コンテンツにスキップ

3 – HTTPS設定の構成

Cloudflareを通じて基本的なウェブサイトをプロキシした後、Terraformを使用してゾーン設定を調整できます。このチュートリアルでは、いくつかのオプションのHTTPS設定を構成し、更新された設定を将来のためにGitHubにプッシュします。

変更のために新しいGitブランチを使用し、適用する前にそれをmasterブランチにマージします。チームで作業している場合は、マージおよびデプロイする前に他の人に変更をレビューしてもらう機会としてこのステップを考慮することができます。また、TerraformをCI/CDシステムに統合して、別のCloudflareドメインを使用して自動的にテストを実行することもできます。

1. 新しいブランチを作成し、新しいゾーン設定を追加する

このステップでは、Terraform設定を変更して以下の設定を有効にします:

厳格モードでは、オリジンに有効なSSL証明書が必要です — Cloudflare Origin CAを使用して生成してください。

Terminal window
git checkout -b step3-https
新しいブランチ 'step3-https' に切り替えました
Terminal window
cat >> cloudflare.tf <<'EOF'
resource "cloudflare_zone_settings_override" "example-com-settings" {
zone_id = var.zone_id
settings {
tls_1_3 = "on"
automatic_https_rewrites = "on"
ssl = "strict"
}
}
EOF

2. 変更をプレビューしてマージする

変更を適用する前に、Terraformが提案している内容を確認します。以下の例の出力は、計算された値を無視するようにフィルタリングされています — この場合、デフォルト値を保持する設定です。

Terminal window
terraform plan | grep -v "(known after apply)"
計画の前にメモリ内のTerraform状態を更新しています...
更新された状態はこの計画を計算するために使用されますが、ローカルまたはリモートの状態ストレージに永続化されることはありません。
cloudflare_record.www: 状態を更新しています... [id=c38d3103767284e7cd14d5dad3ab8668]
------------------------------------------------------------------------
実行計画が生成され、以下に示されています。
リソースアクションは次の記号で示されます:
+ create
Terraformは以下のアクションを実行します:
# cloudflare_zone_settings_override.example-com-settings が作成されます
+ resource "cloudflare_zone_settings_override" "example-com-settings" {
+ zone_id = "<ZONE_ID>"
+ settings {
+ automatic_https_rewrites = "on"
+ ssl = "strict"
+ tls_1_3 = "on"
# (...)
}
}
計画:1を追加、0を変更、0を破棄。
------------------------------------------------------------------------
注意:この計画を保存するために -out オプションを使用しなかったため、Terraformは「terraform apply」を今実行した場合に正確にこれらのアクションを実行することを保証できません。

提案された変更は良さそうなので、これをmasterブランチにマージし、その後terraform applyで適用します。チームで作業している場合は、プルリクエストを要求し、提案された設定変更をピアレビューする機会としてこの機会を利用したいかもしれません。

Terminal window
git add cloudflare.tf
git commit -m "ステップ3 - TLS 1.3、常にHTTPSを使用、SSL厳格モードを有効にする。"
[step3-https d540600] ステップ3 - TLS 1.3、常にHTTPSを使用、SSL厳格モードを有効にする。
1ファイルが変更され、11行が追加されました
Terminal window
git checkout master
ブランチ 'master' に切り替えました
Terminal window
git merge step3-https
d26f40b..d540600 を更新中
ファストフォワード
cloudflare.tf | 11 +++++++++++
1ファイルが変更され、11行が追加されました
Terminal window
git push
オブジェクトをカウント中: 3, 完了。
最大8スレッドを使用してデルタ圧縮中。
オブジェクトを圧縮中: 100% (3/3), 完了。
オブジェクトを書き込み中: 100% (3/3), 501バイト | 0バイト/s, 完了。
合計3 (デルタ1), 再利用0 (デルタ0)
remote: デルタを解決中: 100% (1/1), 1つのローカルオブジェクトで完了。
To git@github.com:$GITHUB_USER/cf-config.git
d26f40b..d540600 master -> master

3. 変更を適用して確認する

変更を適用する前に、TLS 1.3で接続を試みてください。技術的には、デフォルト設定では接続できないはずです。このテストに従うには、BoringSSLに対してcurlをコンパイルする必要があります

Terminal window
curl -v --tlsv1.3 https://www.example.com 2>&1 | grep "SSL connection\|error"
* error:1000042e:SSL routines:OPENSSL_internal:TLSV1_ALERT_PROTOCOL_VERSION
curl: (35) error:1000042e:SSL routines:OPENSSL_internal:TLSV1_ALERT_PROTOCOL_VERSION

上記のように、TLS 1.3がまだゾーンで有効になっていないため、エラーが返されるはずです。terraform applyを実行して有効にし、再度試してください。

Terminal window
terraform apply --auto-approve
Terraformは選択したプロバイダーを使用して以下の実行計画を生成しました。
リソースアクションは次の記号で示されます:
+ create
Terraformは以下のアクションを実行します:
# cloudflare_zone_settings_override.example-com-settings が作成されます
+ resource "cloudflare_zone_settings_override" "example-com-settings" {
+ id = (適用後に知られる)
+ initial_settings = (適用後に知られる)
+ initial_settings_read_at = (適用後に知られる)
+ readonly_settings = (適用後に知られる)
+ zone_id = "e2e6491340be87a3726f91fc4148b126"
+ zone_status = (適用後に知られる)
+ zone_type = (適用後に知られる)
+ settings {
+ always_online = (適用後に知られる)
+ always_use_https = (適用後に知られる)
+ automatic_https_rewrites = "on"
+ binary_ast = (適用後に知られる)
+ brotli = (適用後に知られる)
+ browser_cache_ttl = (適用後に知られる)
+ browser_check = (適用後に知られる)
+ cache_level = (適用後に知られる)
+ challenge_ttl = (適用後に知られる)
+ ciphers = (適用後に知られる)
+ cname_flattening = (適用後に知られる)
+ development_mode = (適用後に知られる)
+ early_hints = (適用後に知られる)
+ email_obfuscation = (適用後に知られる)
+ filter_logs_to_cloudflare = (適用後に知られる)
+ h2_prioritization = (適用後に知られる)
+ hotlink_protection = (適用後に知られる)
+ http2 = (適用後に知られる)
+ http3 = (適用後に知られる)
+ image_resizing = (適用後に知られる)
+ ip_geolocation = (適用後に知られる)
+ ipv6 = (適用後に知られる)
+ log_to_cloudflare = (適用後に知られる)
+ max_upload = (適用後に知られる)
+ min_tls_version = (適用後に知られる)
+ mirage = (適用後に知られる)
+ opportunistic_encryption = (適用後に知られる)
+ opportunistic_onion = (適用後に知られる)
+ orange_to_orange = (適用後に知られる)
+ origin_error_page_pass_thru = (適用後に知られる)
+ origin_max_http_version = (適用後に知られる)
+ polish = (適用後に知られる)
+ prefetch_preload = (適用後に知られる)
+ privacy_pass = (適用後に知られる)
+ proxy_read_timeout = (適用後に知られる)
+ pseudo_ipv4 = (適用後に知られる)
+ response_buffering = (適用後に知られる)
+ rocket_loader = (適用後に知られる)
+ security_level = (適用後に知られる)
+ server_side_exclude = (適用後に知られる)
+ sort_query_string_for_cache = (適用後に知られる)
+ ssl = "strict"
+ tls_1_2_only = (適用後に知られる)
+ tls_1_3 = "on"
+ tls_client_auth = (適用後に知られる)
+ true_client_ip_header = (適用後に知られる)
+ universal_ssl = (適用後に知られる)
+ visitor_ip = (適用後に知られる)
+ waf = (適用後に知られる)
+ webp = (適用後に知られる)
+ websockets = (適用後に知られる)
+ zero_rtt = (適用後に知られる)
+ mobile_redirect {
+ mobile_subdomain = (適用後に知られる)
+ status = (適用後に知られる)
+ strip_uri = (適用後に知られる)
}
+ security_header {
+ enabled = (適用後に知られる)
+ include_subdomains = (適用後に知られる)
+ max_age = (適用後に知られる)
+ nosniff = (適用後に知られる)
+ preload = (適用後に知られる)
}
}
}
計画:1を追加、0を変更、0を破棄。
cloudflare_zone_settings_override.example-com-settings: 作成中...
cloudflare_zone_settings_override.example-com-settings: 作成中... [10秒経過]
cloudflare_zone_settings_override.example-com-settings: 14秒後に作成完了 [id=e2e6491340be87a3726f91fc4148b126]
適用完了!リソース:1が追加され、0が変更され、0が破棄されました。

以前と同じコマンドを試してください。コマンドは今成功するはずです。

Terminal window
curl -v --tlsv1.3 https://www.example.com 2>&1 | grep "SSL connection\|error"
* SSL connection using TLSv1.3 / AEAD-AES128-GCM-SHA256