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

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến Tài liệu về Apigee X.
thông tin

Triệu chứng

Ứng dụng nhận được mã phản hồi HTTP 502 kèm theo thông báo Bad Gateway để phản hồi 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

Khách hàng sẽ thấy thông báo phản hồi sau đây:

HTTP/1.1 502 Bad Gateway

Sau đây là hai ví dụ phổ biến về phản hồi lỗi:

{"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 đưa ra chứng chỉ tự ký Edge Microgateway sẽ xác minh chứng chỉ của máy chủ mục tiêu và nếu chứng chỉ này không đáng tin cậy sẽ làm tăng lỗi thời gian chạy. Người dùng Edge công khai và riêng tư
Máy chủ quản lý Apigee Edge sử dụng chứng chỉ tự ký Trong lần đầu định cấu hình Edge Microgateway, ứng dụng này sẽ kết nối với Apigee Edge qua TLS để tự khởi động. Nếu Edge đưa ra chứng chỉ tự ký, thì thao tác này sẽ không thành công. Người dùng Edge Private Cloud

Nguyên nhân: Máy chủ đích trình bày chứng chỉ tự ký

Nếu một chứng chỉ tự ký này được máy chủ mục tiêu hiển thị tại hướng nam thì theo mặc định, Edge Microgateway sẽ gây ra lỗi này do nó không tin tưởng chứng chỉ tự ký.

Chẩn đoán

Bạn có thể nhận 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 rằng Edge Microgateway đã rất có thể đã nhận được chứng chỉ tự ký từ máy chủ mục tiêu. Để 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 đây để xác minh chuỗi chứng 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 vấn đề.

    Trong ví dụ sau, hãy lưu ý rằng máy chủ mục tiêu đưa ra 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 để có được chứng chỉ TLS phù hợp do tổ chức phát hành chứng chỉ (CA) đáng tin cậy.
  2. Nếu không được, hãy cân nhắc dùng một trong các phương án sau để cho phép tự ký trong Edge Microgateway.

    Lựa chọn 1: Đặt thuộc tính hệ thống để cho phép Edge Microgateway tin cậy tất cả chứng chỉ

    1. Nếu bạn đang sử dụng Docker, hãy tham khảo Sử dụng một 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 Node.js của bạn.

    Lựa chọn 2: Định cấu hình tệp cấu hình YAML của Edge Microgateway để tin tưởng cho máy chủ mục tiêu đó

    1. Đảm bảo rằng bạn có chứng chỉ (hoặc chuỗi) của máy chủ mục tiêu ở định dạng PEM. Người nhận 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 Đang 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ỉ đã chính xác đơn đặt hàng. leaf certificate phải luôn ở đầu tiên, theo sau là trung gian chứng chỉ rồi đến chứng chỉ gốc. Bạn có thể xem thêm nội dung giải thích về vấn đề này trong Đang xác thực chuỗi chứng chỉ.

      Trong ví dụ sau, chúng tôi đã đị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
      

    Các hướng dẫn để định cấu hình tài khoản này cũng được đề cập trong Mô-đun Edge Microgateway – Định cấu hình video TLS 1 chiều và 2 chiều hướng Nam. Tham khảo Định cấu hình SSL trên máy chủ Edge Microgateway để biết thêm thông tin.

Nếu sự cố vẫn tiếp diễn, hãy chuyển đến Phải thu thập thông tin chẩn đoán.

Nguyên nhân: Máy chủ quản lý Apigee Edge 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 sẽ cần chạy là edgemicro configure hoặc edgemicro private configure. Lệnh này sẽ tự khởi động cụm và ứng dụng này sẽ liên hệ với Apigee Edge để tải thông tin bắt buộc xuống.

Đối với Đám mây riêng tư của Edge, URL 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ẽ nhận được lỗi sau trong dữ liệu đầ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, Management Server (management.apigee-dev.net) có thể đang trả về 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ó một bản sao của báo cáo đó.
  3. Nếu không, chạy lệnh sau để nhận 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 lỗi này vấn đề.

Độ phân giải

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

  3. Đặt thuộc tính hệ thống để cho phép Edge Microgateway tin cậy tất cả chứng chỉ.
  4. Nếu bạn đang sử dụng Docker, hãy tham khảo Sử dụng một 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. được ghi lại trên trang Trang web Node.js.

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

Nếu sự cố vẫn tiếp diễn ngay cả sau khi đã làm theo các hướng dẫn trên, hãy thu thập những thông tin sau thông tin chẩn đoán rồi liên hệ với Bộ phận 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). Đó là được đề xuất thay đổi log > level thành info trước khi cung cấp thuộc tính tệp nhật ký lên Bộ phận hỗ trợ Apigee Edge.
  • Tệp cấu hình: Cấu hình chính của Edge Microgateway nằm trong 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, sau đó tạo một tệp cho mỗi môi trường ORGENVconfig.yaml. Tải tệp này lên cho tổ chức và môi trường bị ả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 API Edge