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

您目前查看的是 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 很可能已收到來自目標伺服器的自行簽署憑證。如要確認這一點,請執行下列步驟:

  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. 與目標伺服器的擁有團隊合作,取得由信任的憑證授權單位 (CA) 簽署的正確 TLS 憑證。
  2. 如果無法這麼做,請考慮下列任一選項,在 Edge Microgateway 中允許使用自簽憑證。

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

    1. 如果您使用 Docker,請參閱 使用 Node.js 不信任的 CA
    2. 否則,請匯出名為 NODE_EXTRA_CA_CERTS 的環境變數,指向根 CA 檔案。

      官方 Node.js 網站有相關文件。

    選項 2:設定 Edge Microgateway YAML 設定檔,信任該目標伺服器的特定憑證

    1. 請確認您擁有 PEM 格式的目標伺服器憑證 (或鏈結)。如要將其他憑證格式轉換為 PEM,請按照「 將憑證轉換為支援的格式」一文中的操作說明進行。
    2. 如有憑證鏈,請確認憑證順序正確。葉子憑證一律應排在最前面,接著是中繼憑證,最後是根憑證。如要進一步瞭解,請參閱「 驗證憑證鏈」。

      在下列範例中,我們已為 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 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. 與目標伺服器的擁有團隊合作,取得由信任的憑證授權單位 (CA) 簽署的正確 TLS 憑證。
  2. 如果無法這麼做,請按照下列步驟,在 Edge Microgateway 中允許自行簽署的憑證。

  3. 設定系統屬性,允許 Edge Microgateway 信任所有憑證。
  4. 如果您使用 Docker,請參閱「 使用 Node.js 不信任的 CA。
  5. 否則,請匯出名為 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。請針對受影響的機構和環境,完整上傳這個檔案。

    參考文件

    設定 Edge UI,使用 TLS 存取 Edge API