Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントに移動します。 情報
症状
クライアント アプリケーションが、API 呼び出しに対するレスポンスとして、エラーコード messaging.adaptors.http.flow.SslHandshakeFailed 付きの HTTP ステータス コード 503 Service Unavailable を受け取ります。
エラー メッセージ
クライアント アプリケーションは、次のレスポンス コードを受け取ります。
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"
}
}
}考えられる原因
Apigee Edge の Message Processor とバックエンド サーバー間の SSL handshake プロセス中に、さまざまな理由で失敗すると、エラーコード messaging.adaptors.http.flow.SslHandshakeFailed でステータス コード 503 Service Unavailable が返されることがあります。faultstring のエラー メッセージは通常、このエラーの原因となった可能性のある上位レベルの原因を示します。
faultstring で確認されたエラー メッセージに応じて、適切な手法を使用して問題のトラブルシューティングを行う必要があります。このプレイブックでは、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 とバックエンド サーバー間の SSL handshake プロセス中に発生します。
- Apigee Edge の Message Processor のtruststoreが次のようになっている場合:
- バックエンド サーバーの完全な証明書チェーンと一致しない証明書チェーンが含まれている。
- バックエンド サーバーの完全な証明書チェーンが含まれていない
- バックエンド サーバーによって提示される証明書チェーンが:
- ターゲット エンドポイントで指定されたホスト名と一致しない 完全修飾ドメイン名 (FQDN)が含まれている
- 不正確または不完全な証明書チェーンが含まれている
この問題には、次の原因が考えられます。
| 原因 | 説明 | トラブルシューティングの実施対象 |
|---|---|---|
| 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 を使用する
API Monitoring を使用してエラーを診断するには:
- 適切なロールを持つユーザーとして Apigee Edge UI にログインします。
問題の調査対象となる組織に切り替えます。
- [Analyze] > [API Monitoring] > [Investigate] ページに移動します。
- エラーが発生した特定の期間を選択します。
障害コードと時間をプロットします。
以下に示すように、障害コード
messaging.adaptors.http.flow.SslHandshakeFailedが含まれるセルを選択します。( 大きい画像を表示)

障害コード
messaging.adaptors.http.flow.SslHandshakeFailedに関する情報は、次のように表示されます。( 大きい画像を表示)

[ログを表示 ] をクリックし、失敗したリクエストの行を開きます。
( 大きい画像を表示)
- [ログ] ウィンドウで、次の詳細を確認します。
- リクエスト メッセージ ID
- ステータス コード:
503 - 障害の発生元:
target - 障害コード:
messaging.adaptors.http.flow.SslHandshakeFailed
トレース
手順 2: Trace ツールを使用する
Trace ツールを使用してエラーを診断するには:
- トレース セッションと、次のいずれかを有効にします。
- エラーコード
messaging.adaptors.http.flow.SslHandshakeFailedの503 Service Unavailableエラーが発生するまで待つ。 - 問題を再現できる場合は、API 呼び出しを行って問題を再現します。
503 Service Unavailable
- エラーコード
[Show all FlowInfos] が有効になっていることを確認します。

- 失敗したリクエストのいずれかを選択し、トレースを確認します。
- トレースのさまざまなフェーズを調べて、障害が発生した場所を特定します。
通常、エラーは次の図に示すように、フェーズ Target Request Flow Started の後に表示されます。
( 大きい画像を表示)

- トレースから次の値をメモします。
- エラー:
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の値は、Apigee Edge の Message Processor がバックエンド サーバーの証明書を検証できなかったため、SSL ハンドシェイクが失敗したことを示しています。
- エラー:
- トレースの [AX](Analytics Data Recorded)フェーズに移動してクリックします。
[Phase Details Error Headers] セクションまでスクロールし、次の図に示すように、X-Apigee-fault-code、X-Apigee-fault-source、X-Apigee-Message-ID の値を確認します。
( 大きい画像を表示)

- X-Apigee-fault-code、X-Apigee-fault-source、X-Apigee-Message-ID の値をメモします。
| エラー ヘッダー | 値 |
|---|---|
| X-Apigee-fault-code | messaging.adaptors.http.flow.SslHandshakeFailed |
| X-Apigee-fault-source | target |
| X-Apigee-Message-ID | MESSAGE_ID |
NGINX
手順 3: NGINX アクセスログを使用する
NGINX アクセスログを使用してエラーを診断するには:
- Private Cloud ユーザーの場合は、NGINX アクセスログを使用して、HTTP
503 Service Unavailableに関する重要な情報を確認できます。 NGINX アクセスログを確認します。
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- 特定の期間にエラーコード
messaging.adaptors.http.flow.SslHandshakeFailedの503エラーが発生しているかどうか(過去に問題が発生した場合)、または503で失敗しているリクエストがまだあるかどうかを検索します。 X-Apigee-fault-code が
messaging.adaptors.http.flow.SslHandshakeFailedの値と一致する503エラーが見つかった場合は、X-Apigee-fault-source の値を特定します。NGINX アクセスログの 503 エラーの例:
( 大きい画像を表示)
上記の NGINX アクセスログのエントリ例では、X-Apigee-fault-code と X-Apigee-fault-source に次の値が設定されています。
ヘッダー 値 X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailedX-Apigee-fault-source target
Message Processor ログ
手順 4: Message Processor のログを使用する
- 一般的な診断手順の説明に従って、API Monitoring、Trace ツール、NGINX アクセスログを使用して、失敗したリクエストのいずれかのメッセージ ID を特定します。
Message Processor のログ(
/opt/apigee/var/log/edge-message-processor/logs/system.log)で特定のリクエスト メッセージ ID を検索します。次のエラーが表示されることがあります。org:myorg env:test api:MyProxy rev:1
messageid:myorg-28247-3541813-1NIOThread@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-1NIOThread@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 targetat sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397) at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302) ... <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これは、Apigee Edge の Message Processor がバックエンド サーバーの証明書を検証できなかったため、SSL handshake が失敗したことを示します。
原因: Message Processor のトラストストア内の証明書または証明書チェーンが正しくないか、不完全である
診断
- 一般的な診断手順で説明されているように、API Monitoring、Trace ツール、NGINX アクセスログを使用して、観測されたエラーの障害コードと障害ソースを特定します。
- Fault Code が
messaging.adaptors.http.flow.SslHandshakeFailedの場合は、次のいずれかの方法でエラー メッセージを特定します。 - 一般的な診断手順で説明されているように、Trace ツールを使用して error.cause を見つけます。
- 共通の診断手順の説明に沿って、Message Processor のログを使用して例外を見つけます。
- エラー メッセージに示されているように、API 呼び出しに対するエラー レスポンスから
faultstringを見つけます。 - エラー メッセージが
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 が失敗したことを示します。
この問題は次の 2 つのフェーズでデバッグできます。
- フェーズ 1: バックエンド サーバーの証明書チェーンを特定する
- フェーズ 2: Message Processor のトラストストアに保存されている証明書チェーンを比較する
フェーズ 1
フェーズ 1: バックエンド サーバーの証明書チェーンを特定する
バックエンド サーバーの証明書チェーンを特定するには、次のいずれかの方法を使用します。
openssl
次のように、バックエンド サーバーのホスト名に対して 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
- Public Cloud ユーザーは、バックエンド サーバー上で TCP/IP パケットをキャプチャします。
- Private Cloud ユーザーは、バックエンド サーバーまたは Message Processor 上で TCP/IP パケットをキャプチャできます。バックエンド サーバー上ではパケットが復号化されるため、バックエンド サーバー上でパケットをキャプチャすることをおすすめします。
次の tcpdump コマンドを使用して、TCP/IP パケットをキャプチャします。
tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
Wireshark ツールまたは使い慣れた類似のツールを使用して、TCP/IP パケットを分析します。
Tcpdump の分析例
( 大きい画像を表示)
- パケット 43: Message Processor(送信元)が
Client Helloメッセージをバックエンド サーバー(宛先)に送信しました。 - パケット 44: バックエンド サーバーが、Message Processor からの
Client Helloメッセージを受信したことを確認応答します。 - パケット 45: バックエンド サーバーが自身の証明書とともに
Server Helloメッセージを送信します。 - パケット 46: Message Processor が
Server Helloメッセージと証明書を受信したことを確認応答します。 パケット 47: Message Processor は
FIN, ACKメッセージを送信し、パケット 48 でRST, ACKを送信します。これは、Message Processor によるバックエンド サーバー証明書の検証が失敗したことを示します。これは、Message Processor にバックエンド サーバーの証明書と一致する証明書がないか、Message Processor のトラストストアにある証明書でバックエンド サーバーの証明書を信頼できないためです。
パケット 45 に戻って、バックエンド サーバーから送信された証明書チェーンを確認できます。
( 大きい画像を表示)
- この例では、サーバーが
common name (CN) = mocktarget.apigee.netのリーフ証明書を送信し、その後にCN= GTS CA 1D4の中間証明書とCN = GTX Root R1のルート証明書を送信していることがわかります。
サーバーの証明書の検証が失敗したことを確認したら、フェーズ 2: バックエンド サーバーの証明書と Message Processor のトラストストアに保存されている証明書を比較するに進みます。
- パケット 43: Message Processor(送信元)が
フェーズ 2
フェーズ 2: バックエンド サーバーの証明書と Message Processor のトラストストアに保存されている証明書を比較する
- バックエンド サーバーの証明書チェーンを特定します。
- 次の手順で、メッセージ プロセッサのトラストストアに保存されている証明書を特定します。
TargetEndpointのSSLInfoセクションのTrustStore要素からトラストストアの参照名を取得します。以下は
TargetEndpoint構成のSSLInfoセクションの例です。<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>- 上記の例では、
TrustStore参照名はmyCompanyTruststoreRefです。 Edge UI で、[Environments] > [References] を選択します。目的のトラストストア参照の [Reference] 列にある名前をメモします。これがトラストストアの名前になります。
( 大きい画像を表示)
上記の例では、トラストストア名は次のとおりです。
myCompanyTruststoreRef:
myCompanyTruststore
次の API を使用して、前の手順で特定したトラストストアに保存されている証明書を取得します。
キーストアまたはトラストストアの証明書をすべて取得します。この API により、特定のトラストストアの証明書の一覧が出力されます。
パブリック クラウド ユーザー:
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 はキーストアの名前です
- OAuth 2.0 アクセス トークンの取得の説明に従って、$TOKEN が OAuth 2.0 アクセス トークンに設定されている
- この例で使用されている
curlオプションについては、curl を使用するをご覧ください。
出力例:
サンプル トラストストア
myCompanyTruststoreの証明書は次のとおりです。[ "serverCert" ]
-
キーストアまたはトラストストアから特定の証明書の証明書の詳細を取得します。
この API は、特定のトラストストアにある特定の証明書に関する情報を返します。
パブリック クラウド ユーザー:
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 は証明書の名前です
- OAuth 2.0 アクセス トークンの取得の説明に従って、$TOKEN が 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",
ステップ 1 で取得した実際のサーバー証明書と、ステップ 3 で取得したトラストストアに保存されている証明書が一致することを確認します。一致しない場合は、それが問題の原因です。
上記の例から、証明書を 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",
トラストストアに格納されているリーフ証明書がバックエンド サーバーの証明書と一致している。
- 中間証明書:
バックエンド サーバーから:
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",
トラストストアに保存されている中間証明書がバックエンド サーバーの証明書と一致している。
- ルート証明書:
バックエンド サーバーから:
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 のトラストストアにまったく存在しない。
トラストストアにルート証明書がないため、Message Processor は次の例外をスローします。
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
エラーコード
messaging.adaptors.http.flow.SslHandshakeFailedを含む503 Service Unavailableをクライアント アプリケーションに返します。
- リーフ証明書:
解決策
- バックエンド サーバーの適切かつ完全な証明書チェーンがあることを確認します。
- Public Cloud ユーザーの場合は、 Cloud の TLS 証明書を更新するの手順に沿って、証明書を Apigee Edge の Message Processor トラストストアに更新します。
- Private Cloud ユーザーの場合は、 Private Cloud の TLS 証明書を更新するの手順に沿って、証明書を Apigee Edge の Message Processor トラストストアに更新します。
原因: バックエンド サーバーの証明書の FQDN とターゲット エンドポイントのホスト名が一致しない
バックエンド サーバーが、ターゲット エンドポイントで指定されたホスト名と一致しない FQDN を含む証明書チェーンを提示すると、Apigee Edge のメッセージ プロセスはエラー 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 を返します。
診断
- このエラーが発生している 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です。 次の例に示すように、
opensslコマンドを使用して、バックエンド サーバーの証明書の FQDN を特定します。openssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
次に例を示します。
openssl s_client -connect backend.company.com:443
Certificate chainセクションを調べて、リーフ証明書のサブジェクトの CN の一部として指定されている FQDN をメモします。Certificate chain 0 s:/
CN=backend.apigee.neti:/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です。- ステップ 1 で取得したバックエンド サーバーのホスト名とステップ 2 で取得した FQDN が一致しない場合、これがエラーの原因です。
- 上記の例では、ターゲット エンドポイントのホスト名は
backend.company.comです。ただし、バックエンド サーバーの証明書の FQDN 名はbackend.apigee.netです。一致しないため、このエラーが発生します。
解決策
この問題は、次のいずれかの方法で解決できます。
正しい FQDN
バックエンド サーバーのキーストアを正しい FQDN、有効で完全な証明書チェーンで更新します。
- 正しい FQDN を持つバックエンド サーバーの証明書がない場合は、適切な CA(認証局)から適切な証明書を取得します。
- ターゲット エンドポイントで指定されたホスト名と同じ、バックエンド サーバーの正しい FQDN を含む有効で完全な証明書チェーンがリーフ証明書またはエンティティ証明書にある場合は、完全な証明書チェーンでバックエンドのキーストアを更新します。
バックエンド サーバーを修正する
正しいバックエンド サーバーのホスト名でターゲット エンドポイントを更新します。
- ターゲット エンドポイントでホスト名が正しく指定されていない場合は、バックエンド サーバーの証明書の FQDN と一致する正しいホスト名になるようにターゲット エンドポイントを更新します。
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>
原因: バックエンド サーバーによって提示された証明書または証明書チェーンが正しくないか、不完全である
診断
- 次のように、バックエンド サーバーのホスト名に対して
opensslコマンドを実行して、バックエンド サーバーの証明書チェーンを取得します。openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
上記のコマンドの出力から
Certificate chainをメモします。openssl コマンド出力のバックエンド サーバーの証明書チェーンの例:
Certificate chain 0 s:/
CN=mocktarget.apigee.neti:/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 - 証明書チェーンを検証するで説明されているように、適切かつ完全な証明書チェーンがあることを確認します。
バックエンド サーバーの有効で完全な証明書チェーンがない場合、それがこの問題の原因です。
上記のバックエンド サーバーの証明書チェーンの例では、ルート証明書がありません。そのため、このエラーが発生します。
解決策
有効で完全な証明書チェーンでバックエンド サーバーのキーストアを更新します。
- バックエンド サーバーのキーストアで、有効で完全な証明書チェーンを更新します。
問題が解決しない場合は、 診断情報の収集が必要な場合に進みます。
診断情報の収集が必要な場合
上記の手順でも問題が解決しない場合は、次の診断情報を収集して Apigee Edge サポートにお問い合わせください。
- Public Cloud ユーザーの場合は、次の情報を提供してください。
- 組織名
- 環境名
- API プロキシ名
- エラーを再現するための完全な
curlコマンド - エラーが記録されているトレース ファイル
opensslコマンドの出力:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#- バックエンド サーバー上でキャプチャした TCP/IP パケット
- Private Cloud ユーザーの場合は、次の情報を提供してください。
- 確認したエラー メッセージ全文
- API プロキシ バンドル
- エラーが記録されているトレース ファイル
- Message Processor のログ
/opt/apigee/var/log/edge-message-processor/logs/system.log opensslコマンドの出力:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#- バックエンド サーバーまたは Message Processor 上でキャプチャした TCP/IP パケット。
- キーストアまたはトラストストアの証明書をすべて取得する API の出力と、 キーストアまたはトラストストアから証明書の詳細を取得する API を使用して取得した各証明書の詳細。