次の方法で共有


Application Gateway での相互認証エラーのトラブルシューティング

Application Gateway を使用する場合の相互認証での問題をトラブルシューティングする方法を説明します。

概要

Application Gateway での相互認証の場合、構成後にクライアント証明書の検証中にさまざまなエラーが発生する可能性があります。 これらのエラーの一般的な原因は次のとおりです。

  • ルート CA 証明書を使用せずに証明書または証明書チェーンをアップロードする
  • 複数のルート CA 証明書を含む証明書チェーンをアップロードする
  • CA 証明書のないリーフ証明書のみを含む証明書チェーンをアップロードする
  • 発行者識別名 (DN) の不一致による証明書検証エラー
  • 拡張キー使用法 (EKU) 属性が不足しているか不正確である

このガイドでは、発生する可能性があるさまざまなシナリオについて説明し、それぞれのトラブルシューティング手順について説明します。 また、特定のエラー コードに対処し、相互認証のシナリオで考えられる原因について説明します。 クライアント証明書の認証エラーはすべて、HTTP 400 (無効な要求) 状態コードがクライアントに返されます。

シナリオのトラブルシューティング - 構成の問題

次のシナリオでは、相互認証を設定するときに発生する可能性がある一般的な構成の問題に対処します。 各シナリオには、問題の説明と推奨される解決策が含まれています。

自己署名証明書

問題

アップロードしたクライアント証明書は自己署名証明書であり、エラー コード ApplicationGatewayTrustedClientCertificateDoesNotContainAnyCACertificate が生成されます。

解決策

使用している自己署名証明書に、値 "2.5.29.19" の BasicConstraintsOid 拡張機能が含まれており、CA フラグが TRUE に設定されていることを確認します。 この拡張機能は、証明書のサブジェクトが証明機関として機能できることを示します。

証明書のプロパティを確認するには、次の OpenSSL コマンドを使用します。

openssl x509 -in certificate.pem -text -noout

出力で "基本制約" セクションを探します。このセクションには、有効な CA 証明書の "CA:TRUE" が表示されます。 自己署名クライアント証明書の生成に関する詳細なガイダンスについては、 信頼されたクライアント証明書を参照してください。

シナリオのトラブルシューティング - 接続の問題

相互認証は問題なく構成できますが、Application Gateway に要求を送信するときに問題が発生している可能性があります。 以下のセクションでは、いくつかの一般的な問題と解決策について説明します。 sslClientVerify プロパティは、アプリケーション ゲートウェイのアクセス ログで確認できます。

SslClientVerify が NONE

問題

sslClientVerify プロパティはアクセス ログに "NONE" と表示され、TLS ハンドシェイク中にクライアント証明書が表示されなかったことを示します。

解決策

この問題は、クライアントが TLS ハンドシェイク要求のクライアント証明書を Application Gateway に送信しない場合に発生します。 この問題は、次の場合に発生する可能性があります。

  • クライアント アプリケーションがクライアント証明書を使用するように構成されていない
  • クライアント証明書が正しくインストールされていないか、アクセスできない
  • クライアントが Application Gateway のサーバー証明書を信頼しない

Application Gateway でクライアント認証が正しく構成されていることを確認するには、次の OpenSSL コマンドを使用します。

openssl s_client -connect <hostname:port> -cert <path-to-certificate> -key <client-private-key-file> 

場所は:

  • -cert は、クライアント証明書 (リーフ証明書) へのパスを指定します
  • -key は、クライアントの秘密キー ファイルへのパスを指定します
  • -verify_return_error 証明書の検証が失敗した場合にコマンドが失敗することを確認します

OpenSSL s_client コマンドの使用方法の詳細については、 OpenSSL の手動ページを参照してください。

SslClientVerify が FAILED

問題

sslClientVerify プロパティは、アクセス ログに "FAILED" と表示され、TLS ハンドシェイク中にクライアント証明書の検証が失敗したことを示します。

解決策

アクセス ログにエラーが発生する可能性がある原因は多数あります。 エラーの一般的な原因の一覧を次に示します。

  • 発行者証明書を取得できない: クライアント証明書の発行者証明書が見つかりませんでした。 通常、この問題は、信頼されたクライアント CA 証明書チェーンが Application Gateway で完了していないことを意味します。 Application Gateway にアップロードされた、信頼されたクライアント CA 証明書チェーンが完全であることを確認してください。
  • ローカル発行者証明書を取得できない: 発行者証明書を取得できない場合と同様に、クライアント証明書の発行者証明書が見つかりませんでした。 通常、この問題は、信頼されたクライアント CA 証明書チェーンが Application Gateway で完了していないことを意味します。 Application Gateway にアップロードされた、信頼されたクライアント CA 証明書チェーンが完全であることを確認してください。
  • 最初の証明書を確認できない: クライアント証明書を確認できません。 このエラーは、特に、クライアントが発行者が信頼されていないリーフ証明書のみを提示する場合に発生します。 Application Gateway にアップロードされた、信頼されたクライアント CA 証明書チェーンが完全であることを確認してください。
  • クライアント証明書の発行者を確認できない: このエラーは、構成 VerifyClientCertIssuerDN が true に設定されている場合に発生します。 通常、このエラーは、クライアント証明書の発行者 DN が、顧客によってアップロードされた信頼されたクライアント CA 証明書チェーンから抽出された ClientCertificateIssuerDN と一致しない場合に発生します。 Application Gateway による ClientCertificateIssuerDN の抽出方法の詳細については、Application Gateway による発行者 DN の抽出に関するセクションを参照してください。 ベスト プラクティスとして、ファイルごとに 1 つの証明書チェーンを Application Gateway にアップロードするようにしてください。
  • サポートされていない証明書の目的: クライアント認証で、クライアント証明書の拡張キー使用法 (1.3.6.1.5.5.7.3.2) が指定されていることを確認します。 クライアント認証の拡張キー使用法とオブジェクト識別子の定義の詳細については、RFC 3280RFC 5280 を参照してください。

信頼されたクライアント CA 証明書チェーン全体を抽出して Application Gateway にアップロードする方法の詳細については、信頼されたクライアント CA 証明書チェーンの抽出方法に関するページを参照してください。

エラー コードのトラブルシューティング

相互認証を構成すると、次のエラー コードが表示されます。 各エラーには、考えられる原因と推奨される解決策が含まれています。

エラー コード: ApplicationGatewayTrustedClientCertificateMustSpecifyData

原因

アップロードされた証明書ファイルに証明書データがないか、有効な証明書の内容のない空のファイルが含まれています。

解決策

証明書ファイルに正しい形式 (PEM) の有効な証明書データが含まれていることを確認します。 テキスト エディターを使用して、ファイルに -----BEGIN CERTIFICATE----------END CERTIFICATE----- 区切り記号の間に証明書の内容が含まれていることを確認します。

エラー コード: ApplicationGatewayTrustedClientCertificateMustNotHavePrivateKey

原因

証明書チェーンに秘密キーがあります。 証明書チェーンに秘密キーを含めることはできません。

解決策

アップロードした証明書チェーンを再確認し、チェーンの一部である秘密キーを削除します。 秘密キーを含まないチェーンを再アップロードします。

エラー コード: ApplicationGatewayTrustedClientCertificateInvalidData

原因

このエラーには、次の 2 つの原因が考えられます。

  • 解析エラー: 証明書チェーンの形式が正しくありません。 Application Gateway は、適切に区切られた個々の証明書を含む PEM 形式の証明書チェーンを想定しています。
  • 空のコンテンツ: アップロードされたファイルには、それらの間に実際の証明書データのない区切り記号のみが含まれています。

解決策

特定の原因に基づいて、次のいずれかの解決策を適用します。

  • 形式の問題: 証明書チェーンが PEM 形式であり、各証明書が -----BEGIN CERTIFICATE----- および -----END CERTIFICATE----- マーカーで適切に区切られているようにします。 各証明書は、これらの区切り記号内の別々の行に配置する必要があります。
  • 不足しているデータ: 証明書ファイルに、空の区切り記号だけでなく、区切り記号間の実際の証明書データが含まれていることを確認します。

エラー コード: ApplicationGatewayTrustedClientCertificateDoesNotContainAnyCACertificate

原因

アップロードした証明書に、CA 証明書がないリーフ証明書だけが含まれていました。 CA 証明書とリーフ証明書を含む証明書チェーンをアップロードしても、リーフ証明書は無視されるだけなので問題ありませんが、証明書には CA が必要です。

解決策

証明書チェーンに、CA フラグが TRUE に設定されている適切な BasicConstraintsOid 拡張機能 (OID: 2.5.29.19) を持つ少なくとも 1 つの CA 証明書が含まれていることを確認します。 この拡張機能は、証明書のサブジェクトが証明機関として機能できることを示します。

証明書の CA 状態を確認するには、次を使用します。

openssl x509 -in certificate.pem -text -noout | grep -A 2 "Basic Constraints"

出力には、有効な CA 証明書の "CA:TRUE" が表示されます。

エラー コード: ApplicationGatewayOnlyOneRootCAAllowedInTrustedClientCertificate

原因

証明書チェーンに複数のルート CA 証明書が含まれています。"または"、ルート CA 証明書が含まれていません。

解決策

アップロードする証明書には、ルート CA 証明書が 1 つだけ含まれている必要があります (ただし、中間 CA 証明書は必要な数だけ含めることができます)。