503 Service Unavailable - SSL handshake エラー

<ph type="x-smartling-placeholder"></ph> 現在、Apigee Edge のドキュメントが表示されています。
Apigee X のドキュメント
詳細

症状

クライアント アプリケーションは、次のコードで HTTP ステータス コード 503 Service Unavailable を取得します。 API のレスポンスとしてのエラーコード messaging.adaptors.http.flow.SslHandshakeFailed できます。

エラー メッセージ

クライアント アプリケーションが次のレスポンス コードを受け取ります。

HTTP/1.1 503 Service Unavailable

また、次のエラー メッセージが表示される場合があります。

{
   "fault":{
      "faultstring":"SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target",
      "detail":{
         "errorcode":"messaging.adaptors.http.flow.SslHandshakeFailed"
      }
   }
}

考えられる原因

エラーコードとステータス コード 503 Service Unavailable が表示される場合があります。 SSL 中のエラーが発生したため messaging.adaptors.http.flow.SslHandshakeFailed Apigee Edge の Message Processor とバックエンド サーバー間の handshake プロセスで、 できます。faultstring のエラー メッセージは通常、 このエラーの原因として考えられるおおまかなことです。

faultstring で観測されたエラー メッセージに応じて、以下を使用する必要があります。 適切な手法を導入する必要があります。このハンドブックでは、Google Compute Engine の このエラーは、faultstring にエラー メッセージ SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target が見つかった場合に発生します。

このエラーは、Apigee Edge の Message Processor と Apigee Edge の間での SSL handshake プロセス中に発生します。 バックエンド サーバーに対して次のコマンドを実行します。

  • Apigee Edge の Message Processor のトラストストアが次の処理を行った場合: <ph type="x-smartling-placeholder">
      </ph>
    • バックエンド サーバーの完全とは一致しない証明書チェーンが含まれている 証明書チェーン、または
    • バックエンド サーバーの完全な証明書チェーンが含まれていない
  • バックエンド サーバーによって提示される証明書チェーンが次の場合: <ph type="x-smartling-placeholder">
      </ph>
    • <ph type="x-smartling-placeholder"></ph>を含む 完全修飾ドメイン名 (FQDN)が、サービス アカウントで指定されたホスト名と ターゲット エンドポイント
    • 不正確または不完全な証明書チェーンが含まれている
で確認できます。 <ph type="x-smartling-placeholder">

この問題の原因としては、次のことが考えられます。

原因 説明 トラブルシューティングの実施対象
Message Processor のトラストストア内の証明書または証明書チェーンが正しくない、または不完全である Apigee Edge の Message Processor のトラストストアに保存されている証明書またはそのチェーンが、バックエンド サーバーの証明書チェーンと一致していないか、バックエンド サーバーの完全な証明書チェーンが含まれていません。 Edge Private Cloud と Public Cloud のユーザー
バックエンド サーバーの証明書の FQDN とターゲット エンドポイントのホスト名が一致しない バックエンド サーバーから提示された証明書に、ターゲット エンドポイントで指定されたホスト名と一致しない FQDN が含まれています。 Edge Private Cloud と Public Cloud のユーザー
バックエンド サーバーから提示された証明書または証明書チェーンが正しくない/不完全である バックエンド サーバーによって提示された証明書チェーンが正しくないか、不完全です。 Edge Private Cloud と Public Cloud のユーザー

共通の診断手順

このエラーを診断するには、次のいずれかのツールまたは手法を使用します。

API Monitoring

手順 #1: API Monitoring を使用する

<ph type="x-smartling-placeholder">

API Monitoring を使用してエラーを診断するには:

  1. <ph type="x-smartling-placeholder"></ph> Apigee Edge UI にログインするユーザーとして、 付与します
  2. 問題を調査する組織に切り替えます。

  3. [Analyze] >API モニタリング >Investigate ページをご覧ください。
  4. エラーが発生した期間を選択します。
  5. 障害コードTime に対してプロットします。

    <ph type="x-smartling-placeholder">
  6. 障害コードが含まれているセルを選択してください messaging.adaptors.http.flow.SslHandshakeFailed: この図にあるとおり 下にあります。

    ( 拡大画像を表示

  7. 障害コードに関する情報 messaging.adaptors.http.flow.SslHandshakeFailed は次のように表示されます。 下に示します。

    ( 拡大画像を表示

  8. [ログを表示 ] をクリックし、失敗したリクエストの行を開きます。

    ( 拡大画像を表示

  9. [ログ] ウィンドウで、次の詳細をメモします。 <ph type="x-smartling-placeholder">
      </ph>
    • リクエスト メッセージ ID
    • ステータス コード: 503
    • 障害の発生元: target
    • 障害コード: messaging.adaptors.http.flow.SslHandshakeFailed

トレース

手順 2: Trace ツールを使用する

<ph type="x-smartling-placeholder">

Trace ツールを使用してエラーを診断するには:

  1. トレース セッションを有効にし、以下のいずれかを行います。 <ph type="x-smartling-placeholder">
      </ph>
    • エラーコードを含む 503 Service Unavailable エラーを待つ messaging.adaptors.http.flow.SslHandshakeFailed が発生する、または
    • 問題を再現できる場合は、API 呼び出しを行って問題を再現してください。 503 Service Unavailable
  2. [Show all FlowInfos] が有効になっていることを確認します。

  3. 失敗したリクエストのいずれかを選択し、トレースを調べます。
  4. トレースのさまざまなフェーズを移動して、エラーが発生した場所を特定します。
  5. このエラーは通常、Target Request Flow Started フェーズの後に表示されます。 次のように指定します。

    ( 拡大画像を表示

  6. トレースから次の値をメモします。 <ph type="x-smartling-placeholder">
      </ph>
    • エラー: SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    • error.cause: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    • error.class: com.apigee.errors.http.server.ServiceUnavailableException
    • エラー SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target の値は、SSL handshake が失敗したことを示します。 これは、Apigee Edge の Message Processor でバックエンド サーバーの あります。
  7. トレースの [AX(Analytics Data Recorded)] フェーズに移動してクリックします。
  8. [Phase Details Error Headers] セクションまで下にスクロールし、 X-Apigee-fault-codeX-Apigee-fault-code と X-Apigee-fault-sourceX-Apigee-fault-code の値 X-Apigee-Message-ID を使用します。

    ( 拡大画像を表示

  9. X-Apigee-fault-codeX-Apigee-fault-sourceX-Apigee-Message-ID:
  10. エラーヘッダー
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target
    X-Apigee-Message-ID MESSAGE_ID

NGINX

手順 #3: NGINX アクセスログを使用する

<ph type="x-smartling-placeholder">

NGINX アクセスログを使用してエラーを診断するには:

  1. Private Cloud ユーザーの場合は、NGINX アクセスログを使用して、 HTTP 503 Service Unavailable に関する重要な情報。
  2. NGINX アクセスログを確認します。

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    <ph type="x-smartling-placeholder">
  3. エラーコードを含む 503 エラーがないか検索します 特定の期間にmessaging.adaptors.http.flow.SslHandshakeFailed ( または、まだ 503 で失敗しているリクエストがあるかどうか。
  4. X-Apigee-fault-code と一致する 503 エラーが見つかった場合 messaging.adaptors.http.flow.SslHandshakeFailed の値、 X-Apigee-fault-source. の値を確認します。

    NGINX アクセスログの 503 エラーの例:

    ( 拡大画像を表示

    NGINX アクセスログの上記のサンプル エントリには、次の値が含まれます。 X-Apigee-fault-code X-Apigee-fault-code

    ヘッダー
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target

Message Processor のログ

手順 4: Message Processor のログの使用

<ph type="x-smartling-placeholder">
  1. 失敗したリクエストのメッセージ ID を特定するには、API Monitoring、Trace ツール、 一般的な診断手順で説明しているように、NGINX Access Logs を使用します。
  2. Message Processor ログで特定のリクエスト メッセージ ID を検索する (/opt/apigee/var/log/edge-message-processor/logs/system.log)。ご覧のとおり、 次のエラーが発生します。

    org:myorg env:test api:MyProxy rev:1
    messageid:myorg-28247-3541813-1
    NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context.handshakeFailed() :
    SSLClientChannel[Connected: Remote:X.X.X.X:443
    Local:192.168.194.140:55102]@64596 useCount=1
    bytesRead=0 bytesWritten=0 age=233ms  lastIO=233ms
    isOpen=true handshake failed, message: General SSLEngine problem
    

    上記のエラーは、Message Processor 間で SSL handshake が失敗したことを示します。 バックエンドサーバーと通信します

    その後、次のように、詳細なスタック トレースを含む例外が発生します。

    org:myorg env:test api:MyProxy rev:1
    messageid:myorg-28247-3541813-1
    NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - RequestWriteListener.onException() :
    RequestWriteListener.onException(HTTPRequest@1522922c)
    javax.net.ssl.SSLHandshakeException: General SSLEngine problem
    	at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1478)
    	at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535)
    	... <snipped>
    Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
    	at sun.security.ssl.Alerts.getSSLException(Alerts.java:203)
    	at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1728)
    	... <snipped>
    Caused by: sun.security.validator.ValidatorException: PKIX path building failed:
    sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid
    certification path to requested target
    	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397)
    	at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302)
    	... <snipped>
      

    handshake の失敗の原因は次のとおりです。

    Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    これは、Apigee Edge の Message Processor で SSL handshake が失敗したことを示します。 バックエンド サーバーの証明書を検証できません。

原因: Message Processor のトラストストア内の証明書または証明書チェーンが正しくないか、不完全である

診断

  1. API を使用して、観測されたエラーの [Fault Code](障害コード)と [Fault Source] を特定します。 Monitoring、Trace ツール、または NGINX アクセスログについては、一般的な 診断手順をご覧ください。
  2. 障害コードmessaging.adaptors.http.flow.SslHandshakeFailed の場合: 次のいずれかの方法でエラー メッセージを確認します。
    • 次の説明に沿って、Trace ツールを使用して error.cause を見つけます。 一般的な診断手順
    • Message Processor のログを使用して例外を見つける(次の説明を参照) 一般的な診断手順
    • API 呼び出しに対するエラー レスポンスから faultstring を見つけます。次をご覧ください。 エラー メッセージ
  3. エラー メッセージが sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target" の場合は、SSL handshake が Apigee Edge の Message Processor でバックエンド サーバーの IP を検証できなかったため、失敗しました。 あります。

この問題は、次の 2 つのフェーズでデバッグできます。

  1. フェーズ 1: バックエンド サーバーの証明書チェーンを決定する
  2. フェーズ 2: Message Processor のトラストストアに保存されている証明書チェーンを比較する

フェーズ 1

フェーズ 1: バックエンド サーバーの証明書チェーンを決定する

次のいずれかの方法を使用して、バックエンド サーバーの証明書チェーンを決定します。

openssl

<ph type="x-smartling-placeholder">

バックエンド サーバーのホストに対して openssl コマンドを実行します。 次のように指定します。

openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#

上記のコマンドの出力で証明書チェーンをメモします。

openssl コマンド出力のバックエンド サーバーの証明書チェーンの例:

Certificate chain
 0 s:/CN=mocktarget.apigee.net
   i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
 1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
   i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
 2 s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
   i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1

tcpdump

<ph type="x-smartling-placeholder">
  1. Public Cloud ユーザーは、オンプレミスで TCP/IP パケットをキャプチャします。 バックエンドサーバーと通信します
  2. Private Cloud ユーザーは、TCP/IP パケットをキャプチャして バックエンド サーバーまたは Message Processor で受信します。できれば、 パケットがバックエンド サーバー上で復号されるため、
  3. 以下を使用 <ph type="x-smartling-placeholder"></ph> 次のようにして、TCP/IP パケットをキャプチャする tcpdump コマンド

    tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
    
    <ph type="x-smartling-placeholder">
  4. TCP/IP パケットを Wireshark ツールまたは 使い慣れたツールです

    Tcpdump のサンプル分析

    ( 拡大画像を表示

    • パケット #43: Message Processor(送信元)が バックエンド サーバー(宛先)に Client Hello メッセージを送信します。
    • パケット 44: バックエンド サーバーがパケットの受信を Message Processor からの Client Hello メッセージ。
    • パケット 45: バックエンド サーバーが Server Hello を送信する 証明書が添付されています。
    • パケット #46: Message Processor がパケット Server Hello のメッセージと証明書。
    • パケット #47: Message Processor が FIN, ACK を送信します。 パケット #48RST, ACK が続くメッセージです。

      これは、バックエンド サーバーによる証明書の検証が Message Processor でエラーが発生しました。これは、Message Processor に Cloud Shell への バックエンド サーバーの証明書と一致する証明書、または信頼できないすべての証明書 バックエンド サーバーの証明書と、そのバックエンド サーバーの (Message Processor の)トラストストアに送信します。

    • 戻ってパケット #45 を確認し、証明書 バックエンド サーバーによって送信されたチェーン

      ( 拡大画像を表示

    • この例では、サーバーがリーフ証明書を送信したことがわかります。 common name (CN) = mocktarget.apigee.net、その後に CN= GTS CA 1D4 とルート証明書を含む中間証明書 CN = GTX Root R1 と一緒に使用できます。

    サーバーの認証の検証で不合格だったと確信できる場合は、 フェーズ 2: バックエンド サーバーの証明書を比較する Message Processor のトラストストアに保存されている証明書などです

フェーズ 2

フェーズ 2: バックエンド サーバーの証明書と、 Message Processor のトラストストア

  1. バックエンド サーバーの証明書チェーンを決定します
  2. 次を使用して、Message Processor のトラストストアに保存されている証明書を特定します。 次のとおりです。 <ph type="x-smartling-placeholder">
      </ph>
    1. TrustStore 要素からトラストストア参照名を取得する TargetEndpointSSLInfo セクションにあります。

      TargetEndpointSSLInfo セクションのサンプルを見てみましょう。 構成:

      <TargetEndpoint name="default">
      ...
         <HTTPTargetConnection>
            <Properties />
            <SSLInfo>
               <Enabled>true</Enabled>
               <ClientAuthEnabled>true</ClientAuthEnabled>
               <KeyStore>ref://myKeystoreRef</KeyStore>
               <KeyAlias>myKey</KeyAlias>
               <TrustStore>
                  ref://myCompanyTrustStoreRef
               </TrustStore>
            </SSLInfo>
         </HTTPTargetConnection>
         ...
      </TargetEndpoint>
      
    2. 上記の例では、TrustStore 参照名は次のようになります。 myCompanyTruststoreRef
    3. Edge UI で、[Environments >参照。スペース内の名前を 特定のトラストストア参照の Reference 列。これがお客様の トラストストア名を指定します。

      ( 拡大画像を表示

    4. 上記の例では、トラストストア名は次のようになります。

      myCompanyTruststoreRef: myCompanyTruststore

  3. トラストストアに保存されている証明書を取得します(前のステップで特定)。 次の API を使用します。

    1. <ph type="x-smartling-placeholder"></ph> キーストアまたはトラストストアのすべての証明書を取得する。この API は、 作成する必要があります。

      Public Cloud ユーザー:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
      

      Private Cloud ユーザー:

      curl -v -X GET http://MANAGEMENT_HOST:PORT_#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
      

      ここで:

      • ORGANIZATION_NAME は組織の名前です。
      • ENVIRONMENT_NAME は、環境の名前です。
      • KEYSTORE_NAME はキーストアの名前です。
      • $TOKEN は OAuth 2.0 アクセストークンに設定されます OAuth 2.0 アクセス トークンを取得する
      • この例で使用されている curl オプションについては、 curl を使用する

      出力例:

      サンプルのトラストストア myCompanyTruststore からの証明書は次のとおりです。

      [
        "serverCert"
      ]
      

    2. <ph type="x-smartling-placeholder"></ph> キーストアまたはトラストストアから特定の証明書の証明書の詳細を取得する。 この API は、特定の証明書の特定の証明書に関する情報を返します。 できます。

      Public Cloud ユーザー:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs/CERT_NAME -H "Authorization: Bearer $TOKEN"
      

      Private Cloud ユーザー

      curl -v -X GET http://MANAGEMENT_HOST:PORT_#>/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs/CERT_NAME -H "Authorization: Bearer $TOKEN"
      

      ここで:

      • ORGANIZATION_NAME は組織の名前です。
      • ENVIRONMENT_NAME は、環境の名前です。
      • KEYSTORE_NAME はキーストアの名前です。
      • CERT_NAME は、証明書の名前です。
      • $TOKEN は、OAuth 2.0 アクセストークンに設定されます。 OAuth 2.0 アクセス トークンを取得する
      • この例で使用されている curl オプションについては、 curl を使用する

      出力例:

      serverCert の詳細には、サブジェクトと発行者が次のように表示されます。

      リーフ/エンティティ証明書:

      "subject": "CN=mocktarget.apigee.net",
      "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      

      中間証明書:

      "subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
      
  4. 手順 1 で取得した実際のサーバー証明書と証明書が、 ステップ 3 で取得したトラストストアに格納された値が一致します。一致しない場合、 問題の原因を特定します。

    上記の例で、一度に 1 つの証明書について見てみましょう。

    1. リーフ証明書:

      バックエンド サーバーから:

      s:/CN=mocktarget.apigee.net
      i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
      

      Message Processor(クライアント)のトラストストアから:

      "subject": "CN=mocktarget.apigee.net",
      "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      

      トラストストアに保存されているリーフ証明書がバックエンドのリーフ証明書と一致する あります。

    2. 中間証明書:

      バックエンド サーバーから:

      s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
      i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
      

      Message Processor(クライアント)のトラストストアから:

      "subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
      

      トラストストアに格納されている中間証明書が、 バックエンドサーバーと通信します

    3. ルート証明書:

      バックエンド サーバーから:

      s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
      i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
      

      Message Processor のイメージにルート証明書が完全に できます。

    4. ルート証明書がトラストストアに存在しないため、 Message Processor は次の例外をスローします。

      sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
      

      503 Service Unavailable とエラーコードを返す クライアントへの messaging.adaptors.http.flow.SslHandshakeFailed 説明します。

で確認できます。 <ph type="x-smartling-placeholder">

解決策

  1. バックエンド サーバーの完全かつ適切な証明書チェーンがあることを確認します。
  2. Public Cloud ユーザーは、 <ph type="x-smartling-placeholder"></ph> クラウドの TLS 証明書を更新して、証明書を Apigee Edge の Message Processor のトラストストア。
  3. Private Cloud ユーザーは、次の手順に沿って操作します。 <ph type="x-smartling-placeholder"></ph> Private Cloud の TLS 証明書を更新して、証明書を次のように更新します。 Apigee Edge の Message Processor トラストストア。

原因: バックエンド サーバーの証明書の FQDN とターゲット エンドポイントのホスト名が一致しない

バックエンド サーバーが提示する証明書チェーンに FQDN が含まれるが、FQDN は ターゲット エンドポイントで指定されたホスト名を使用している場合、Apigee Edge の Message Process からエラーが返されます。 SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

診断

  1. これを確認している API プロキシで、特定のターゲット エンドポイントを調べます。 バックエンド サーバーのホスト名をメモしておきます。

    TargetEndpoint の例:

    <TargetEndpoint name="default">
       …
       <HTTPTargetConnection>
          <Properties />
          <SSLInfo>
             <Enabled>true</Enabled>
             <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://backend.company.com/resource</URL>
       </HTTPTargetConnection>
    </TargetEndpoint>
    

    上記の例では、バックエンド サーバーのホスト名は backend.company.com です。

  2. openssl を使用してバックエンド サーバーの証明書の FQDN を確認する コマンドを使用します。

    openssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
    

    例:

    openssl s_client -connect backend.company.com:443
    

    Certificate chain セクションを調べて、指定された FQDN をメモします。 リーフ証明書のサブジェクトの CN の一部のみです。

    Certificate chain
     0 s:/CN=backend.apigee.net
       i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
     1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
       i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
     2 s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
       i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
    

    上記の例では、バックエンド サーバーの FQDN は backend.apigee.net です。

  3. 手順 1 で取得したバックエンド サーバーのホスト名と FQDN を取得した場合 ステップ 2 が一致しない場合、それがエラーの原因です。
  4. 上記の例では、ターゲット エンドポイントのホスト名は次のようになります。 backend.company.com。ただし、バックエンド サーバーの証明書に含まれる FQDN 名は、 backend.apigee.net です。両者が一致しないため、このエラーが発生します。

解決策

この問題は、次のいずれかの方法で解決できます。

正しい FQDN

バックエンド サーバーのキーストアを、正しい FQDN、有効かつ完全な証明書で更新する チェーン:

  1. 正しい FQDN を持つバックエンド サーバーの証明書がない場合は、 次に、適切な CA(認証局)から適切な証明書を入手します。
  2. 以下を確認します。 バックエンド サーバーの証明書チェーンが有効で完全なものになります

    <ph type="x-smartling-placeholder">
  3. 正しい FQDN を持つ有効な完全な証明書チェーンが ホスト名と同一のリーフ証明書またはエンティティ証明書のバックエンド サーバーを 使用している場合は、バックエンドのキーストアを 完全な証明書チェーンです。
で確認できます。 <ph type="x-smartling-placeholder">

正しいバックエンド サーバー

正しいバックエンド サーバーのホスト名を使用して、ターゲット エンドポイントを更新します。

  1. ターゲット エンドポイントのホスト名が正しく指定されていない場合は、 バックエンドの FQDN と一致する正しいホスト名を持つターゲット エンドポイント 表示されます。
  2. API プロキシへの変更を保存します。

    上記の例で、バックエンド サーバーのホスト名が正しくない場合、 バックエンド サーバーの証明書の FQDN を使用して修正できます。 つまり、次のように backend.apigee.net です。

    <TargetEndpoint name="default">
       …
       <HTTPTargetConnection>
          <Properties />
          <SSLInfo>
             <Enabled>true</Enabled>
             <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://backend.apigee.net/resource</URL>
       </HTTPTargetConnection>
    </TargetEndpoint>
    

原因: バックエンド サーバーから提示された証明書または証明書チェーンが正しくない/不完全である

診断

  1. openssl コマンドを実行して、バックエンド サーバーの証明書チェーンを取得します。 次のようにバックエンド サーバーのホスト名を照合します。
    openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
    

    上記のコマンドの出力の Certificate chain をメモします。

    openssl コマンド出力のバックエンド サーバーの証明書チェーンの例:

    Certificate chain
     0 s:/CN=mocktarget.apigee.net
       i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
     1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
       i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
       
  2. 以下で説明されている適切な完全な証明書チェーンがあることを確認します。 証明書チェーンを検証する
  3. バックエンド サーバーに有効かつ完全な証明書チェーンがない場合は、 それがこの問題の原因です

    上記のサンプル バックエンド サーバーの証明書チェーンでは、ルート証明書は ありません。このため、このエラーが発生します。

解決策

バックエンド サーバーのキーストアを有効で完全な証明書チェーンで更新します。

  1. <ph type="x-smartling-placeholder"></ph> バックエンド サーバーの証明書チェーンが有効で完全なものであることを確認する

    <ph type="x-smartling-placeholder">
  2. バックエンド サーバーのキーストア内の有効な完全な証明書チェーンを更新します。
で確認できます。 <ph type="x-smartling-placeholder">

問題が解決しない場合は、<ph type="x-smartling-placeholder"></ph>に進みます。 診断情報の収集が必要な場合

診断情報の収集が必要な場合

上記の手順でも問題が解決しない場合は、以下の情報を収集します。 Apigee Edge サポートにお問い合わせください。

  • Public Cloud ユーザーの場合は、次の情報を提供してください。 <ph type="x-smartling-placeholder">
      </ph>
    • 組織名
    • 環境名
    • API プロキシ名
    • エラーを再現するには、curl コマンドを完了します。
    • エラーを示すトレース ファイル
    • openssl コマンドの出力:

      openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#

    • バックエンド サーバーでキャプチャされた TCP/IP パケット
  • Private Cloud ユーザーの場合は、次の情報を提供します。 <ph type="x-smartling-placeholder">

参照