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

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

概要

Application Gateway で相互認証を構成した後、相互認証を使用しようとすると、複数のエラーが表示される場合があります。 エラーの一般的な原因には、次のようなものがあります。

  • ルート CA 証明書のない証明書または証明書チェーンをアップロードした
  • 複数のルート CA 証明書がある証明書チェーンをアップロードした
  • CA 証明書がないリーフ証明書のみを含む証明書チェーンをアップロードした
  • 発行者 DN の不一致による検証エラー

ここでは、発生する可能性のあるさまざまなシナリオと、それらのシナリオをトラブルシューティングする方法について説明します。 その後、エラー コードを示し、相互認証によって発生する可能性がある特定のエラー コードの一般的な原因を説明します。 クライアント証明書認証に失敗すると、すべて HTTP 400 エラー コードが発生します。

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

相互認証を構成しようとするときに直面する可能性がある、いくつかのシナリオがあります。 ここでは、よくある落とし穴のいくつかをトラブルシューティングする方法について説明します。

自己署名証明書

問題

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

解決策

使用している自己署名証明書に BasicConstraintsOid = "2.5.29.19" という拡張機能があることを再確認します。これは、サブジェクトが CA として機能できることを示します。 これにより、使用される証明書が CA 証明書であることになります。 自己署名クライアント証明書を生成する方法の詳細については、信頼されたクライアント証明書に関するページを参照してください。

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

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

SslClientVerify が NONE

問題

アクセス ログに、sslClientVerify プロパティが "NONE" と表示されています。

解決策

これは、クライアントが Application Gateway に要求を送信するときにクライアント証明書を送信しない場合に表示されます。 これは、Application Gateway に要求を送信しているクライアントが、クライアント証明書を使用するように正しく構成されていない場合に発生することがあります。 Application Gateway でクライアント認証の設定が想定どおりに動作しているかどうかを確認する方法の 1 つは、次の OpenSSL コマンドを使用することです。

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

-cert フラグはリーフ証明書であり、-key フラグはクライアントの秘密キー ファイルです。

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

SslClientVerify が FAILED

問題

アクセス ログに、sslClientVerify プロパティが "FAILED" と表示されています。

解決策

アクセス ログ内のエラーには、さまざまな原因が考えられます。 エラーの一般的な原因の一覧を次に示します。

  • 発行者証明書を取得できない: クライアント証明書の発行者証明書が見つかりませんでした。 これは通常、信頼されたクライアント 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

原因

見つからない証明書データがあります。 アップロードされた証明書が、証明書データを含まない空のファイルである可能性があります。

解決策

アップロードした証明書ファイルに不足しているデータがないことを確認します。

エラー コード: ApplicationGatewayTrustedClientCertificateMustNotHavePrivateKey

原因

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

解決策

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

エラー コード: ApplicationGatewayTrustedClientCertificateInvalidData

原因

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

  1. チェーンが正しい形式で提示されていないため、解析に失敗しました。 Application Gateway では、証明書チェーンが PEM 形式であることが想定されています。また、個々の証明書データが区切られていることも想定されています。
  2. 解析するものが見つかりませんでした。 アップロードされたファイルには、区切り記号だけが含まれ、証明書データが含まれていない可能性があります。

解決策

このエラーの原因に応じて、2 つの解決策が考えられます。

  • アップロードした証明書チェーンが正しい形式 (PEM) であり、証明書データが正しく区切られていたことを確認します。
  • アップロードした証明書ファイルに、区切り記号だけでなく証明書データが含まれていることを確認します。

エラー コード: ApplicationGatewayTrustedClientCertificateDoesNotContainAnyCACertificate

原因

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

解決策

アップロードした証明書チェーンにリーフ証明書以外のものが含まれていることを再確認します。 BasicConstraintsOid = "2.5.29.19" 拡張機能があり、サブジェクトが CA として機能できることを示している必要があります。

エラー コード: ApplicationGatewayOnlyOneRootCAAllowedInTrustedClientCertificate

原因

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

解決策

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