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

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

  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 - 設定單向和雙向南端傳輸層安全標準 (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. 與目標伺服器的團隊合作,取得由信任的憑證授權單位 (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 各有一個設定檔。針對受影響的機構和 env,完整上傳這個檔案。

    參考文件

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