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 một mã trạng thái HTTP của 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 đâ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 mã lỗi messaging.adaptors.http.flow.SslHandshakeFailed
do xảy ra lỗi trong quá trình bắt tay SSL giữa Bộ 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 nguyên nhân có thể là mức độ cao đã dẫn đến lỗi này.
Tuỳ thuộc vào thông báo lỗi quan sát được 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 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 Bộ xử lý thông báo của Apigee Edge và máy chủ phụ trợ:
- Nếu là cửa hàng uy tín của Bộ xử lý tin nhắn của Apigee Edge:
- Chứa 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ợ trình bày:
- Chứa Tên miền hoàn toà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 chuỗi chứng chỉ không chính xác hoặc không đầy đủ
Các nguyên nhân có thể dẫn đến vấn đề này như sau:
Nguyên nhân | Nội dung 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 chứng chỉ được lưu trữ trong kho lưu trữ tin cậy 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 về dịch vụ đám mây riêng tư và công khai |
FQDN trong chứng chỉ của máy chủ phụ trợ không khớp với tên máy chủ ở điểm cuối đích | Chứng chỉ do máy chủ phụ trợ cung cấp có 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 về dịch vụ đám mây riêng tư và công khai |
Chứng chỉ hoặc chuỗi chứng chỉ không chính xác/chưa hoàn chỉnh mà máy chủ phụ trợ thông báo | Chuỗi chứng chỉ mà máy chủ phụ trợ thông báo không chính xác hoặc chưa đầy đủ. | Người dùng Edge về dịch vụ đám mây riêng tư và công khai |
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 số 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à một người dùng có vai trò thích 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 quan sát thấy lỗi.
Vẽ Mã lỗi dựa trên Thời gian.
Chọn một ô có mã lỗi
messaging.adaptors.http.flow.SslHandshakeFailed
như minh hoạ dưới đây:Thông tin về mã lỗi
messaging.adaptors.http.flow.SslHandshakeFailed
hiển thị như sau:Nhấp vào Xem nhật ký rồi mở rộng hàng cho yêu cầu không thành công.
- Trong cửa sổ Logs (Nhật ký), hãy lưu ý những thông tin sau:
- Yêu cầu mã nhận dạng thông báo
- Mã trạng thái:
503
- Nguồn lỗi:
target
- Mã lỗi:
messaging.adaptors.http.flow.SslHandshakeFailed
Trace
Quy trình số 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:
- Bật tính năng phiên theo dõi và
- Chờ lỗi
503 Service Unavailable
với mã lỗimessaging.adaptors.http.flow.SslHandshakeFailed
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
- Chờ lỗi
Đảm bảo bạn đã bật tuỳ chọn Show all FlowInfos (Hiện tất cả thông tin luồng):
- 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.
- Di chuyển qua các giai đoạn trong quá trình theo dõi 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ạ dưới đây:
- Lưu ý các giá trị của các nội dung sau trong dấu vết:
- 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 không giao tiếp SSL vì Bộ 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ợ.
- lỗi:
- Chuyển đến Giai đoạn AX (Dữ liệu phân tích đã ghi lại) trong dấu vết rồi nhấp vào đó.
Di chuyển xuống mục Tiêu đề lỗi chi tiết giai đoạn rồi xác định giá trị của X-Apigee-fault-code và X-Apigee-fault-source và X-Apigee-Message-ID như minh hoạ dưới đây:
- Hãy lưu ý 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 tư, bạn có thể dùng nhật ký truy cập NGINX để xác định thông tin chính về HTTP
503 Service Unavailable
. Kiểm tra nhật ký truy cập NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Tìm kiếm xem có lỗi
503
nào với mã lỗimessaging.adaptors.http.flow.SslHandshakeFailed
trong một khoảng thời gian cụ thể hay không (nếu vấn đề này xảy ra trong quá khứ) hoặc có yêu cầu nào vẫn không thành công với503
hay không. Nếu bạn tìm thấy bất kỳ lỗi
503
nào có X-Apigee-fault-code 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 NGINX:
Mục mẫu ở trên từ nhật ký truy cập NGINX có các giá trị sau cho X-Apigee-fault-code và 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 số 4: Sử dụng nhật ký trình xử lý thông báo
- Xác định mã thông báo của một trong các yêu cầu không thành công bằ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ư 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ý Trình xử lý thông báo (
/opt/apigee/var/log/edge-message-processor/logs/system.log
). Bạn có thể gặp phải lỗi sau: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 problemLỗi trên cho biết rằng giao thức bắt tay SSL không thành công giữa Bộ xử lý thông báo và máy chủ phụ trợ.
Theo sau là một ngoại lệ với dấu vết ngăn xếp chi tiết như sau:
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
Việc này cho thấy quá trình giao tiếp SSL không thành công vì Bộ 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/không hoàn chỉnh trong Truststore của Trình xử lý thông báo
Chẩn đoán
- Xác định Mã lỗi, Nguồn lỗi cho lỗi quan sát được bằng công cụ Giám sát API, Công cụ theo dõi hoặc nhật ký truy cập NGINX như 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ách sử dụng công cụ Theo dõi như giải thích trong phần Các bước chẩn đoán thường gặp
- Tìm trường hợp ngoại lệ bằng cách sử dụng Nhật ký trình xử lý thông báo như giải thích trong phần Các bước chẩn đoán phổ biến
- Tìm
faultstring
trong phản hồi lỗi cho lệnh gọi API của bạn như trong phần 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à không giao tiếp SSL, vì Bộ xử lý thông báo của Apigee Edge không thể xác thự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 Trình xử lý thông báo
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
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#
Hãy lưu ý chuỗi chứng chỉ từ kết quả của lệnh trên:
Mẫu Chuỗi chứng chỉ của máy chủ phụ trợ 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
- Nếu bạn là người dùng Cloud công cộng, hãy thu thập 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 tư, 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. Bạn nên ghi lại chúng trên máy chủ phụ trợ khi các gói được giải mã trên máy chủ phụ trợ.
Dùng lệnh tcpdump sau để ghi lại 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 về Tcpdump
- Gói #43: Trình xử lý thông báo (Nguồn) đã gửi thông báo
Client Hello
đến máy chủ phụ trợ (Đích). - Gói #44: Máy chủ phụ trợ xác nhận việc nhận được thông báo
Client Hello
từ Trình xử lý thông báo. - Gói #45: Máy chủ phụ trợ gửi thông báo
Server Hello
cùng với chứng chỉ của máy chủ đó. - Gói #46: Trình xử lý thông báo xác nhận đã nhận được thông báo
Server Hello
và chứng chỉ. Gói #47: Bộ xử lý thông báo gửi thông báo
FIN, ACK
, theo sau làRST, ACK
trong Gói #48.Mã này cho biết Trình xử lý thông báo không xác thực được chứng chỉ máy chủ phụ trợ. Nguyên nhân là do Trình xử lý thông báo 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 tưởng chứng chỉ của máy chủ phụ trợ với các chứng chỉ có trong kho lưu trữ tin cậy (của Trình xử lý thông báo).
Bạn có thể quay lại và xem lại Gói #45 rồ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 máy chủ đã gửi một chứng chỉ lá có
common name (CN) = mocktarget.apigee.net
, theo sau là một chứng chỉ trung gian vớiCN= GTS CA 1D4
và một chứng chỉ gốc bằngCN = GTX Root R1
.
Nếu bạn đã chắc chắn rằng xác thực chứng chỉ của máy chủ không thành công, hãy chuyển sang 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 kho lưu trữ tin cậy của Trình xử lý thông báo.
- Gói #43: Trình xử lý thông báo (Nguồn) đã gửi thông báo
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 kho tin cậy 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 kho lưu trữ tin cậy của Trình xử lý thông báo theo các bước sau:
Lấy tên tham chiếu Truststore từ phần tử
TrustStore
ở phầnSSLInfo
trongTargetEndpoint
.Hãy xem phần
SSLInfo
mẫ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
TrustStore
làmyCompanyTruststoreRef
. Trong giao diện người dùng Edge, hãy chọn Environments > References (Môi trường > Tham chiếu). Hãy lưu ý tên trong cột Reference (Tham chiếu) cho thông tin tham chiếu cụ thể trong Truststore. Đây sẽ là tên kho lưu trữ 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ả các chứng chỉ cho kho khoá hoặc kho lưu trữ tin cậy. API này liệt kê tất cả chứng chỉ trong kho tin cậy cụ thể.
Người dùng Public Cloud:
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 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 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 Lấy mã truy cập OAuth 2.0
- Các tuỳ chọn
curl
dùng trong ví dụ này được mô tả trong phần Dùng curl
Ví dụ về mã được tạo:
Các chứng chỉ từ kho lưu trữ tin cậy mẫu
myCompanyTruststore
là:[ "serverCert" ]
-
Lấy 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 lưu trữ tin cậy cụ thể.
Người dùng Public Cloud:
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 Lấy mã truy cập OAuth 2.0
- Các tuỳ chọn
curl
dùng trong ví dụ này được mô tả trong phần Dùng curl
Kết quả mẫu
Thông tin chi tiết về
serverCert
cho biết chủ thể và người phát hành như sau:Giấy chứng nhận Lá xanh/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",
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 trùng khớp với nhau. Nếu chúng không khớp nhau thì đó chính là nguyên nhân của vấn đề.
Từ ví dụ hiển thị trên, hãy xem một chứng chỉ tại một thời điểm:
- Giấy chứng nhận lá bài:
Từ máy chủ phụ trợ:
s:/CN=mocktarget.apigee.net i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
Từ kho lưu trữ tin cậy của Trình xử lý thư (ứng dụng khách):
"subject": "CN=mocktarget.apigee.net", "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
Chứng chỉ lá đượ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ừ kho lưu trữ tin cậy của Trình xử lý thư (ứng dụng 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
Thiếu chứng chỉ gốc hoàn toàn trong kho lưu trữ tin cậy của Trình xử lý thông báo.
Vì thiếu chứng chỉ gốc trong kho lưu trữ tin cậy nên Trình xử lý thông báo sẽ gửi ra 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ỗimessaging.adaptors.http.flow.SslHandshakeFailed
cho các ứng dụng.
- Giấy chứng nhận lá bài:
Độ phân giải
- Đả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ợ.
- Nếu bạn là người dùng công khai Cloud, hãy làm theo hướng dẫn trong bài viết Cập nhật chứng chỉ TLS cho Cloud để cập nhật chứng chỉ lên kho lưu trữ tin cậy của Trình xử lý thư của Apigee Edge.
- 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 bài viết Cập nhật chứng chỉ TLS cho Đám mây riêng tư để cập nhật chứng chỉ lên kho lưu trữ tin cậy của Trình xử lý thư 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ủ ở điểm cuối đích 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ì Quy trình 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 đích cụ thể trong proxy API mà bạn đang quan sát lỗi này và để lại tên máy chủ của máy chủ phụ trợ:
TargetEndpoint 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
. Xác định FQDN trong chứng chỉ của máy chủ phụ trợ bằng lệnh
openssl
như 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
Hãy kiểm tra phần
Certificate chain
và 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.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 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ì đó chính là nguyên nhân gây ra lỗi.
- Trong ví dụ thảo luận ở trên, tên máy chủ ở đ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ì không khớp nhau 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 pháp sau:
FQDN chính xác
Cập nhật kho khoá của máy chủ phụ trợ với 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à hoàn chỉnh 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ỉ lá 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.
Máy chủ phụ trợ chính xác
Cập nhật điểm cuối đích bằng tên máy chủ lưu trữ 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ụ 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, 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ỉ không chính xác/không hoàn chỉnh do máy chủ phụ trợ trình bày
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_#
Hãy lưu ý
Certificate chain
từ kết quả của lệnh trên.Mẫu chuỗi chứng chỉ của máy chủ phụ trợ 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 - Xác minh rằng bạn có chuỗi chứng chỉ phù hợp và hoàn chỉnh 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à hoàn chỉnh cho máy chủ phụ trợ, thì đó chính là nguyên nhân gây ra sự cố 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 bị thiếu. Do đó, bạn sẽ 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:
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à hoàn chỉnh 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 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 và liên hệ với Bộ phận hỗ trợ Apigee:
- Nếu bạn là người dùng Public Cloud, 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 những thông tin sau:
- Đã phát hiện thấy thông báo lỗi hoàn chỉnh
- Gói proxy API
- Tệp theo dõi cho thấy lỗi
- Nhật ký Trình xử lý thư
/opt/apigee/var/log/edge-message-processor/logs/system.log
- Kết quả của lệnh
openssl
:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
- Gói TCP/IP được ghi trên máy chủ phụ trợ hoặc Bộ xử lý thông báo.
- Kết quả của API Kho khoá hoặc Kho tin cậy, cũng như thông tin chi tiết về từng chứng chỉ nhận được bằng cách sử dụng API Lấy thông tin chi tiết về chứng chỉ từ API Kho khoá hoặc Kho lưu trữ tin cậy.
Tài liệu tham khảo
- Chứng chỉ Chuỗi tin cậy
- Lệnh OpenSSL