您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
問題
用戶端應用程式會收到 HTTP 回應代碼 502,以及訊息 Bad Gateway,做為 Edge Microgateway 中 API 呼叫的回應。
或者,管理員執行 self signed certificate in certificate
chain
edgemicro configure 指令時會收到錯誤訊息。
錯誤訊息
用戶端會看到下列回應訊息:
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 公有和私有雲使用者 |
| Apigee Edge 管理伺服器使用自行簽署的憑證 | 首次設定 Edge Microgateway 時,系統會透過 TLS 連線至 Apigee Edge,以進行啟動程序。如果 Edge 提供自行簽署的憑證,就會失敗。 | Edge Private Cloud 使用者 |
原因:目標伺服器提供自行簽署的憑證
如果目標伺服器在 南向連線中提供 自行簽署的憑證,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 - Configure 1-way and 2-way Southbound TLS」影片。 詳情請參閱「 在 Edge Microgateway 伺服器上設定 SSL」。
如果問題仍未解決,請參閱「必須收集診斷資訊」。
原因:Apigee Edge 管理伺服器使用自行簽署的憑證
首次設定 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。請針對受影響的機構和環境,完整上傳這個檔案。參考文件