AWS統合
このガイドでは、相互TLS検証 ↗を使用して、AWSアプリケーションロードバランサーに安全に接続するためのホスト名ごとの ↗認証済みオリジンプルの設定方法を説明します。
Cloudflareでこの設定をロールバックする方法についての指示も見つけることができます。
- すでにAWSアカウントとEC2 ↗が設定されている必要があります。
- このチュートリアルでは、カスタム証明書を生成するためにコマンドラインインターフェース(CLI)を使用し、Cloudflare認証済みオリジンプルを設定するためにAPI呼び出しを使用します。
- AWSの設定方法に関する最新のドキュメントについては、AWSドキュメント ↗を参照してください。
- 次のコマンドを実行して、AES-256暗号化を使用して4096ビットRSAプライベートキーを生成します。プロンプトが表示されたらパスフレーズを入力します。
openssl genrsa -aes256 -out rootca.key 4096- CAルート証明書を作成します。プロンプトが表示されたら、証明書に含める情報を入力します。
Common Nameフィールドには、ホスト名ではなくドメイン名を値として使用します。
openssl req -x509 -new -nodes -key rootca.key -sha256 -days 1826 -out rootca.crt- 証明書署名要求(CSR)を作成します。プロンプトが表示されたら、要求に含める情報を入力します。
Common Nameフィールドには、ホスト名を値として使用します。
openssl req -new -nodes -out cert.csr -newkey rsa:4096 -keyout cert.key- 前のステップで作成した
rootca.keyとrootca.crtを使用して証明書に署名します。
openssl x509 -req -in cert.csr -CA rootca.crt -CAkey rootca.key -CAcreateserial -out cert.crt -days 730 -sha256 -extfile ./cert.v3.ext- 証明書拡張ファイル
cert.v3.extが次のように指定されていることを確認します。
basicConstraints=CA:FALSErootca.certを S3バケット ↗にアップロードします。- EC2コンソールで信頼ストアを作成 ↗し、証明書をアップロードしたS3 URIを指定します。
- EC2インスタンスを作成し、HTTPDデーモンをインストールします。必要に応じてインスタンスタイプ ↗を選択します - AWS Free Tierに適格な最小インスタンスでも構いません。このチュートリアルは、t2.microとAmazon Linux 2023 ↗を使用した例に基づいています。
sudo yum install -y httpdsudo systemctl start httpd- アプリケーションロードバランサー用のターゲットグループ ↗を作成します。
- ターゲットタイプとしてインスタンスを選択します。
- ポート
HTTP/80を指定します。
- ターゲットグループの設定が完了したら、ターゲットグループが正常 ↗であることを確認します。
- ロードバランサーとリスナーを設定 ↗します。
- インターネット向けスキームを選択します。
- リスナーをポート
443に切り替え、mTLSオプションを利用可能にし、前のステップで作成したターゲットグループを選択します。 - デフォルトSSL/TLSサーバー証明書には、証明書をインポート > ACMにインポートを選択し、証明書のプライベートキーと本文を追加します。
- クライアント証明書の処理の下で、信頼ストアで検証を選択します。
- 設定を保存します。
- (オプション)次のコマンドを実行して、アプリケーションロードバランシングがクライアント証明書を要求していることを確認します。
openssl s_client -verify 5 -connect <your-application-load-balancer>:443 -quiet -stateまだ証明書をCloudflareにアップロードしていないため、接続は失敗するはずです(例:read:errno=54)。
curl --verboseを実行して、SSL/TLSハンドシェイク内にRequest CERT (13)が存在することを確認することもできます:
curl --verbose https://<your-application-load-balancer>...* TLSv1.2 (IN), TLS handshake, Request CERT (13):...MYCERT="$(cat cert.crt|perl -pe 's/\r?\n/\\n/'|sed -e 's/..$//')"MYKEY="$(cat cert.key|perl -pe 's/\r?\n/\\n/'|sed -e's/..$//')"
request_body=$(< <(cat <<EOF{"certificate": "$MYCERT","private_key": "$MYKEY","bundle_method":"ubiquitous"}EOF))
# 証明書をプッシュ
curl --silent \"https://api.cloudflare.com/client/v4/zones/$ZONEID/origin_tls_client_auth/hostnames/certificates" \--header "Content-Type: application/json" \--header "X-Auth-Email: $MYAUTHEMAIL" \--header "X-Auth-Key: $MYAUTHKEY" \--data "$request_body"- 使用するホスト名に対して証明書を関連付けるします。
curl --silent --request PUT \"https://api.cloudflare.com/client/v4/zones/$ZONEID/origin_tls_client_auth/hostnames" \--header "Content-Type: application/json" \--header "X-Auth-Email: $MYAUTHEMAIL" \--header "X-Auth-Key: $MYAUTHKEY" \--data '{ "config": [ { "enabled": true, "cert_id": "<CERT_ID>", "hostname": "<YOUR_HOSTNAME>" } ]}'- ゾーンで認証済みオリジンプル ↗機能を有効にします。
curl --request PATCH \"https://api.cloudflare.com/client/v4/zones/$ZONEID/settings/tls_client_auth" \--header "X-Auth-Email: $MYAUTHEMAIL" \--header "X-Auth-Key: $MYAUTHKEY" \--header "Content-Type: application/json" \--data '{ "value": "on"}'- ホスト名で認証済みオリジンプルを無効にするために
PUTリクエストを使用します。
curl -s --request PUT \"https://api.cloudflare.com/client/v4/zones/$ZONEID/origin_tls_client_auth/hostnames" \--header "Content-Type: application/json" \--header "X-Auth-Email: $MYAUTHEMAIL" \--header "X-Auth-Key: $MYAUTHKEY" \--data '{ "config": [ { "enabled": false, "cert_id": "<CERT_ID>", "hostname": "<YOUR_HOSTNAME>" } ]}'- (オプション)
GETリクエストを使用してクライアント証明書IDのリストを取得します。次のステップで削除したい証明書のIDが必要です。
curl "https://api.cloudflare.com/client/v4/zones/$ZONEID/origin_tls_client_auth/hostnames/certificates" \--header "X-Auth-Email: $MYAUTHEMAIL" \--header "X-Auth-Key: $MYAUTHKEY"- アップロードした証明書を削除するためにホスト名クライアント証明書を削除エンドポイントを使用します。
curl --request DELETE \"https://api.cloudflare.com/client/v4/zones/$ZONEID/origin_tls_client_auth/hostnames/certificates/$CERTID" \--header "X-Auth-Email: $MYAUTHEMAIL" \--header "X-Auth-Key: $MYAUTHKEY"