503 Dịch vụ Không khả dụng - Lỗi Bắt tay SSL

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 khách sẽ nhận được mã trạng thái HTTP 503 Service Unavailable kèm theo mã mã lỗi messaging.adaptors.http.flow.SslHandshakeFailed làm phản hồi cho API cuộc gọi.

Thông báo lỗi

Ứng dụng sẽ nhận được mã phản hồi sau đây:

HTTP/1.1 503 Service Unavailable

Ngoài ra, bạn có thể nhận thấy thông báo lỗi sau:

{
   "fault":{
      "faultstring":"SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target",
      "detail":{
         "errorcode":"messaging.adaptors.http.flow.SslHandshakeFailed"
      }
   }
}

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

Bạn có thể nhận được mã trạng thái 503 Service Unavailable kèm theo mã lỗi messaging.adaptors.http.flow.SslHandshakeFailed do lỗi trong quá trình SSL quy trình bắt tay giữa Trình xử lý tin nhắn của Apigee Edge và máy chủ phụ trợ cho một số lý do. Thông báo lỗi trong faultstring thường cho biết một nguyên nhân có thể gây ra lỗi này.

Tuỳ thuộc vào thông báo lỗi nhận thấy trong faultstring, bạn cần sử dụng kỹ thuật thích hợp để khắc phục sự cố. Cẩm nang này giải thích cách khắc phục sự cố lỗi này nếu bạn nhận thấy thông báo lỗi SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target trong faultstring.

Lỗi này xảy ra trong quá trình bắt tay SSL giữa Trình xử lý tin nhắn của Apigee Edge và máy chủ phụ trợ:

  • Nếu truststore của Bộ xử lý tin nhắn của Apigee Edge:
    • Chứa một chuỗi chứng chỉ không khớp với chuỗi chứng chỉ hoàn chỉnh của máy chủ phụ trợ chuỗi chứng chỉ, OR
    • Không chứa chuỗi chứng chỉ hoàn chỉnh của máy chủ phụ trợ
  • Nếu chuỗi chứng chỉ do máy chủ phụ trợ thể hiện:
    • Chứa Tên miền đủ điều kiện (FQDN) không khớp với tên máy chủ lưu trữ được chỉ định trong điểm cuối đích
    • Chứa chuỗi chứng chỉ không chính xác hoặc không hoàn chỉnh

Sau đây là những nguyên nhân có thể gây ra vấn đề này:

Nguyên nhân Mô tả Hướng dẫn khắc phục sự cố áp dụng cho
Chứng chỉ hoặc chuỗi chứng chỉ không chính xác/chưa hoàn chỉnh trong kho lưu trữ tin cậy của Trình xử lý thư Chứng chỉ và/hoặc chuỗi tương ứng được lưu trữ trong kho tin cậy của Trình xử lý tin nhắn của Apigee Edge không khớp với chuỗi chứng chỉ của máy chủ phụ trợ hoặc không chứa chuỗi chứng chỉ hoàn chỉnh của máy chủ phụ trợ. Người dùng Edge riêng tư và Cloud Cloud
Sự không khớp của FQDN trong chứng chỉ của máy chủ phụ trợ và tên máy chủ trong điểm cuối đích Chứng chỉ do máy chủ phụ trợ cung cấp chứa FQDN không khớp với tên máy chủ được chỉ định trong điểm cuối đích. Người dùng Edge riêng tư và Cloud Cloud
Chứng chỉ hoặc chuỗi chứng chỉ do máy chủ phụ trợ cung cấp không chính xác/chưa hoàn chỉnh Chuỗi chứng chỉ do máy chủ phụ trợ cung cấp không chính xác hoặc không đầy đủ. Người dùng Edge riêng tư và Cloud Cloud

Các bước chẩn đoán phổ biến

Hãy sử dụng một trong các công cụ/kỹ thuật sau để chẩn đoán lỗi này:

Giám sát API

Quy trình 1: Sử dụng tính năng giám sát API

Cách chẩn đoán lỗi bằng tính năng Giám sát API:

  1. Đăng nhập vào giao diện người dùng Apigee Edge với tư cách là người dùng có vai trò thích hợp.
  2. Chuyển sang tổ chức mà bạn muốn điều tra vấn đề này.

  3. Chuyển đến thẻ Analyze (Phân tích) > Giám sát API > Điều tra.
  4. Chọn khung thời gian cụ thể mà bạn phát hiện thấy lỗi.
  5. Vẽ Mã lỗi theo Thời gian.

  6. Chọn một ô có mã lỗi messaging.adaptors.http.flow.SslHandshakeFailed như minh hoạ bên dưới:

    ( xem hình ảnh lớn hơn)

  7. Thông tin về mã lỗi messaging.adaptors.http.flow.SslHandshakeFailed được hiển thị dưới dạng được hiển thị bên dưới:

    ( xem hình ảnh lớn hơn)

  8. Nhấp vào Xem nhật ký rồi mở rộng hàng chứa yêu cầu không thành công.

    ( xem hình ảnh lớn hơn)

  9. Từ cửa sổ Logs (Nhật ký), hãy lưu ý những thông tin chi tiết sau:
    • Mã nhận dạng của tin nhắn yêu cầu
    • Mã trạng thái: 503
    • Nguồn lỗi: target
    • Mã lỗi: messaging.adaptors.http.flow.SslHandshakeFailed

Trace

Quy trình 2: Sử dụng công cụ Theo dõi

Cách chẩn đoán lỗi bằng công cụ Theo dõi:

  1. Bật phiên theo dõi
    • Chờ lỗi 503 Service Unavailable với mã lỗi messaging.adaptors.http.flow.SslHandshakeFailed sắp xảy ra, hoặc
    • Nếu bạn có thể tái hiện vấn đề, hãy thực hiện lệnh gọi API để tái hiện vấn đề 503 Service Unavailable
  2. Đảm bảo bạn đã bật chế độ Show all FlowInfos (Hiện tất cả FlowInfos):

  3. Chọn một trong các yêu cầu không thành công rồi kiểm tra dấu vết.
  4. Di chuyển qua các giai đoạn của quá trình theo dõi và xác định nơi xảy ra lỗi.
  5. Bạn thường sẽ thấy lỗi này sau giai đoạn Target request Flow required (Đã bắt đầu quy trình yêu cầu mục tiêu) như minh hoạ dưới đây:

    ( xem hình ảnh lớn hơn)

  6. Lưu ý các giá trị của các dấu vết sau:
    • lỗi: SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    • error.cause: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    • error.class: com.apigee.errors.http.server.ServiceUnavailableException
    • Giá trị của lỗi SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target cho biết quá trình bắt tay SSL không thành công, vì Trình xử lý tin nhắn của Apigee Edge không thể xác thực chứng chỉ.
  7. Chuyển đến Giai đoạn AX (Đã ghi dữ liệu Analytics) trong dấu vết và nhấp vào đó.
  8. Cuộn xuống phần Tiêu đề lỗi thông tin chi tiết về giai đoạn rồi xác định các giá trị của X-Apigee-fault-codeX-Apigee-fault-sourceX-Apigee-Message-ID như minh hoạ dưới đây:

    ( xem hình ảnh lớn hơn)

  9. Lưu ý các giá trị của X-Apigee-fault-code, X-Apigee-fault-source, và X-Apigee-Message-ID:
  10. Tiêu đề lỗi Giá trị
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target
    X-Apigee-Message-ID MESSAGE_ID

NGINX

Quy trình 3: Sử dụng nhật ký truy cập NGINX

Cách chẩn đoán lỗi bằng nhật ký truy cập NGINX:

  1. Nếu là người dùng Đám mây riêng tư, bạn có thể sử dụng nhật ký truy cập NGINX để xác định thông tin chính về HTTP 503 Service Unavailable.
  2. Kiểm tra nhật ký truy cập NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

  3. Tìm kiếm xem có lỗi 503 nào với mã lỗi hay không messaging.adaptors.http.flow.SslHandshakeFailed trong một khoảng thời gian cụ thể (nếu sự cố xảy ra trong trước đây) hoặc nếu có bất kỳ yêu cầu nào vẫn không thành công với 503.
  4. Nếu bạn tìm thấy bất kỳ lỗi 503 nào với kiểu khớp X-Apigee-fault-code giá trị của messaging.adaptors.http.flow.SslHandshakeFailed, sau đó xác định giá trị của X-Apigee-fault-source.

    Lỗi 503 mẫu trong nhật ký truy cập NGINX:

    ( xem hình ảnh lớn hơn)

    Mục nhập mẫu ở trên từ nhật ký truy cập NGINX có các giá trị sau cho X-Apigee-fault-code X-Apigee-fault-code

    Tiêu đề Giá trị
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target

Nhật ký Trình xử lý thư

Quy trình 4: Sử dụng Nhật ký trình xử lý thư

  1. Dùng công cụ Giám sát API, công cụ Theo dõi để xác định mã nhận dạng thông báo của một trong các yêu cầu không thành công hoặc Nhật ký truy cập NGINX như được giải thích trong Các bước chẩn đoán phổ biến.
  2. Tìm kiếm mã thông báo yêu cầu cụ thể trong nhật ký Trình xử lý thông báo (/opt/apigee/var/log/edge-message-processor/logs/system.log). Bạn có thể quan sát lỗi sau đây:

    org:myorg env:test api:MyProxy rev:1
    messageid:myorg-28247-3541813-1
    NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context.handshakeFailed() :
    SSLClientChannel[Connected: Remote:X.X.X.X:443
    Local:192.168.194.140:55102]@64596 useCount=1
    bytesRead=0 bytesWritten=0 age=233ms  lastIO=233ms
    isOpen=true handshake failed, message: General SSLEngine problem
    

    Lỗi trên cho biết không thể bắt tay SSL giữa Trình xử lý thông báo và máy chủ phụ trợ.

    Tiếp theo là một ngoại lệ với dấu vết ngăn xếp chi tiết như minh hoạ dưới đây:

    org:myorg env:test api:MyProxy rev:1
    messageid:myorg-28247-3541813-1
    NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - RequestWriteListener.onException() :
    RequestWriteListener.onException(HTTPRequest@1522922c)
    javax.net.ssl.SSLHandshakeException: General SSLEngine problem
    	at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1478)
    	at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535)
    	... <snipped>
    Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
    	at sun.security.ssl.Alerts.getSSLException(Alerts.java:203)
    	at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1728)
    	... <snipped>
    Caused by: sun.security.validator.ValidatorException: PKIX path building failed:
    sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid
    certification path to requested target
    	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397)
    	at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302)
    	... <snipped>
      

    Xin lưu ý rằng lỗi bắt tay là do:

    Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    Mã này cho biết không thể bắt tay SSL khi Trình xử lý tin nhắn của Apigee Edge không thể xác thực chứng chỉ của máy chủ phụ trợ.

Nguyên nhân: Chứng chỉ hoặc chuỗi chứng chỉ không chính xác/chưa hoàn chỉnh trong kho lưu trữ tin cậy của Trình xử lý thư

Chẩn đoán

  1. Xác định Mã lỗi, Nguồn lỗi cho lỗi phát hiện được bằng API Nhật ký giám sát, công cụ theo dõi hoặc nhật ký truy cập NGINX như được giải thích trong phần Common các bước chẩn đoán.
  2. Nếu Mã lỗimessaging.adaptors.http.flow.SslHandshakeFailed, thì xác định thông báo lỗi bằng một trong các phương pháp sau:
  3. Nếu thông báo lỗi là sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target" thì điều đó chỉ ra rằng giao thức bắt tay SSL không thành công vì Trình xử lý tin nhắn của Apigee Edge không thể xác thực chứng chỉ.

Bạn có thể khắc phục vấn đề này theo 2 giai đoạn:

  1. Giai đoạn 1: Xác định chuỗi chứng chỉ của máy chủ phụ trợ
  2. Giai đoạn 2: So sánh chuỗi chứng chỉ được lưu trữ trong kho tin cậy của Trình xử lý thư

Giai đoạn 1

Giai đoạn 1: Xác định chuỗi chứng chỉ của máy chủ phụ trợ

Sử dụng một trong những phương thức sau để xác định chuỗi chứng chỉ của máy chủ phụ trợ:

openssl

Thực thi lệnh openssl trên máy chủ của máy chủ phụ trợ như sau:

openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#

Lưu ý chuỗi Chứng chỉ trong kết quả của lệnh trên:

Chuỗi chứng chỉ của máy chủ phụ trợ mẫu từ kết quả của lệnh openssl:

Certificate chain
 0 s:/CN=mocktarget.apigee.net
   i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
 1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
   i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
 2 s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
   i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1

tcpdump

  1. Nếu bạn là người dùng Đám mây công cộng, hãy thu thập các gói TCP/IP trên máy chủ phụ trợ.
  2. Nếu là người dùng Đám mây riêng tư, bạn có thể thu thập TCP/IP các gói dữ liệu trên máy chủ phụ trợ hoặc Bộ xử lý thông báo. Bạn nên chụp ảnh trên máy chủ phụ trợ vì các gói được giải mã trên máy chủ phụ trợ.
  3. Sử dụng tcpdump để thu thập các gói TCP/IP:

    tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
    
  4. Phân tích các gói TCP/IP bằng cách sử dụng Công cụ Wireshark hoặc một công cụ tương tự mà bạn đã quen thuộc.

    Phân tích mẫu Tcpdump

    ( xem hình ảnh lớn hơn)

    • Gói số 43: Bộ xử lý thư (Nguồn) đã gửi một Thông báo Client Hello đến máy chủ phụ trợ (Đích).
    • Gói số 44: Máy chủ phụ trợ xác nhận việc nhận được Client Hello tin nhắn từ Trình xử lý thư.
    • Gói số 45: Máy chủ phụ trợ gửi Server Hello cùng với chứng chỉ của nó.
    • Gói số 46: Bộ xử lý thư xác nhận đã nhận được Server Hello và chứng chỉ.
    • Gói số 47: Bộ xử lý thông báo gửi một FIN, ACK thông báo theo sau là RST, ACK trong Gói số 48.

      Điều này cho biết rằng việc xác thực chứng chỉ máy chủ phụ trợ bằng Trình xử lý thư không thành công. Đó là vì Trình xử lý thư không có bất kỳ chứng chỉ nào khớp với chứng chỉ của máy chủ phụ trợ hoặc không thể tin cậy chứng chỉ của máy chủ phụ trợ với các chứng chỉ có sẵn trong Cửa hàng tin cậy của Đơn vị xử lý tin nhắn.

    • Bạn có thể quay lại và xem lại Gói số 45 rồi xác định chứng chỉ chuỗi do máy chủ phụ trợ gửi

      ( xem hình ảnh lớn hơn)

    • Trong ví dụ này, bạn có thể thấy rằng máy chủ đã gửi một leaf certificate với common name (CN) = mocktarget.apigee.net, theo sau là chứng chỉ trung gian với CN= GTS CA 1D4 và chứng chỉ gốc cùng với CN = GTX Root R1.

    Nếu bạn chắc chắn rằng quá trình xác thực chứng nhận của máy chủ không thành công, thì chuyển đến Giai đoạn 2: So sánh chứng chỉ của máy chủ phụ trợ và chứng chỉ được lưu trữ trong kho tin cậy của Trình xử lý thư.

Giai đoạn 2

Giai đoạn 2: So sánh chứng chỉ và chứng chỉ của máy chủ phụ trợ được lưu trữ trong Cửa hàng tin cậy của Đơn vị xử lý thư

  1. Xác định chuỗi chứng chỉ của máy chủ phụ trợ.
  2. Xác định chứng chỉ được lưu trữ trong kho tin cậy của Trình xử lý thư bằng cách sử dụng các bước sau:
    1. Lấy tên tham chiếu kho tin cậy từ phần tử TrustStore trong phần SSLInfo trong TargetEndpoint.

      Hãy xem xét phần SSLInfo mẫu trong TargetEndpoint cấu hình:

      <TargetEndpoint name="default">
      ...
         <HTTPTargetConnection>
            <Properties />
            <SSLInfo>
               <Enabled>true</Enabled>
               <ClientAuthEnabled>true</ClientAuthEnabled>
               <KeyStore>ref://myKeystoreRef</KeyStore>
               <KeyAlias>myKey</KeyAlias>
               <TrustStore>
                  ref://myCompanyTrustStoreRef
               </TrustStore>
            </SSLInfo>
         </HTTPTargetConnection>
         ...
      </TargetEndpoint>
      
    2. Trong ví dụ trên, tên tham chiếu TrustStoremyCompanyTruststoreRef.
    3. Trong giao diện người dùng Edge, hãy chọn Môi trường > Tệp đối chiếu. Lưu ý tên trong Cột Tham chiếu cho số tham chiếu cụ thể của kho tin cậy. Đây sẽ là tên kho tin cậy.

      ( xem hình ảnh lớn hơn)

    4. Trong ví dụ trên, tên kho tin cậy là:

      myCompanyTruststoreRef: myCompanyTruststore

  3. Lấy chứng chỉ được lưu trữ trong kho tin cậy (được xác định ở bước trước) bằng các API sau:

    1. Tải tất cả chứng chỉ cho một kho khoá hoặc kho tin cậy. API này liệt kê tất cả trong kho tin cậy cụ thể.

      Người dùng Cloud công khai:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
      

      Người dùng Cloud riêng tư:

      curl -v -X GET http://MANAGEMENT_HOST:PORT_#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
      

      Địa điểm:

      • ORGANIZATION_NAME là tên của tổ chức
      • ENVIRONMENT_NAME là tên môi trường
      • KEYSTORE_NAME là tên của kho khoá
      • $TOKEN được đặt thành mã truy cập OAuth 2.0 của bạn như được mô tả trong Nhận mã truy cập OAuth 2.0
      • Các tuỳ chọn curl dùng trong ví dụ này được mô tả trong Sử dụng cuộn tròn

      Kết quả mẫu:

      Các chứng chỉ của kho lưu trữ tin cậy mẫu myCompanyTruststore là:

      [
        "serverCert"
      ]
      

    2. Nhận thông tin chi tiết về chứng chỉ cho chứng chỉ cụ thể từ Kho khoá hoặc Truststore. API này trả về thông tin về một chứng chỉ cụ thể trong kho tin cậy.

      Người dùng Cloud công khai:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs/CERT_NAME -H "Authorization: Bearer $TOKEN"
      

      Người dùng trên đám mây riêng tư

      curl -v -X GET http://MANAGEMENT_HOST:PORT_#>/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs/CERT_NAME -H "Authorization: Bearer $TOKEN"
      

      Địa điểm:

      • ORGANIZATION_NAME là tên của tổ chức
      • ENVIRONMENT_NAME là tên môi trường
      • KEYSTORE_NAME là tên của kho khoá
      • CERT_NAME là tên của chứng chỉ
      • $TOKEN được đặt thành mã truy cập OAuth 2.0 của bạn như được mô tả trong Nhận mã truy cập OAuth 2.0
      • Các tuỳ chọn curl dùng trong ví dụ này được mô tả trong Sử dụng cuộn tròn

      Kết quả mẫu

      Thông tin chi tiết về serverCert cho biết chủ thể và nhà phát hành như sau:

      Giấy chứng nhận là tổ chức/pháp nhân:

      "subject": "CN=mocktarget.apigee.net",
      "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      

      Chứng chỉ trung cấp:

      "subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
      
  4. Xác minh chứng chỉ máy chủ thực tế nhận được ở bước 1 và chứng chỉ được lưu trữ trong kho tin cậy có được ở bước 3 trùng khớp. Nếu chúng không khớp nhau, thì đó là nguyên nhân của vấn đề.

    Từ ví dụ ở trên, hãy xem xét một chứng chỉ tại một thời điểm:

    1. Giấy chứng nhận mô tả:

      Trên máy chủ phụ trợ:

      s:/CN=mocktarget.apigee.net
      i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
      

      Từ kho tin cậy của Trình xử lý thư (khách hàng):

      "subject": "CN=mocktarget.apigee.net",
      "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      

      Chứng chỉ leaf được lưu trữ trong kho tin cậy khớp với chứng chỉ của phần phụ trợ máy chủ.

    2. Chứng chỉ trung gian:

      Trên máy chủ phụ trợ:

      s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
      i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
      

      Từ kho tin cậy của Trình xử lý thư (khách hàng):

      "subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
      

      Chứng chỉ trung gian được lưu trữ trong kho tin cậy khớp với chứng chỉ của máy chủ phụ trợ.

    3. Chứng chỉ gốc:

      Trên máy chủ phụ trợ:

      s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
      i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
      

      Thiếu chứng chỉ gốc trong kho tin cậy.

    4. Vì chứng chỉ gốc bị thiếu trong kho tin cậy, Trình xử lý thư gửi trường hợp ngoại lệ sau:

      sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
      

      và trả về 503 Service Unavailable kèm theo mã lỗi messaging.adaptors.http.flow.SslHandshakeFailed đến khách hàng .

Độ phân giải

  1. Đảm bảo rằng bạn có chuỗi chứng chỉ phù hợp và hoàn chỉnh của máy chủ phụ trợ.
  2. Nếu bạn là người dùng Cloud Public, hãy làm theo hướng dẫn trong Cập nhật chứng chỉ TLS cho Cloud để cập nhật chứng chỉ đó thành Kho tin cậy của Đơn vị xử lý thư.
  3. Nếu bạn là người dùng Đám mây riêng tư, hãy làm theo hướng dẫn trong Cập nhật chứng chỉ TLS cho Đám mây riêng tư để cập nhật chứng chỉ thành Cửa hàng tin cậy của Công cụ xử lý tin nhắn của Apigee Edge.

Nguyên nhân: FQDN trong chứng chỉ của máy chủ phụ trợ không khớp với tên máy chủ trong điểm cuối đích

Nếu máy chủ phụ trợ trình bày một chuỗi chứng chỉ chứa FQDN mà không khớp với tên máy chủ được chỉ định trong điểm cuối mục tiêu, thì Quy trình nhắn tin của Apigee Edge sẽ trả về lỗi SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.

Chẩn đoán

  1. Kiểm tra điểm cuối mục tiêu cụ thể trong proxy API mà bạn đang quan sát điều này và ghi lại tên máy chủ của máy chủ phụ trợ:

    Điểm cuối mục tiêu mẫu:

    <TargetEndpoint name="default">
       …
       <HTTPTargetConnection>
          <Properties />
          <SSLInfo>
             <Enabled>true</Enabled>
             <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://backend.company.com/resource</URL>
       </HTTPTargetConnection>
    </TargetEndpoint>
    

    Trong ví dụ trên, tên máy chủ của máy chủ phụ trợ là backend.company.com.

  2. Xác định FQDN trong chứng chỉ của máy chủ phụ trợ bằng cách sử dụng openssl như lệnh được hiển thị dưới đây:

    openssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
    

    Ví dụ:

    openssl s_client -connect backend.company.com:443
    

    Kiểm tra phần Certificate chain và lưu ý FQDN được chỉ định là phần CN trong đối tượng của leaf certificate.

    Certificate chain
     0 s:/CN=backend.apigee.net
       i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
     1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
       i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
     2 s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
       i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
    

    Trong ví dụ trên, FQDN của máy chủ phụ trợ là backend.apigee.net.

  3. Nếu tên máy chủ lưu trữ của máy chủ phụ trợ có được từ bước 1 và FQDN có được bước 2 không khớp, thì đó là nguyên nhân gây ra lỗi.
  4. Trong ví dụ thảo luận ở trên, tên máy chủ trong điểm cuối đích là backend.company.com. Tuy nhiên, tên FQDN trong chứng chỉ của máy chủ phụ trợ là backend.apigee.net. Vì chúng không khớp, nên bạn gặp phải lỗi này.

Độ phân giải

Bạn có thể khắc phục vấn đề này bằng một trong các phương pháp sau:

FQDN chính xác

Cập nhật kho khoá của máy chủ phụ trợ bằng FQDN chính xác, chứng chỉ hợp lệ và hoàn chỉnh :

  1. Nếu bạn không có chứng chỉ của máy chủ phụ trợ với đúng FQDN, thì hãy mua chứng chỉ phù hợp từ một CA (Tổ chức phát hành chứng chỉ) thích hợp.
  2. Xác thực rằng bạn có chuỗi chứng chỉ hợp lệ và hoàn chỉnh của máy chủ phụ trợ.

  3. Sau khi bạn có chuỗi chứng chỉ hợp lệ và hoàn chỉnh kèm theo FQDN chính xác của máy chủ phụ trợ trong chứng chỉ thực thể hoặc lá đơn giống với tên máy chủ được chỉ định trong điểm cuối đích, hãy cập nhật kho khoá của phần phụ trợ bằng chuỗi chứng chỉ hoàn chỉnh.

Sửa máy chủ phụ trợ

Cập nhật điểm cuối đích bằng tên máy chủ của máy chủ phụ trợ chính xác:

  1. Nếu tên máy chủ được chỉ định không chính xác trong điểm cuối đích, hãy cập nhật điểm cuối đích có tên máy chủ chính xác khớp với FQDN trong phần phụ trợ chứng chỉ của máy chủ.
  2. Lưu các thay đổi đối với proxy API.

    Trong ví dụ đã thảo luận ở trên, nếu tên máy chủ lưu trữ của máy chủ phụ trợ bị sai đã chỉ định, thì bạn có thể khắc phục bằng cách sử dụng FQDN từ chứng chỉ của máy chủ phụ trợ, là backend.apigee.net như sau:

    <TargetEndpoint name="default">
       …
       <HTTPTargetConnection>
          <Properties />
          <SSLInfo>
             <Enabled>true</Enabled>
             <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://backend.apigee.net/resource</URL>
       </HTTPTargetConnection>
    </TargetEndpoint>
    

Nguyên nhân: Chứng chỉ hoặc chuỗi chứng chỉ do máy chủ phụ trợ cung cấp không chính xác/chưa hoàn chỉnh

Chẩn đoán

  1. Thực thi lệnh openssl để xem chuỗi chứng chỉ của máy chủ phụ trợ với tên máy chủ của máy chủ phụ trợ như sau:
    openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
    

    Hãy lưu ý Certificate chain trong kết quả của lệnh trên.

    Chuỗi chứng chỉ của máy chủ phụ trợ mẫu từ kết quả của lệnh openssl:

    Certificate chain
     0 s:/CN=mocktarget.apigee.net
       i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
     1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
       i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
       
  2. Xác minh rằng bạn có chuỗi chứng chỉ phù hợp và hoàn chỉnh như được giải thích trong Xác thực chuỗi chứng chỉ.
  3. Nếu bạn không có chuỗi chứng chỉ hợp lệ và hoàn chỉnh cho máy chủ phụ trợ, thì đó là nguyên nhân gây ra vấn đề này.

    Trong chuỗi chứng chỉ của máy chủ phụ trợ mẫu hiển thị ở trên, chứng chỉ gốc là bị thiếu. Do đó, bạn gặp lỗi này.

Độ phân giải

Cập nhật kho khoá của máy chủ phụ trợ bằng chuỗi chứng chỉ hợp lệ và hoàn chỉnh:

  1. Kiểm tra để đảm bảo bạn có chuỗi chứng chỉ hợp lệ và hoàn chỉnh của máy chủ phụ trợ.

  2. Cập nhật chuỗi chứng chỉ hợp lệ và hoàn chỉnh trong kho khoá của máy chủ phụ trợ.

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.

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 và liên hệ với Bộ phận hỗ trợ Apigee Edge:

  • Nếu bạn là người dùng Cloud Public, hãy cung cấp những thông tin sau:
    • Tên tổ chức
    • Tên môi trường
    • Tên proxy API
    • Hoàn tất lệnh curl để tái hiện lỗi
    • Tệp theo dõi cho thấy lỗi
    • Kết quả của lệnh openssl:

      openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#

    • Gói TCP/IP được thu thập trên máy chủ phụ trợ
  • Nếu bạn là người dùng Đám mây riêng tư, hãy cung cấp các thông tin sau:

Tài liệu tham khảo