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

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ụ thường gặp 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 Nội dung mô tả Hướng dẫn khắc phục sự cố áp dụng cho
Máy chủ mục tiêu trình bày một chứng chỉ tự ký Edge Microgateway sẽ xác minh chứng chỉ của máy chủ đích. Nếu không đáng tin cậy, chứng chỉ này sẽ gây ra lỗi thời gian chạy. Người dùng Edge Public và Private Cloud
Máy chủ quản lý Apigee sử dụng chứng chỉ tự ký Trong lần đầu tiên định cấu hình Edge Microgateway, thiết bị 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 xuất hiện 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 hướng nam, thì Edge Microgateway sẽ báo lỗi này theo mặc định 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ủ đích thực sự là tự ký, thì đây là nguyên nhân của 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 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.

    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 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.

      Bạn có thể xem thông tin này trên trang web chính thức về Node.js.

    Lựa chọn 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ủ mục tiêu ở đị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 bài viết Chuyển đổi chứng chỉ sang định dạng được hỗ trợ.
    2. Nếu có một chuỗi chứng chỉ, hãy đảm bảo các chứng chỉ đó theo đúng thứ tự. Chứng chỉ lá phải luôn đứng đầu, sau đó là chứng chỉ trung gian, sau đó là chứng chỉ gốc. Bạn có thể xem thêm thông tin giải thích về vấn đề này trong bài viết 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
      

    Hướng dẫn về cách định cấu hình việc này cũng được trình bày trong video Edge Microgateway – Định cấu hình TLS 1 chiều và 2 chiều về phía Nam. Hãy tham khảo phần Đị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: Máy chủ quản lý Apigee Edge sử dụng chứng chỉ tự ký

Trong lần đầu thiết lập Edge Microgateway, một trong các lệnh bạn cần chạy là edgemicro configure hoặc edgemicro private configure. Lệnh này sẽ tự động khởi động cụm và 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 theo đố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ỉ mà 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 một 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. Nhiều khả năng 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ỉ này.
  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ó một chứng chỉ tự ký, thì đó là nguyên nhân của 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 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 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 dùng docker, hãy tham khảo phần 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.Bạn có thể xem thông tin này trên trang web Node.js chính thức.

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

Nếu sự cố vẫn tiếp diễn sau khi 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 Bộ phận hỗ trợ Apigee:

  • 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 Apigee Edge Support.
  • 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 tên là default.yaml, sau đó có một tệp cho mỗi môi trường ORG-ENV-config.yaml. Tải đầy đủ 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 vào API Edge