現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントをご確認ください。 情報
内容
クライアント アプリケーションが、API 呼び出しのレスポンスとして、HTTP ステータス コード 503 Service Unavailable
とエラーコード 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" } } }
考えられる原因
Apigee Edge の Message Processor とバックエンド サーバーの間の SSL handshake プロセス中に失敗したため、さまざまな理由でステータス コード 503 Service Unavailable
とエラーコード messaging.adaptors.http.flow.SslHandshakeFailed
が返されることがあります。通常、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 のトラストストア:
- バックエンド サーバーの完全な証明書チェーンと一致しない証明書チェーンが含まれている。または、
- バックエンド サーバーの完全な証明書チェーンが含まれていない
- バックエンド サーバーによって提示された証明書チェーンにより、次のようになります。
- ターゲット エンドポイントで指定されたホスト名と一致しない 完全修飾ドメイン名 (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] ページに移動します。
- エラーが発生した期間を選択します。
[Time] に [Fault Code] をプロットします。
次のように、障害コード
messaging.adaptors.http.flow.SslHandshakeFailed
を含むセルを選択します。( 拡大画像を表示)
障害コード
messaging.adaptors.http.flow.SslHandshakeFailed
に関する情報が次のように表示されます。( 拡大画像を表示)
[ログを表示 ] をクリックし、失敗したリクエストの行を開きます。
( 拡大画像を表示)
- [ログ] ウィンドウで、次の詳細をメモします。
- リクエスト メッセージ ID
- ステータス コード:
503
- 障害ソース:
target
- 障害コード:
messaging.adaptors.http.flow.SslHandshakeFailed
Trace
手順 2: Trace ツールを使用する
Trace ツールを使用してエラーを診断するには:
- トレース セッションを有効にして、次のいずれかを行います。
503 Service Unavailable
エラー(エラーコード:messaging.adaptors.http.flow.SslHandshakeFailed
)が発生するまで待ちます。- 問題を再現できる場合は、API を呼び出して問題を再現します
503 Service Unavailable
[Show all FlowInfos] が有効になっていることを確認します。
- 失敗したリクエストの 1 つを選択し、トレースを調べます。
- トレースのさまざまなフェーズを順に確認し、エラーが発生した場所を見つけます。
通常、次に示すように、このエラーはターゲット リクエスト フローの開始フェーズの後に発生します。
( 拡大画像を表示)
- トレースで次の値をメモします。
- エラー:
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 handshake に失敗したことを示します。
- エラー:
- トレースの [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
で失敗するリクエストがあるかどうかを検索します。 messaging.adaptors.http.flow.SslHandshakeFailed
の値と一致する X-Apigee-fault-code の503
エラーが見つかった場合は、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 のログの使用
- 一般的な診断手順で説明されているように、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-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 のトラストストアに、不正確または不完全な証明書または証明書チェーンがある
診断
- 一般的な診断手順で説明されているように、API Monitoring、Trace ツール、または NGINX アクセスログを使用して確認されたエラーの障害コード、障害ソースを特定します。
- 障害コードが
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 パケットをキャプチャできます。バックエンド サーバーでパケットが復号されるため、バックエンド サーバーでパケットをキャプチャすることをおすすめします。
TCP/IP パケットをキャプチャするには、次の tcpdump コマンドを使用します。
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 のトラストストアに保存されている証明書を比較する
- バックエンド サーバーの証明書チェーンを特定します。
- 次の手順で、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] を選択します。特定のトラストストア参照の [参照] 列の名前をメモします。これがトラストストア名になります。
( 拡大画像を表示)
上の例では、トラストストア名は次のとおりです。
myCompanyTruststoreRef:
myCompanyTruststore
次の API を使用して、前の手順で特定したトラストストアに保存されている証明書を取得します。
キーストアまたはトラストストアのすべての証明書を取得する。この 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" ]
-
キーストアまたはトラストストアから特定の証明書の証明書の詳細を取得する。この 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",
手順 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
503 Service Unavailable
をエラーコードmessaging.adaptors.http.flow.SslHandshakeFailed
とともにクライアント アプリケーションに返します。
- リーフ証明書:
解像度
- バックエンド サーバーの適切で完全な証明書チェーンがあることを確認します。
- Public Cloud ユーザーの場合は、 Cloud の TLS 証明書を更新するの手順に沿って、Apigee Edge の Message Processor トラストストアに証明書を更新します。
- Private Cloud ユーザーの場合は、 Private Cloud 用の TLS 証明書を更新するの手順に沿って、Apigee Edge の Message Processor トラストストアに証明書を更新します。
原因: バックエンド サーバーの証明書の 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
を返します。
診断
- このエラーが発生している 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.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
です。- 手順 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.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 - 証明書チェーンを検証するの説明に沿って、適切で完全な証明書チェーンがあることを確認します。
バックエンド サーバーの有効かつ完全な証明書チェーンがない場合は、これが問題の原因です。
上記のサンプル バックエンド サーバーの証明書チェーンには、ルート証明書がありません。このため、このエラーが発生します。
解像度
有効で完全な証明書チェーンを使用して、バックエンド サーバーのキーストアを更新します。
- バックエンド サーバーのキーストア内の有効かつ完全な証明書チェーンを更新します。
問題が解決しない場合は、 診断情報の収集が必要な場合に進みます。
診断情報の収集が必要な場合
上記の手順でも問題が解決しない場合は、次の診断情報を収集して 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 を使用して取得した各証明書の詳細。
参照
- 証明書チェーン オブ トラスト
- OpenSSL コマンド