502 Bad Gateway - Chứng chỉ tự ký trong chuỗi

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
thông tin

Dấu hiệu

Ứng dụng khách nhận được mã phản hồi HTTP 502 cùng với thông báo Bad Gateway làm phản hồi cho các lệnh gọi API trong Edge Microgateway.

Ngoài ra, quản trị viên sẽ gặp lỗi self signed certificate in certificate chain khi chạy lệnh edgemicro configure.

Thông báo lỗi

Ứng dụng sẽ thấy thông báo phản hồi sau:

HTTP/1.1 502 Bad Gateway

Hai ví dụ phổ biến về phản hồi lỗi là:

{"message":"self signed certificate in certificate chain","code":"SELF_SIGNED_CERT_IN_CHAIN"}
{"message":"self signed certificate","code":"DEPTH_ZERO_SELF_SIGNED_CERT"}

Ngoài ra, lỗi này có thể xảy ra khi chạy 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' }

Các nguyên nhân có thể

Nguyên nhân Mô tả Hướng dẫn khắc phục sự cố áp dụng cho
Máy chủ đích xuất trình một chứng chỉ tự ký Edge Microgateway sẽ xác minh chứng chỉ của máy chủ đích và nếu chứng chỉ đó không đáng tin cậy, thì Edge Microgateway sẽ phát sinh lỗi thời gian chạy. Người dùng Edge Public Cloud và Private Cloud
Máy chủ quản lý Apigee Edge sử dụng chứng chỉ tự ký Khi bạn định cấu hình Edge Microgateway lần đầu tiên, cổng này sẽ kết nối với Apigee Edge qua TLS để khởi động. Nếu Edge xuất hiện một chứng chỉ tự ký, thì quá trình này sẽ không thành công. Người dùng Edge Private Cloud

Nguyên nhân: Máy chủ đích xuất trình một chứng chỉ tự ký

Nếu máy chủ đích trình bày một chứng chỉ tự ký tại kết nối phía nam, thì theo mặc định, Edge Microgateway sẽ đưa ra lỗi này vì không tin tưởng chứng chỉ tự ký.

Chẩn đoán

Bạn có thể thấy lỗi sau trong nhật ký (/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][]

Mã lỗi SELF_SIGNED_CERT_IN_CHAIN cho biết Edge Microgateway rất có thể đã nhận được một chứng chỉ tự ký từ máy chủ đích. Để xác nhận điều này, hãy thực hiện các bước sau:

  1. Chạy lệnh openssl sau để xác minh chuỗi chứng chỉ của máy chủ đích:
    echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
    
  2. Nếu chuỗi chứng chỉ của máy chủ mục tiêu thực sự là tự ký, thì đây là nguyên nhân gây ra vấn đề.

    Trong ví dụ sau, hãy lưu ý rằng máy chủ đích trình bày một chứng chỉ tự ký:

    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

Độ phân giải

  1. Làm việc với nhóm sở hữu máy chủ đích để mua một chứng chỉ TLS phù hợp do một Tổ chức phát hành chứng chỉ (CA) đáng tin cậy ký.
  2. Nếu không thể, hãy cân nhắc một trong các lựa chọn sau để cho phép chứng chỉ tự ký trong Edge Microgateway.

    Cách 1: Đặt một thuộc tính hệ thống để cho phép Edge Microgateway tin tưởng tất cả các chứng chỉ

    1. Nếu bạn đang sử dụng docker, hãy tham khảo phần Sử dụng CA không được Node.js tin cậy
    2. Nếu không, hãy xuất một biến môi trường có tên là NODE_EXTRA_CA_CERTS, trỏ đến tệp CA gốc.

      Điều này được ghi lại trên trang web chính thức của Node.js.

    Cách 2: Định cấu hình tệp cấu hình YAML của Edge Microgateway để tin tưởng chứng chỉ cụ thể đó cho máy chủ đích đó

    1. Đảm bảo rằng bạn có chứng chỉ (hoặc chuỗi) của máy chủ đích ở định dạng PEM. Để chuyển đổi các định dạng chứng chỉ khác sang PEM, hãy làm theo hướng dẫn trong phần Chuyển đổi chứng chỉ sang định dạng được hỗ trợ.
    2. Nếu có chuỗi chứng chỉ, hãy đảm bảo rằng các chứng chỉ nằm đúng thứ tự. Chứng chỉ lá phải luôn đứng đầu, tiếp theo là chứng chỉ trung gian, sau đó là chứng chỉ gốc. Bạn có thể xem thêm phần giải thích về vấn đề này trong phần Xác thực chuỗi chứng chỉ.

      Trong ví dụ sau, chúng ta đã định cấu hình tệp CA đáng tin cậy cho untrusted-root.badssl.com.

      edgemicro:
      ...
      targets:
        - host: 'untrusted-root.badssl.com'
          ssl:
            client
              ca: /opt/apigee/certs/untrusted-root.pem

    Hướng dẫn định cấu hình chế độ này cũng có trong video Mô-đun Edge Microgateway – Định cấu hình TLS một chiều và hai chiều ở hướng nam. Hãy tham khảo bài viết Định cấu hình SSL trên máy chủ Edge Microgateway để biết thêm thông tin.

Nếu vấn đề vẫn tiếp diễn, hãy chuyển đến phần Phải thu thập thông tin chẩn đoán.

Nguyên nhân: Apigee Edge Management Server sử dụng chứng chỉ tự ký

Khi thiết lập Edge Microgateway lần đầu tiên, một trong những lệnh bạn cần chạy là edgemicro configure hoặc edgemicro private configure. Lệnh này sẽ khởi động cụm và liên hệ với Apigee Edge để tải thông tin cần thiết xuống.

Đối với Edge Private Cloud, URL của Máy chủ quản lý được xác định bằng đối số -m. Nếu bạn đã bật TLS cho Máy chủ quản lý, thì Edge Microgateway sẽ cố gắng xác minh chứng chỉ do Máy chủ quản lý cung cấp.

Sau đây là ví dụ về lệnh edgemicro configure cho Edge Private Cloud:

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

Nếu Máy chủ quản lý được định cấu hình bằng chứng chỉ tự ký, thì bạn sẽ gặp lỗi sau trong đầu ra của bảng điều khiển.

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

Chẩn đoán

  1. Trong trường hợp này, Máy chủ quản lý (management.apigee-dev.net) có thể trả về một chứng chỉ TLS tự ký.
  2. Có thể quản trị viên hệ thống Apigee Edge của bạn đã cung cấp chứng chỉ và có bản sao của chứng chỉ đó.
  3. Nếu không, hãy chạy lệnh sau để lấy thông tin về chứng chỉ:
    echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
    
  4. Nếu Máy chủ quản lý có chứng chỉ tự ký, thì đó là nguyên nhân gây ra vấn đề này.

Độ phân giải

  1. Làm việc với nhóm sở hữu máy chủ đích để mua một chứng chỉ TLS phù hợp do một Tổ chức phát hành chứng chỉ (CA) đáng tin cậy ký.
  2. Nếu không thể, hãy làm như sau để cho phép chứng chỉ tự ký trong Edge Microgateway.

  3. Đặt một thuộc tính hệ thống để cho phép Edge Microgateway tin tưởng tất cả các chứng chỉ.
  4. Nếu bạn đang sử dụng docker, hãy tham khảo Sử dụng CA không được Node.js tin cậy.
  5. Nếu không, hãy xuất một biến môi trường có tên là NODE_EXTRA_CA_CERTS, trỏ đến tệp CA gốc.Điều này được ghi lại trên trang web chính thức của Node.js.

Phải thu thập thông tin chẩn đoán

Nếu vấn đề vẫn tiếp diễn ngay cả sau khi bạn làm theo hướng dẫn ở trên, hãy thu thập thông tin chẩn đoán sau đây rồi liên hệ với Nhóm hỗ trợ Apigee Edge:

  • Tệp nhật ký: Thư mục mặc định là /var/tmp nhưng có thể bị ghi đè trong tệp config.yaml chính (logging > dir parameter). Bạn nên thay đổi log > level thành info trước khi cung cấp tệp nhật ký cho Nhóm hỗ trợ Apigee Edge.
  • Tệp cấu hình: Cấu hình chính của Edge Microgateway nằm trong tệp YAML trong thư mục Edge Microgateway mặc định, $HOME/.edgemicro. Có một tệp cấu hình mặc định có tên là default.yaml và một tệp cho từng môi trường ORG-ENV-config.yaml. Tải tệp này lên đầy đủ cho tổ chức và môi trường chịu ảnh hưởng.

    Tài liệu tham khảo

    Định cấu hình giao diện người dùng Edge để sử dụng TLS nhằm truy cập vào Edge API