502 閘道錯誤 - 鏈結自行簽署憑證

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

問題

用戶端應用程式收到訊息為 502 的 HTTP 回應代碼 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 會驗證目標伺服器的憑證,如果該憑證不信任 ,系統會引發執行階段錯誤 邊緣公有雲和私有雲使用者
Apigee Edge Management Server 使用自行簽署的憑證 首次設定 Edge Microgateway 時,邊緣閘道會連線至 Apigee Edge 啟用傳輸層安全標準 (TLS)。如果 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 很有可能是從目標伺服器收到自行簽署的憑證。如要確認這一點,請執行 步驟如下:

  1. 執行下列 openssl 指令,驗證目標伺服器的 憑證鏈結:
    echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
    
  2. 如果目標伺服器的憑證鏈結確實是自行簽署的憑證, 問題。

    在以下範例中,請注意目標伺服器呈現自行簽署的憑證:

    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
    

解析度

  1. 與擁有目標伺服器的團隊合作,採購由 。
  2. 如果這個方法不可行,請考慮下列其中一種方式,允許自行簽署 憑證

    選項 #1:設定系統屬性,允許 Edge Microgateway 信任所有 認證

    1. 如果要使用 docker 使用 Node.js 不信任的 CA
    2. 否則,請匯出名為 NODE_EXTRA_CA_CERTS 的環境變數, 並指向根憑證授權單位檔案

      這項資訊已記錄在官方 Node.js 網站。

    ,瞭解如何調查及移除這項存取權。

    方法 #2:設定 Edge Microgateway YAML 設定檔以信任該特定 目標伺服器的憑證

    1. 確認您已準備好目標伺服器的憑證 (或鏈結),格式為 PEM。目的地: 將其他憑證格式轉換為 PEM 憑證,請按照 將憑證轉換為支援的格式
    2. 如果存在憑證鏈結,請確認憑證正確無誤 順序。分葉憑證應一律位於第一順位,其次是中階憑證 憑證和根憑證進一步說明 正在驗證憑證鏈結

      在以下範例中,我們已為 untrusted-root.badssl.com

      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 configureedgemicro 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' }

診斷

  1. 在這種情況下,管理伺服器 (management.apigee-dev.net) 可能傳回自行簽署的 TLS 憑證
  2. Apigee Edge 系統管理員可能已提供憑證 擁有一份副本
  3. 否則,請執行下列指令來取得憑證的相關資訊:
    echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
    
  4. 如果管理伺服器擁有自行簽署的憑證,就是 問題。

解析度

  1. 與擁有目標伺服器的團隊合作,採購由 。
  2. 如果這個方法不可行,請按照下列步驟允許自行簽署 憑證

  3. 設定系統屬性,允許 Edge Microgateway 信任所有憑證。
  4. 如果要使用 docker 使用 Node.js 不信任的 CA。
  5. 否則,請匯出名為 NODE_EXTRA_CA_CERTS 的環境變數, 指向根憑證授權單位檔案 官方記錄了 Node.js 網站。

必須收集診斷資訊

如果按照上述說明操作後仍無法解決問題,請收集下列資訊 ,然後與 Apigee Edge 支援團隊聯絡:

  • 記錄檔:預設資料夾為 /var/tmp,但可能在以下位置遭到覆寫: 主 config.yaml 檔案 (logging > dir parameter)。是 建議先將 log > level 變更為 info,再提供 記錄檔來匯出至 Apigee Edge 支援頁面
  • 設定檔:Edge Microgateway 的主要設定位於 YAML 中 該檔案位於預設 Edge Microgateway 資料夾中 $HOME/.edgemicro。另有 名為 default.yaml 的預設設定檔,以及每個環境各有一個 ORG-ENV-config.yaml。上傳這個檔案 完整存取受影響的機構和環境

    參考文件

    將 Edge UI 設為使用傳輸層安全標準 (TLS) 存取 Edge API