您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
問題
用戶端應用程式會收到 502
的 HTTP 回應代碼,以及 Bad Gateway
訊息,用於回應 Edge Microgateway 中的 API 呼叫。
或者,管理員在執行
edgemicro configure
指令時會收到 self signed certificate in certificate
chain
錯誤。
錯誤訊息
用戶端會看到以下回應訊息:
HTTP/1.1 502 Bad Gateway
以下為兩個常見的錯誤回應範例:
{"message":"self signed certificate in certificate chain","code":"SELF_SIGNED_CERT_IN_CHAIN"}
{"message":"self signed certificate","code":"DEPTH_ZERO_SELF_SIGNED_CERT"}
或者,執行 edgemicro configure
時也可能會發生這個錯誤:
{ Error: self signed certificate in certificate chain at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34) at TLSSocket.emit (events.js:189:13) at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }
可能原因
原因 | 說明 | 適用的疑難排解指示 |
---|---|---|
目標伺服器會提供自行簽署的憑證 | Edge Microgateway 會驗證目標伺服器的憑證,如果不是受信任,就會產生執行階段錯誤。 | Edge Public and Private Cloud 使用者 |
Apigee Edge Management Server 使用自行簽署的憑證 | 首次設定 Edge Microgateway 時,系統會透過傳輸層安全標準 (TLS) 連線至 Apigee Edge,以便啟動啟動程序。如果 Edge 提供自行簽署的憑證,就會失敗。 | Edge Private Cloud 使用者 |
原因:目標伺服器提供自行簽署的憑證
如果 southbound 連線在目標伺服器提供 自行簽署的憑證,根據預設,Edge Microgateway 會引發這個錯誤,因為該憑證不信任自行簽署的憑證。
診斷
您可能會在記錄中發現下列錯誤 (/var/tmp/edgemicro-`hostname`-
*.log
):
2021-05-18T10:52:46.425Z [error][0:8000][1][gsc][test][edgemicro_badtargethost][][][2db53f80- b7c7-11eb-9abe-05b6297863f1][microgateway-core][][GET][502][self signed certificate in certificate chain][SELF_SIGNED_CERT_IN_CHAIN][]
錯誤代碼 SELF_SIGNED_CERT_IN_CHAIN
表示 Edge Microgateway 很有可能已從目標伺服器收到自行簽署的憑證。如要確認這一點,請執行下列步驟:
- 執行下列
openssl
指令,驗證目標伺服器的憑證鏈結:echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
-
如果目標伺服器的憑證鏈結確實為自行簽署,這就是問題的原因。
在以下範例中,請注意目標伺服器會提供自行簽署的憑證:
echo | openssl s_client -connect untrusted-root.badssl.com:443 -servername untrusted-root.badssl.com | openssl x509 -noout
depth=1 C = US, ST = California, L = San Francisco, O = BadSSL, CN = BadSSL Untrusted Root Certificate Authority verify error:num=19:self signed certificate in certificate chain verify return:0 DONE
解析度
- 與目標伺服器的團隊合作,取得由信任的憑證授權單位 (CA) 簽署的適當傳輸層安全標準 (TLS) 憑證。
如果無法這麼做,請考慮採用下列其中一個選項,在 Edge Microgateway 中允許自行簽署憑證。
選項 #1:設定系統屬性,允許 Edge Microgateway 信任所有憑證
- 如果您使用的是 docker,請參閱 使用不受 Node.js 信任的 CA
否則,請匯出名為
NODE_EXTRA_CA_CERTS
的環境變數,指向根 CA 檔案。詳情請見官方 Node.js 網站。
選項 #2:將 Edge Microgateway YAML 設定檔設為信任該目標伺服器的特定憑證
- 確認目標伺服器的憑證 (或鏈結) 有 PEM 格式。如要將其他憑證格式轉換為 PEM,請按照 將憑證轉換為支援的格式一文中的指示操作。
如果有憑證鏈結,請確認憑證的順序正確無誤。分葉憑證應放在最前面,後面依序接上中繼憑證和根憑證。如要進一步瞭解相關說明,請參閱 驗證憑證鏈結。
在以下範例中,我們已為
untrusted-root.badssl.com
設定信任的 CA 檔案。edgemicro: ... targets: - host: 'untrusted-root.badssl.com' ssl: client ca: /opt/apigee/certs/untrusted-root.pem
如要瞭解相關設定的操作說明,也可參考 Edge Microgateway Module - 設定單向和雙向南端傳輸層安全標準 (TLS) 影片。詳情請參閱「 在 Edge Microgateway 伺服器上設定 SSL」。
如果問題仍未解決,請參閱「必須收集診斷資訊」。
原因:Apigee Edge Management Server 使用自行簽署的憑證
首次設定 Edge Microgateway 時,您必須執行的其中一個指令為 edgemicro configure
或 edgemicro private configure
。這個指令會啟動叢集,並聯絡 Apigee Edge 下載必要資訊。
在 Edge Private Cloud 中,管理伺服器網址取決於 -m
引數。如果已啟用管理伺服器的傳輸層安全標準 (TLS),Edge Microgateway 會嘗試驗證管理伺服器提供的憑證。
以下是 Edge Private Cloud 的 edgemicro configure
指令範例:
edgemicro private configure -u <username> -p <password> -o apigee -e dev -v secure -r https://apigee-dev.net -m https://management.apigee-dev.net:8443
如果管理伺服器設為使用自行簽署的憑證,控制台輸出內容中會顯示下列錯誤。
{ Error: self signed certificate in certificate chain at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34) at TLSSocket.emit (events.js:189:13) at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }
診斷
- 在這種情況下,管理伺服器 (
management.apigee-dev.net
) 可能會傳回自行簽署的 TLS 憑證。 - 您的 Apigee Edge 系統管理員可能已提供憑證,並擁有該憑證的副本。
- 否則,請執行下列指令來取得憑證的相關資訊:
echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
- 如果管理伺服器有自行簽署的憑證,就是造成這個問題的原因。
解析度
- 與目標伺服器的團隊合作,取得由信任的憑證授權單位 (CA) 簽署的適當傳輸層安全標準 (TLS) 憑證。
如果無法這麼做,請執行下列操作,在 Edge Microgateway 中允許自行簽署的憑證。
- 請設定系統屬性,允許 Edge Microgateway 信任所有憑證。
- 如果您使用的是 docker,請參閱 使用不受 Node.js 信任的 CA。
- 否則,請匯出名為
NODE_EXTRA_CA_CERTS
的環境變數,指向根 CA 檔案。詳情請參閱官方 Node.js 網站。
必須收集診斷資訊
如果按照上述指示操作後仍無法解決問題,請收集下列診斷資訊,然後與 Apigee Edge 支援團隊聯絡:
- 記錄檔:預設資料夾為
/var/tmp
,但可在主要config.yaml
檔案 (logging > dir parameter
) 中遭到覆寫。建議先將log > level
變更為info
,再向 Apigee Edge 支援提供記錄檔。 - 設定檔:Edge Microgateway 的主要設定位於預設 Edge Microgateway 資料夾
$HOME/.edgemicro
的 YAML 檔案中。有一個名稱為default.yaml
的預設設定檔,每個環境 ORG-ENV-config.yaml
各有一個設定檔。針對受影響的機構和 env,完整上傳這個檔案。參考文件