クライアント証明書を設定して、クライアントと Edge Security Acceleration (ESA) POP 間の相互 TLS 認証 (mTLS) を有効にし、アクセスセキュリティを強化します。
ユースケース
mTLS は、通信を行う双方に強力なアイデンティティ検証が必要な、高セキュリティのシナリオに適しています。
mTLS を使用する場合:
-
通信の双方が、サービス、デバイス、システムなど、管理下にあるエンティティである場合。
-
一時的なトークンではなく、強力かつ永続的なアイデンティティのバインディングが必要な場合。
-
CA、証明書配布、失効などを含む公開鍵基盤 (PKI) を一元管理できる場合。
代表的なユースケース:
-
マイクロサービスにおけるサービス間認証。たとえば、注文サービスと決済サービス間の相互アイデンティティ検証です。一般的な技術:Istio、Linkerd、Kubernetes。
-
API ゲートウェイからオリジンへの接続。たとえば、社内エンタープライズ API、オープンバンキング、サードパーティ SaaS 連携です。
-
IoT デバイスとクラウド間の通信。
-
企業ネットワークにおけるゼロトラストアクセス。従来の VPN 信頼モデルを置き換えます。
-
PCI-DSS、HIPAA、GDPR などの標準に準拠する必要がある金融、決済、医療システム。
mTLS を使用しない場合:
-
一般的なブラウザからアクセスされるパブリック Web サイト (EC、ニュースなど)。一般ユーザーに対する証明書管理は現実的ではありません。
-
強力なアイデンティティ要件がないオープンな REST API。代わりに OAuth 2.0 または API キーを使用します。
-
低セキュリティのテスト環境。基本認証を使用した片方向 TLS の方が簡単です。
mTLS の仕組み
ESA では、mTLS はクライアントと ESA POP 間にのみ適用されます。POP が TLS ハンドシェイクを終端し、クライアント証明書を検証したうえで、証明書をパススルーせずにリクエストをオリジンへ転送します。
クライアント証明書をオリジンまでパススルーするエンドツーエンドの mTLS を使用する場合は、Layer 4 プロキシ (Enterprise plan) を使用します。このプロキシは TLS を終端せず、パススルーモードで TCP トラフィックを転送します。
クライアント証明書の発行
ESA が提供する CA を使用してクライアント証明書を作成し、モバイルアプリケーションにデプロイします。ESA はアカウントごとに一意の CA を生成し、この CA から発行されたすべての証明書は ESA POP によって自動的に信頼されます。
デフォルトの証明書有効期間は 1 年です。
証明書の作成
-
ESA コンソールで、サイト管理に移動します。サイト 列で、目的のサイトをクリックします。
-
左側メニューで、 を選択します。 証明書を作成 をクリックします。
-
要件に基づいて、CSR の生成方法 メソッド、秘密鍵タイプ、証明書の有効期間 を選択し、OK をクリックします。
重要ESA は証明書やプライベートキーを保存しません。また、このダイアログボックスを閉じた後は取得できません。証明書プレビューのダイアログボックスで、証明書のコピー と 秘密鍵のコピー をクリックして内容をクライアントにコピーしてください。
ホスト名のバインド
クライアント証明書をホスト名にバインドして mTLS を有効にします。有効な証明書を持つクライアントのみが、バインドされたホスト名にアクセスできます。
-
ESA コンソールで、サイト管理 に移動します。 サイト 列で、目的のサイトをクリックします。
-
左側メニューで、 を選択します。
-
[Hostname] セクションで 設定 をクリックします。表示されたダイアログボックスでホスト名を入力し、OK をクリックします。
説明-
一度に入力できるホスト名は最大 50 件です。
-
ホスト名は、選択したサイトに関連付けられている必要があります。
-
証明書の失効
不要になった、または侵害された証明書を失効させます。
-
ESA コンソールで、サイト管理に移動し、サイト 列で対象のサイトをクリックします。
-
左側メニューで、 を選択します。
-
リストで、失効させる証明書を見つけ、操作 列にある 取り消す をクリックします。
-
表示されたダイアログボックスで、[この証明書がもう使用しないことを確認しました。] チェックボックスをオンにしてから、OK をクリックします。
カスタム CA の使用
ESA の CA から発行された証明書に加えて、お客様独自のプライベート CA も使用できます。
OpenAPI のみで利用できます。各プランで最大 5 つの CA 証明書をサポートします。
操作手順
-
UploadClientCaCertificate を呼び出してルート CA 証明書をアップロードします。返された証明書 ID を記録します。
-
SetClientCertificateHostnames を呼び出して CA 証明書をホスト名にバインドします。mTLS 検証は、バインドされたホスト名にのみ適用されます。
-
カスタム mTLS 証明書向けのその他の API:
API
説明
独自発行の CA 証明書をアップロードします。
アップロード済みの独自発行 CA 証明書をすべて一覧表示します。
独自発行の CA 証明書を削除します。
特定の独自発行 CA 証明書の詳細を照会します。
ホスト名を独自発行 CA 証明書にバインドします。
独自発行 CA 証明書にバインドされているホスト名を照会します。
認証に失敗したリクエストのブロック
Web アプリケーションファイアウォール (WAF) ルールを設定して、クライアント証明書認証に失敗したリクエストをブロックします。
操作手順
-
ESA コンソールで、サイト管理に移動します。サイト 列で、対象のサイトをクリックします。
-
左側メニューで、 を選択し、カスタムルールの設定ページに移動します。
-
カスタム WAF ルールを設定します。
-
検証済みのクライアント証明書 を Off
に設定します。 -
ホスト名 フィールドに、ルールを適用するホスト名を入力します。
重要ホスト名の条件を必ず設定してください。設定しない場合、クライアント証明書認証を使用していない、または認証に失敗したすべてのリクエストがブロックされます。
-
-
アクション を ブロック に設定するか、要件に応じて別のアクションを選択します。
-
OK をクリックしてルールを追加します。
指定したホスト名へのリクエストのうち、クライアント証明書認証に失敗した、または認証を行わなかったリクエストは、403 ステータスコードでブロックされます。
検証
-
クライアント証明書がないリクエストは、403 ステータスコードでブロックされます。

-
有効な ESA クライアント証明書を使用したリクエストは成功します。ホスト名、証明書パス、キーパスは、実際の値に置き換えてください。
curl -v "https://example.com" --cert ./example.crt --key ./example.key * Trying 198.51.100.10... * TCP_NODELAY set * Connected to example.com (198.51.100.10) port 443 (#0) * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH * successfully set certificate verify locations: * CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none * TLSv1.2 (OUT), TLS Unknown, Certificate Status (22): * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * NPN, negotiated HTTP1.1 * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Request CERT (13): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Certificate (11): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS handshake, CERT verify (15): * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS handshake, Next protocol (67): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS change cipher, Change cipher spec (1): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * Server certificate: * subject: CN=example.com * start date: Jul 31 00:00:00 2024 GMT * expire date: Jul 31 23:59:59 2025 GMT * subjectAltName: host "example.com" matched cert's "example.com" * issuer: C=US; O=Example CA; CN=Example DV TLS CA * SSL certificate verify ok. > GET / HTTP/1.1 > Host: example.com > User-Agent: curl/7.74.0 > Accept: */*