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ã trạng thái HTTP 503 Service Unavailable với mã lỗi messaging.adaptors.http.flow.SslHandshakeFailed làm phản hồi cho các lệnh gọi API.
Thông báo lỗi
Ứng dụng khách nhận được mã phản hồi sau:
HTTP/1.1 503 Service Unavailable
Ngoài ra, bạn có thể 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 bắt tay SSL giữa Trình xử lý thông báo của Apigee Edge và máy chủ phụ trợ vì 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ể ở cấp độ cao đã dẫn đến lỗi này.
Tuỳ thuộc vào thông báo lỗi xuất hiện trong faultstring, bạn cần sử dụng các kỹ thuật phù hợp để khắc phục vấn đề. Sổ tay này giải thích cách khắc phục lỗi này nếu bạ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ý thông báo của Apigee Edge và máy chủ phụ trợ:
- Nếu truststore của Trình xử lý thông báo 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ợ, HOẶC
- 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ợ cung cấp:
- Chứa Tên miền đủ điều kiện (FQDN) không khớp với tên máy chủ được chỉ định trong điểm cuối đích
- Chứa một chuỗi chứng chỉ không chính xác hoặc không đầy đủ
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 truststore của Message Processor | Chứng chỉ và/hoặc chuỗi chứng chỉ được lưu trữ trong truststore của Trình xử lý thông báo 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 Private Cloud và Public Cloud |
| FQDN không khớp trong chứng chỉ của máy chủ phụ trợ và tên máy chủ trong điểm cuối mục tiêu | Chứng chỉ do máy chủ phụ trợ cung cấp có chứa một 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 Private Cloud và Public Cloud |
| Chứng chỉ hoặc chuỗi chứng chỉ không chính xác/không đầy đủ do máy chủ phụ trợ cung cấp | 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 Private Cloud và Public Cloud |
Các bước chẩn đoán thường gặp
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:
- Đă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ò phù hợp.
Chuyển sang tổ chức mà bạn muốn điều tra vấn đề.
- Chuyển đến trang Phân tích > Giám sát API > Điều tra.
- Chọn khung thời gian cụ thể mà bạn nhận thấy lỗi.
Vẽ Mã lỗi theo Thời gian.
Chọn một ô có mã lỗi
messaging.adaptors.http.flow.SslHandshakeFailednhư minh hoạ bên dưới:
Thông tin về mã lỗi
messaging.adaptors.http.flow.SslHandshakeFailedsẽ xuất hiện như hình dưới đây:
Nhấp vào Xem nhật ký rồi mở rộng hàng của yêu cầu không thực hiện được.
- Trong cửa sổ Nhật ký, hãy lưu ý những thông tin sau:
- Mã thông báo 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ụ Trace
Cách chẩn đoán lỗi bằng công cụ Trace (Theo dõi):
- Bật phiên theo dõi và một trong hai
- Chờ lỗi
503 Service Unavailablevới mã lỗimessaging.adaptors.http.flow.SslHandshakeFailedxả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
- Chờ lỗi
Đảm bảo bạn đã bật chế độ Show all FlowInfos (Hiện tất cả FlowInfo):

- Chọn một trong các yêu cầu không thực hiện được và kiểm tra dấu vết.
- Điều hướng qua các giai đoạn khác nhau của dấu vết và xác định vị trí xảy ra lỗi.
Bạn thường sẽ thấy lỗi này sau giai đoạn Target Request Flow Started (Đã bắt đầu quy trình yêu cầu mục tiêu) như minh hoạ bên dưới:

- Ghi lại các giá trị sau đây từ dấu vết:
- error:
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 targetcho biết SSL Handshake không thành công, vì Trình xử lý thông báo của Apigee Edge không xác thực được chứng chỉ của máy chủ phụ trợ.
- error:
- Chuyển đến Giai đoạn AX (Dữ liệu Analytics được ghi lại) trong dấu vết rồi nhấp vào giai đoạn đó.
Di chuyển xuống phần Phase Details Error Headers (Tiêu đề lỗi chi tiết theo giai đoạn) và xác định các giá trị của X-Apigee-fault-code và X-Apigee-fault-source, cũng như X-Apigee-Message-ID như minh hoạ dưới đây:

- Lưu ý các giá trị của X-Apigee-fault-code, X-Apigee-fault-source và X-Apigee-Message-ID:
| 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:
- Nếu là người dùng Đám mây riêng, bạn có thể sử dụng nhật ký truy cập NGINX để xác định thông tin chính về
503 Service UnavailableHTTP. Kiểm tra nhật ký truy cập NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- Tìm xem có lỗi
503nào với mã lỗimessaging.adaptors.http.flow.SslHandshakeFailedtrong một khoảng thời gian cụ thể hay không (nếu vấn đề xảy ra trong quá khứ) hoặc có yêu cầu nào vẫn không thành công với503hay không. Nếu bạn thấy bất kỳ lỗi
503nào có X-Apigee-fault-code trùng khớp với giá trị củamessaging.adaptors.http.flow.SslHandshakeFailed, thì hãy xác định giá trị của X-Apigee-fault-source.Ví dụ về lỗi 503 trong nhật ký truy cập của NGINX:
Mục nhập mẫu ở trên trong nhật ký truy cập NGINX có các giá trị sau cho X-Apigee-fault-code và X-Apigee-fault-source:
Tiêu đề Giá trị X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailedX-Apigee-fault-source target
Nhật ký Trình xử lý tin nhắn
Quy trình 4: Sử dụng nhật ký của Trình xử lý tin nhắn
- 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 bằng cách sử dụng tính năng Giám sát API, công cụ Theo dõi hoặc Nhật ký truy cập NGINX như được giải thích trong phần Các bước chẩn đoán thường gặp.
Tìm mã nhận dạng thông báo yêu cầu cụ thể trong nhật ký Message Processor (
/opt/apigee/var/log/edge-message-processor/logs/system.log). Bạn có thể thấy lỗi sau:org:myorg env:test api:MyProxy rev:1
messageid:myorg-28247-3541813-1NIOThread@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 problemLỗi trên cho biết quá trình bắt tay SSL không thành công giữa Trình xử lý thông báo và máy chủ phụ trợ.
Sau đó, sẽ có 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-1NIOThread@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 targetat 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Điều này cho biết Lệnh bắt tay SSL không thành công vì Trình xử lý thông báo của Apigee Edge không xác thực đượ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 truststore của Message Processor
Chẩn đoán
- Xác định Mã lỗi, Nguồn lỗi cho lỗi quan sát được bằng cách sử dụng tính năng Giám sát API, công cụ Theo dõi hoặc nhật ký truy cập NGINX như được giải thích trong phần Các bước chẩn đoán thường gặp.
- Nếu Mã lỗi là
messaging.adaptors.http.flow.SslHandshakeFailed, hãy xác định thông báo lỗi bằng một trong các phương thức sau: - Tìm error.cause bằng công cụ Trace như được giải thích trong phần Các bước chẩn đoán thường gặp
- Tìm ngoại lệ bằng cách sử dụng Nhật ký trình xử lý thông báo như trình bày trong phần Các bước chẩn đoán thường gặp
- Tìm
faultstringtrong phản hồi lỗi cho lệnh gọi API của bạn như trong Thông báo lỗi - 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ì tức là SSL Handshake (Bắt tay SSL) không thành công, vì Trình xử lý thông báo của Apigee Edge không xác thực được chứng chỉ của máy chủ phụ trợ.
Bạn có thể gỡ lỗi vấn đề này theo hai giai đoạn:
- Giai đoạn 1: Xác định chuỗi chứng chỉ của máy chủ phụ trợ
- Giai đoạn 2: So sánh chuỗi chứng chỉ được lưu trữ trong truststore của Message Processor
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 các 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 đối với tên máy chủ lưu trữ 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ỉ từ đầu ra của lệnh trên:
Chuỗi chứng chỉ máy chủ phụ trợ mẫu từ đầu ra 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
- Nếu bạn là người dùng Đám mây công cộng, hãy ghi lại các gói TCP/IP trên máy chủ phụ trợ.
- Nếu là người dùng Đám mây riêng, bạn có thể thu thập các gói TCP/IP trên máy chủ phụ trợ hoặc Trình xử lý thông báo. Tốt nhất là bạn nên ghi lại các gói này trên máy chủ phụ trợ khi chúng được giải mã trên máy chủ phụ trợ.
Sử dụng lệnh tcpdump sau đây để thu thập các gói TCP/IP:
tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
Phân tích các gói TCP/IP bằng công cụ Wireshark hoặc công cụ tương tự mà bạn quen dùng.
Phân tích mẫu Tcpdump
- Gói số 43: Trình xử lý thông báo (Nguồn) đã gửi một thông báo
Client Hellođến máy chủ phụ trợ (Đích đến). - Gói số 44: Máy chủ phụ trợ xác nhận đã nhận được thông báo
Client Hellotừ Trình xử lý thông báo. - Gói #45: Máy chủ phụ trợ gửi thông báo
Server Hellocùng với chứng chỉ của máy chủ. - Gói 46: Message Processor (Bộ xử lý thông báo) xác nhận đã nhận được thông báo
Server Hellovà chứng chỉ. Gói 47: Message Processor (Bộ xử lý thông báo) sẽ gửi thông báo
FIN, ACK, sau đó làRST, ACKtrong Gói 48.Điều này cho biết quá trình xác thực chứng chỉ máy chủ phụ trợ của Trình xử lý thông báo không thành công. Nguyên nhân là do Trình xử lý thông báo không có 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 tưởng chứng chỉ của máy chủ phụ trợ bằng các chứng chỉ có trong truststore (của Trình xử lý thông báo).
Bạn có thể quay lại và xem xét Gói số 45, đồng thời xác định chuỗi chứng chỉ do máy chủ phụ trợ gửi
- Trong ví dụ này, bạn có thể thấy rằng máy chủ đã gửi một chứng chỉ lá bằng
common name (CN) = mocktarget.apigee.net, tiếp theo là một chứng chỉ trung gian bằngCN= GTS CA 1D4và chứng chỉ gốc bằngCN = GTX Root R1.
Nếu bạn xác định rằng quá trình xác thực chứng chỉ của máy chủ không thành công, hãy chuyển đến Giai đoạn 2: So sánh chứng chỉ của máy chủ phụ trợ và các chứng chỉ được lưu trữ trong truststore của Trình xử lý thông báo.
- Gói số 43: Trình xử lý thông báo (Nguồn) đã gửi một thông báo
Giai đoạn 2
Giai đoạn 2: So sánh chứng chỉ của máy chủ phụ trợ và các chứng chỉ được lưu trữ trong truststore của Trình xử lý thông báo
- Xác định chuỗi chứng chỉ của máy chủ phụ trợ.
- Xác định chứng chỉ được lưu trữ trong truststore của Trình xử lý thông báo bằng cách làm theo các bước sau:
Lấy tên tham chiếu truststore từ phần tử
TrustStoretrong phầnSSLInfotrongTargetEndpoint.Hãy xem một phần
SSLInfomẫu trong cấu hìnhTargetEndpoint:<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>- Trong ví dụ trên, tên tham chiếu
TrustStorelàmyCompanyTruststoreRef. Trong giao diện người dùng Edge, hãy chọn Environments > References (Môi trường > Tham chiếu). Lưu ý tên trong cột Tham chiếu cho thông tin tham chiếu cụ thể về kho lưu trữ đáng tin cậy. Đây sẽ là tên kho lưu trữ đáng tin cậy của bạn.
Trong ví dụ trên, tên truststore là:
myCompanyTruststoreRef:
myCompanyTruststore
Lấy các chứng chỉ được lưu trữ trong truststore (xác định ở bước trước) bằng các API sau:
Nhận 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ả các chứng chỉ trong kho lưu trữ đáng tin cậy cụ thể.
Người dùng Đám mây 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 Đám mây riêng:
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 của 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ư mô tả trong phần Lấy mã truy cập OAuth 2.0
- Các lựa chọn
curlđược dùng trong ví dụ này được mô tả trong phần Sử dụng lệnh curl
Đầu ra mẫu:
Các chứng chỉ trong kho lưu trữ đáng tin cậy mẫu
myCompanyTruststorelà:[ "serverCert" ]
-
Nhận thông tin chi tiết về chứng chỉ cho chứng chỉ cụ thể từ Keystore hoặc Truststore.
API này trả về thông tin về một chứng chỉ cụ thể trong kho lưu trữ đáng tin cậy cụ thể.
Người dùng Đám mây 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 Đá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 của 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ư mô tả trong phần Lấy mã truy cập OAuth 2.0
- Các lựa chọn
curlđược dùng trong ví dụ này được mô tả trong phần Sử dụng lệnh curl
Đầu ra mẫu
Thông tin chi tiết về
serverCertcho thấy chủ đề và tổ chức phát hành như sau:Chứng chỉ thực thể/Chứng chỉ gốc:
"subject": "CN=mocktarget.apigee.net", "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
Chứng chỉ trung gian:
"subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US", "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
Xác minh rằng chứng chỉ máy chủ thực tế thu được ở bước 1 và chứng chỉ được lưu trữ trong truststore thu được ở bước 3 khớp với nhau. Nếu chúng không khớp nhau, thì đó là nguyên nhân gây ra vấn đề.
Trong ví dụ nêu trên, hãy xem xét từng chứng chỉ một:
- Chứng chỉ lá:
Từ máy chủ phụ trợ:
s:/CN=mocktarget.apigee.net i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
Từ truststore của Message Processor (máy khách):
"subject": "CN=mocktarget.apigee.net", "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
Chứng chỉ gốc được lưu trữ trong truststore khớp với chứng chỉ của máy chủ phụ trợ.
- Chứng chỉ trung gian:
Từ 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ừ truststore của Message Processor (máy khách):
"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 truststore khớp với chứng chỉ của máy chủ phụ trợ.
- Chứng chỉ gốc:
Từ 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
Chứng chỉ gốc hoàn toàn bị thiếu trong truststore của Message Processor.
Vì chứng chỉ gốc bị thiếu trong truststore, nên Message Processor sẽ gửi 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 Unavailablekèm theo mã lỗimessaging.adaptors.http.flow.SslHandshakeFailedcho các ứng dụng khách.
- Chứng chỉ lá:
Độ phân giải
- Đảm bảo bạn có chuỗi chứng chỉ đầy đủ và phù hợp của máy chủ phụ trợ.
- Nếu bạn là người dùng Đám mây công khai, hãy làm theo hướng dẫn trong phần Cập nhật chứng chỉ TLS cho Đám mây để cập nhật chứng chỉ cho kho lưu trữ đáng tin cậy của Trình xử lý thông báo của Apigee Edge.
- Nếu bạn là người dùng Private Cloud, hãy làm theo hướng dẫn trong phần Cập nhật chứng chỉ TLS cho Private Cloud để cập nhật chứng chỉ cho truststore của Trình xử lý thông báo của Apigee Edge.
Nguyên nhân: FQDN trong chứng chỉ của máy chủ phụ trợ và tên máy chủ trong điểm cuối mục tiêu không khớp
Nếu máy chủ phụ trợ trình bày một chuỗi chứng chỉ chứa FQDN không khớp với tên máy chủ được chỉ định trong điểm cuối đích, thì Trình xử lý thông báo 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
- Kiểm tra điểm cuối mục tiêu cụ thể trong proxy API mà bạn đang gặp lỗi này và lưu ý tên máy chủ lưu trữ của máy chủ phụ trợ:
Sample TargetEndpoint:
<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. Xác định FQDN trong chứng chỉ của máy chủ phụ trợ bằng lệnh
opensslnhư minh hoạ bên dưới: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 chainvà lưu ý FQDN được chỉ định là một phần của CN trong chủ đề của chứng chỉ lá.Certificate chain 0 s:/
CN=backend.apigee.neti:/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 R1Trong ví dụ trên, FQDN của máy chủ phụ trợ là
backend.apigee.net.- Nếu tên máy chủ của máy chủ phụ trợ thu được từ bước 1 và FQDN thu được ở bước 2 không khớp, thì đó là nguyên nhân gây ra lỗi.
- Trong ví dụ được thảo luận ở trên, tên máy chủ lưu trữ 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ì các giá trị này không khớp, nên bạn sẽ gặp 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 thức 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, chuỗi chứng chỉ hợp lệ và đầy đủ:
- Nếu bạn không có chứng chỉ của máy chủ phụ trợ có FQDN chính xác, 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.
Xác thực rằng bạn có một chuỗi chứng chỉ hợp lệ và đầy đủ của máy chủ phụ trợ.
- Sau khi bạn có chuỗi chứng chỉ hợp lệ và hoàn chỉnh với FQDN chính xác của máy chủ phụ trợ trong chứng chỉ thực thể hoặc chứng chỉ gốc 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ụ trợ bằng chuỗi chứng chỉ hoàn chỉnh.
Máy chủ phụ trợ chính xác
Cập nhật điểm cuối mục tiêu bằng tên máy chủ chính xác của máy chủ phụ trợ:
- 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 chứng chỉ của máy chủ phụ trợ.
Lưu các thay đổi đối với proxy API.
Trong ví dụ được thảo luận ở trên, nếu tên máy chủ lưu trữ phụ trợ được chỉ định không chính xác, thì bạn có thể khắc phục bằng cách sử dụng FQDN trong chứng chỉ của máy chủ phụ trợ, tức là
backend.apigee.netnhư 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ỉ không chính xác/không đầy đủ do máy chủ phụ trợ cung cấp
Chẩn đoán
- Lấy chuỗi chứng chỉ của máy chủ phụ trợ bằng cách thực thi lệnh
opensslđối 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_#
Ghi chú
Certificate chaintừ đầu ra của lệnh trên.Chuỗi chứng chỉ mẫu của máy chủ phụ trợ trong đầu ra của lệnh openssl:
Certificate chain 0 s:/
CN=mocktarget.apigee.neti:/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 - Xác minh rằng bạn có chuỗi chứng chỉ đầy đủ và phù hợp như giải thích trong phần Xác thực chuỗi chứng chỉ.
Nếu bạn không có chuỗi chứng chỉ hợp lệ và đầy đủ 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 như minh hoạ ở trên, chứng chỉ gốc bị thiếu. Do đó, bạn gặp phải 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à đầy đủ:
Xác thực rằng bạn có một chuỗi chứng chỉ hợp lệ và hoàn chỉnh của máy chủ phụ trợ.
- Cập nhật chuỗi chứng chỉ hợp lệ và đầy đủ trong kho khoá của máy chủ phụ trợ.
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.
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:
- Nếu bạn là người dùng Đám mây công cộng, hãy cung cấp những thông tin sau:
- Tên tổ chức
- Tên môi trường
- Tên API Proxy
- Hoàn tất lệnh
curlđể tái hiện lỗi - Tệp theo dõi cho thấy lỗi
Đầu ra của lệnh
openssl:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#- Các 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, hãy cung cấp những thông tin sau:
- Thông báo lỗi hoàn chỉnh đã được ghi nhận
- Gói proxy API
- Tệp theo dõi cho thấy lỗi
- Nhật ký Bộ xử lý tin nhắn
/opt/apigee/var/log/edge-message-processor/logs/system.log - Đầu ra của lệnh
openssl:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_# - Các gói TCP/IP được thu thập trên máy chủ phụ trợ hoặc Trình xử lý thông báo.
- Đầu ra của API Lấy tất cả chứng chỉ cho một kho khoá hoặc kho tin cậy và cả thông tin chi tiết của từng chứng chỉ thu được bằng API Lấy thông tin chi tiết về chứng chỉ từ một kho khoá hoặc kho tin cậy.
Tài liệu tham khảo
- Chuỗi tin cậy của chứng chỉ
- Lệnh OpenSSL