您目前查看的是 Apigee 和 Apigee Hybrid 說明文件。
查看
Apigee Edge 說明文件。
問題
Apigee Hybrid API 要求失敗,並顯示 TLS 連線錯誤。這類錯誤通常是連線重設和警示信號交換失敗。
錯誤訊息
API 呼叫失敗,並顯示類似下列錯誤的傳輸層安全標準 (TLS) 錯誤,或顯示其他但不完全相同的錯誤:
* 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 密鑰 | Apigee 命名空間中缺少 org-envgroup 的 Kubernetes Secret。 |
Apigee Hybrid |
| SSL 憑證格式不正確 | 覆寫檔案虛擬主機部分所指的 SSL 憑證格式有誤。 | Apigee Hybrid |
| SSL 金鑰與 SSL 憑證不符 | SSL 金鑰與覆寫檔案虛擬主機部分所指的 SSL 憑證不符。 | Apigee Hybrid |
原因:缺少 Ingress Kubernetes Secret
診斷
- 分析 apigee 命名空間中
apigee-watcherPod 的記錄,查看是否有任何錯誤。
您可能會看到下列錯誤:
其中: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 Hybrid 機構的名稱ENV_GROUP是環境群組的名稱。
apigee-watcher找不到 Apigee Hybrid 組織上述環境群組的 Kubernetes 密鑰。 - 使用下列指令,確認 Kubernetes 密鑰確實遺失:
kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
<no output>
這個範例顯示MY_HYBRID_PROJECT-ENV_GROUP沒有 Kubernetes Secret。這些項目可能遭到誤刪。
解析度
您可以使用 overrides.yaml 檔案中的 TLS 憑證和金鑰檔案資訊,重新建立缺少的 Kubernetes 密鑰:
- 執行下列指令,使用 Helm 重新建立缺少的密鑰:
模擬測試:
helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=ENV_GROUP \ -f OVERRIDES_FILE \ --dry-run=server
請務必加入顯示的所有設定,包括
--atomic,以便在動作失敗時回溯。您的安裝項目可能使用與 ENV_GROUP 不同的 ENV_GROUP_RELEASE_NAME 設定。如需設定相關資訊,請參閱「使用 Helm 安裝 Apigee Hybrid」。
安裝圖表:
helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=ENV_GROUP \ -f OVERRIDES_FILE
- 使用下列指令,確認 Kubernetes 密鑰是否已順利建立:
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
如果您已使用 Kubernetes 密鑰設定單向 TLS,如選項 2:Kubernetes 密鑰所述,請執行下列指令:
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>
如果您已使用 Kubernetes 密鑰設定單向 TLS,如選項 2:Kubernetes 密鑰所述,請執行下列指令:
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 支援團隊。