現在、Apigee と Apigee ハイブリッドのドキュメントを表示しています。
Apigee Edge ドキュメントを表示する
症状
TLS 接続エラーで Apigee ハイブリッド API リクエストが失敗する。通常、これらのエラーは接続のリセットとハンドシェイクの失敗です。
エラー メッセージ
TLS で API 呼び出しが失敗し、次のようなエラーまたは別のエラーが表示されます。
* TLSv1.2 (OUT), TLS handshake, Client hello (1): * LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to example.apis.com:443 * Closing connection 0 curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to example.apis.com:443
* (304) (OUT), TLS handshake, Client hello (1): * Recv failure: Connection reset by peer * LibreSSL/3.3.6: error:02FFF036:system library:func(4095):Connection reset by peer * Closing connection curl: (35) Recv failure: Connection reset by peer
* (304) (OUT), TLS handshake, Client hello (1): * LibreSSL/3.3.6: error:1404B410:SSL routines:ST_CONNECT:sslv3 alert handshake failure * Closing connection curl: (35) LibreSSL/3.3.6: error:1404B410:SSL routines:ST_CONNECT:sslv3 alert handshake failure
考えられる原因
原因 | 説明 | トラブルシューティングの実施対象 |
---|---|---|
Ingress Kubernetes Secret がない | org-envgroup の Kubernetes Secret が Apigee 名前空間にありません。 |
Apigee ハイブリッド |
SSL 証明書の形式が正しくない | オーバーライド ファイルの virtualhosts セクションで参照されている SSL 証明書の形式が正しくありません。 | Apigee ハイブリッド |
SSL 鍵が SSL 証明書と一致しない | SSL 鍵が、オーバーライド ファイルの virtualhosts セクションで参照されている SSL 証明書と一致しません。 | Apigee ハイブリッド |
原因: Ingress Kubernetes Secret がない
診断
- apigee 名前空間内の
apigee-watcher
Pod のログを分析し、エラーがあるかどうかを確認します。
次のようなエラーが発生することがあります。 ここでNOT_FOUND: failed to get secret "MY_HYBRID_PROJECT-ENV_GROUP" in namespace "apigee": secrets "MY_HYBRID_PROJECT-ENV_GROUP" not found
MY_HYBRID_PROJECT
は Apigee ハイブリッド組織の名前です。ENV_GROUP
は、環境グループの名前です。
apigee-watcher
が Apigee ハイブリッド組織の上の環境グループの Kubernetes Secret を見つけられなかったことを示します。 - 次のコマンドを使用して、Kubernetes Secret が実際に欠落していることを確認します。
kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
<no output>
この例は、MY_HYBRID_PROJECT-ENV_GROUP
の Kubernetes Secret が存在しないことを示しています。誤って削除された可能性があります。
解決策
overrides.yaml
ファイルの TLS 証明書と鍵ファイル情報を使用して、欠落している Kubernetes Secret を再作成できます。
- 次のコマンドを実行して、欠落している Secret を再作成します。
apigeectl apply -f overrides/overrides.yaml --settings virtualhosts
上のコマンドの出力には、Secret が作成されたことが示されます。
secret/MY_HYBRID_PROJECT-ENV_GROUP created
- 次のコマンドを使用して、Kubernetes Secret が正常に作成されたことを確認します。
kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
このコマンドの出力は次のようになります。
MY_HYBRID_PROJECT-ENV_GROUP Opaque 2 7s
問題が解決しない場合は、下記の診断情報の収集が必要な場合をご覧ください。
原因: SSL 証明書の形式が正しくない
診断
まず、証明書ファイルが .PEM ファイルであることを確認します。正しい形式の SSL 証明書が apigee-ingressgateway
に読み込まれているかどうかを確認するには、次の手順を行います。
オプション 1: 鍵 / 証明書のペアで説明されているように証明書と鍵のペアを使用して一方向 TLS を構成した場合は、次のコマンドを実行します。
openssl x509 -in $CERT_FILE -text -noout
出力例(エラーなし):
Certificate: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C = US, O = xyz, OU = abc, CN = INTERIM-CN Validity Not Before: Dec 18 09:40:23 2023 GMT Not After : May 1 09:40:23 2025 GMT Subject: C = US, O = xyz, OU = abc, CN = shrey.example.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: Trimmed Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption Trimmed
オプション 2: Kubernetes Secret で説明されているように Kubernetes Secret を使用して一方向 TLS を構成した場合は、次のコマンドを実行します。
kubectl -n apigee get secret <$SECRET_NAME> -o jsonpath='{.data.cert}'| base64 -d > certfile ; openssl x509 -in certfile -text -noout kubectl -n apigee get secret <$SECRET_NAME> -o jsonpath='{.data.cert}'| base64 -d | openssl x509 -noout -text
出力例(エラーなし):
Certificate: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C = US, O = xyz, OU = abc, CN = INTERIM-CN Validity Not Before: Dec 18 09:40:23 2023 GMT Not After : May 1 09:40:23 2025 GMT Subject: C = US, O = xyz, OU = abc, CN = shrey.example.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: Trimmed Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption Trimmed
上記のコマンドの出力が次のようになる場合
unable to load certificate 136613728412992:error:0D078095:asn1 encoding routines:asn1_item_embed_d2i:sequence not constructed:../crypto/asn1/tasn_dec.c:321:Type=X509 136613728412992:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:../crypto/pem/pem_oth.c:33:
次のようなエラーの場合
error loading certificates 8360934016:error:09FFF066:PEM routines:CRYPTO_internal:bad end line
解決策をご覧ください。
解決策
エラーは、証明書ファイルの形式エラーによって異なります。必要に応じて証明書エラーを修正します。
出力にエラーではなく証明書が表示される場合は、原因: SSL 鍵が SSL 証明書と一致しないを参照してください。
原因: SSL 鍵が SSL 証明書と一致しない
診断
オプション 1: 鍵 / 証明書のペアで説明されているように証明書と鍵のペアを使用して一方向 TLS を構成した場合は、次のコマンドを実行します。
diff -q <(openssl rsa -noout -modulus -in $KEY_FILE ) <(openssl x509 -noout -modulus -in $CERT_FILE)
出力例(エラーなし):
diff -q <(openssl rsa -noout -modulus -in my_server.key ) <(openssl x509 -noout -modulus -in my_server.pem)
<No output>
オプション 2: Kubernetes Secret で説明されているように Kubernetes Secret を使用して一方向 TLS を構成した場合は、次のコマンドを実行します。
diff -q <(kubectl -n apigee get secrets $SECRET_NAME -o jsonpath='{.data.key}'| base64 -d | openssl rsa -noout -modulus) <(kubectl -n apigee get secrets $SECRET_NAME -o jsonpath='{.data.cert}'| base64 -d | openssl x509 -noout -modulus)
出力例(エラーなし):
diff -q <(kubectl -n apigee get secrets my-apigee-hybrid-env-grp -o jsonpath='{.data.key}'| base64 -d | openssl rsa -noout -modulus) <(kubectl -n apigee get secrets my-apigee-hybrid-env-grp -o jsonpath='{.data.cert}'| base64 -d | openssl x509 -noout -modulus)
<No output>
上記のコマンドの出力に次のようなエラーが表示される場合:
unable to load Private Key 133504499987776:error:09091064:PEM routines:PEM_read_bio_ex:bad base64 decode:../crypto/pem/pem_lib.c:949: Files /dev/fd/63 and /dev/fd/62 differ
SSL 鍵が SSL 証明書と一致していないため、解決策のセクションをご覧ください。
解決策
正しい秘密鍵とそれに対応する SSL 証明書を提供していることを確認します。秘密鍵と SSL 証明書の問題を修正します。
コマンドの出力が表示されない場合は、SSL 証明書と SSL 鍵が一致しています。
診断情報の収集が必要な場合
このページの手順を行っても問題が解決しない場合は、次の診断情報を収集して Apigee サポートに提出してください。
- エラーが表示されている
curl
の詳細出力全体。 - エラーが発生しているマシンで
tcpdump
をキャプチャし、機密情報と IP アドレスを削除して共有します。 - ネットワーク チームに相談して、Apigee サポートと共有するネットワーク トポロジ全体とネットワーク フローの準備を整えてください。