<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)が、サービス アカウントで指定されたホスト名と ターゲット エンドポイント
- 不正確または不完全な証明書チェーンが含まれている
この問題の原因としては、次のことが考えられます。
原因 | 説明 | トラブルシューティングの実施対象 |
---|---|---|
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 を使用してエラーを診断するには:
- <ph type="x-smartling-placeholder"></ph> Apigee Edge UI にログインするユーザーとして、 付与します。
問題を調査する組織に切り替えます。
- [Analyze] >API モニタリング >Investigate ページをご覧ください。
- エラーが発生した期間を選択します。
障害コードを Time に対してプロットします。
<ph type="x-smartling-placeholder">障害コードが含まれているセルを選択してください
messaging.adaptors.http.flow.SslHandshakeFailed
: この図にあるとおり 下にあります。( 拡大画像を表示)
障害コードに関する情報
messaging.adaptors.http.flow.SslHandshakeFailed
は次のように表示されます。 下に示します。( 拡大画像を表示)
[ログを表示 ] をクリックし、失敗したリクエストの行を開きます。
( 拡大画像を表示)
- [ログ] ウィンドウで、次の詳細をメモします。
<ph type="x-smartling-placeholder">
- </ph>
- リクエスト メッセージ ID
- ステータス コード:
503
- 障害の発生元:
target
- 障害コード:
messaging.adaptors.http.flow.SslHandshakeFailed
トレース
手順 2: Trace ツールを使用する
<ph type="x-smartling-placeholder">Trace ツールを使用してエラーを診断するには:
- トレース セッションを有効にし、以下のいずれかを行います。
<ph type="x-smartling-placeholder">
- </ph>
- エラーコードを含む
503 Service Unavailable
エラーを待つmessaging.adaptors.http.flow.SslHandshakeFailed
が発生する、または - 問題を再現できる場合は、API 呼び出しを行って問題を再現してください。
503 Service Unavailable
- エラーコードを含む
[Show all FlowInfos] が有効になっていることを確認します。
- 失敗したリクエストのいずれかを選択し、トレースを調べます。
- トレースのさまざまなフェーズを移動して、エラーが発生した場所を特定します。
このエラーは通常、Target Request Flow Started フェーズの後に表示されます。 次のように指定します。
( 拡大画像を表示)
- トレースから次の値をメモします。
<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 でバックエンド サーバーの あります。
- エラー:
- トレースの [AX(Analytics Data Recorded)] フェーズに移動してクリックします。
[Phase Details Error Headers] セクションまで下にスクロールし、 X-Apigee-fault-codeX-Apigee-fault-code と X-Apigee-fault-sourceX-Apigee-fault-code の値 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 アクセスログを使用する
<ph type="x-smartling-placeholder">NGINX アクセスログを使用してエラーを診断するには:
- Private Cloud ユーザーの場合は、NGINX アクセスログを使用して、
HTTP
503 Service Unavailable
に関する重要な情報。 NGINX アクセスログを確認します。
<ph type="x-smartling-placeholder">/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- エラーコードを含む
503
エラーがないか検索します 特定の期間にmessaging.adaptors.http.flow.SslHandshakeFailed
( または、まだ503
で失敗しているリクエストがあるかどうか。 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">- 失敗したリクエストのメッセージ ID を特定するには、API Monitoring、Trace ツール、 一般的な診断手順で説明しているように、NGINX Access Logs を使用します。
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 のトラストストア内の証明書または証明書チェーンが正しくないか、不完全である
診断
- API を使用して、観測されたエラーの [Fault Code](障害コード)と [Fault Source] を特定します。 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"
の場合は、SSL handshake が Apigee Edge の Message Processor でバックエンド サーバーの IP を検証できなかったため、失敗しました。 あります。
この問題は、次の 2 つのフェーズでデバッグできます。
- フェーズ 1: バックエンド サーバーの証明書チェーンを決定する
- フェーズ 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">- Public Cloud ユーザーは、オンプレミスで TCP/IP パケットをキャプチャします。 バックエンドサーバーと通信します
- Private Cloud ユーザーは、TCP/IP パケットをキャプチャして バックエンド サーバーまたは Message Processor で受信します。できれば、 パケットがバックエンド サーバー上で復号されるため、
以下を使用 <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">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
を送信します。 パケット #48 のRST, 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 のトラストストアに保存されている証明書などです。
- パケット #43: Message Processor(送信元)が
バックエンド サーバー(宛先)に
フェーズ 2
フェーズ 2: バックエンド サーバーの証明書と、 Message Processor のトラストストア
- バックエンド サーバーの証明書チェーンを決定します。
- 次を使用して、Message Processor のトラストストアに保存されている証明書を特定します。
次のとおりです。
<ph type="x-smartling-placeholder">
- </ph>
TrustStore
要素からトラストストア参照名を取得するTargetEndpoint
のSSLInfo
セクションにあります。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 >参照。スペース内の名前を 特定のトラストストア参照の Reference 列。これがお客様の トラストストア名を指定します。
( 拡大画像を表示)
上記の例では、トラストストア名は次のようになります。
myCompanyTruststoreRef:
myCompanyTruststore
トラストストアに保存されている証明書を取得します(前のステップで特定)。 次の API を使用します。
<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" ]
- <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",
手順 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 ユーザーは、 <ph type="x-smartling-placeholder"></ph> クラウドの TLS 証明書を更新して、証明書を Apigee Edge の Message Processor のトラストストア。
- 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
。
診断
- これを確認している 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
セクションを調べて、指定された 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
です。- 手順 1 で取得したバックエンド サーバーのホスト名と FQDN を取得した場合 ステップ 2 が一致しない場合、それがエラーの原因です。
- 上記の例では、ターゲット エンドポイントのホスト名は次のようになります。
backend.company.com
。ただし、バックエンド サーバーの証明書に含まれる FQDN 名は、backend.apigee.net
です。両者が一致しないため、このエラーが発生します。
解決策
この問題は、次のいずれかの方法で解決できます。
正しい FQDN
バックエンド サーバーのキーストアを、正しい FQDN、有効かつ完全な証明書で更新する チェーン:
- 正しい FQDN を持つバックエンド サーバーの証明書がない場合は、 次に、適切な CA(認証局)から適切な証明書を入手します。
- <ph type="x-smartling-placeholder">
- 正しい 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- 以下で説明されている適切な完全な証明書チェーンがあることを確認します。 証明書チェーンを検証する。
バックエンド サーバーに有効かつ完全な証明書チェーンがない場合は、 それがこの問題の原因です
上記のサンプル バックエンド サーバーの証明書チェーンでは、ルート証明書は ありません。このため、このエラーが発生します。
解決策
バックエンド サーバーのキーストアを有効で完全な証明書チェーンで更新します。
<ph type="x-smartling-placeholder"></ph> バックエンド サーバーの証明書チェーンが有効で完全なものであることを確認する。
<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">
- </ph>
- 確認された完全なエラー メッセージ
- 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 パケット。
- 出力 <ph type="x-smartling-placeholder"></ph> キーストア API またはトラストストア API のすべての証明書と、その詳細情報を 使用して取得した各証明書は、 <ph type="x-smartling-placeholder"></ph> キーストア API またはトラストストア API から証明書の詳細を取得するをご覧ください。