次の方法で共有


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" が表示されます。 自己署名クライアント証明書の生成に関する詳細なガイダンスについては、クライアント 認証で使用する信頼されたクライアント CA 証明書チェーンのエクスポートに関する記事を参照してください。

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

相互認証は問題なく構成できますが、Application Gateway に要求を送信するときに問題が発生している可能性があります。 次のセクションでは、いくつかの一般的な問題と解決策に対処します。 sslClientVerify プロパティは、Application Gateway のアクセス ログにあります。

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> 

Where:

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

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

SslClientVerify が失敗しました

問題

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 を抽出する方法の詳細については、 発行者 DN を抽出する Application Gateway を確認してください。 ベスト プラクティスとして、ファイルごとに 1 つの証明書チェーンを Application Gateway にアップロードしていることを確認します。
  • サポートされていない証明書の目的: クライアント証明書で、クライアント認証の拡張キー使用法 (1.3.6.1.5.5.7.3.2) が指定されていることを確認します。 クライアント認証の拡張キー使用法とオブジェクト識別子の定義の詳細については、RFC 3280 と RFC 5280 を参照してください。

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

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

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

エラー コード: ApplicationGatewayTrustedClientCertificateMustSpecifyData

原因

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

解決策

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

エラー コード: ApplicationGatewayTrustedClientCertificateMustNotHavePrivateKey

原因

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

解決策

アップロードされた証明書チェーンを再確認し、チェーンの一部であった秘密キーを削除します。 秘密キーを使用せずにチェーンを再アップロードします。

エラー コード: ApplicationGatewayTrustedClientCertificateInvalidData

原因

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

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

解決策

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

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

エラー コード: ApplicationGatewayTrustedClientCertificateDoesNotContainAnyCACertificate(信頼されたクライアント証明書にCA証明書が含まれていません)

原因

アップロードされた証明書には、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は1つのみ)

原因

証明書チェーンに複数のルート CA 証明書が含まれていた か、ルート CA 証明書が 0 個含まれていました。

解決策

アップロードされる証明書には、1 つのルート CA 証明書 (および必要に応じて多数の中間 CA 証明書) が含まれている必要があります。