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:
- Đă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.
Chuyển sang tổ chức mà bạn muốn điều tra vấn đề này.
- Chuyển đến thẻ Analyze (Phân tích) > Giám sát API > Điều tra.
- Chọn khung thời gian cụ thể mà bạn phát hiệ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.SslHandshakeFailed
như minh hoạ bên dưới: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: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.
- 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:
- Bật phiên theo dõi và
- Chờ lỗi
503 Service Unavailable
với mã lỗimessaging.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
- Chờ lỗi
Đảm bảo bạn đã bật chế độ Show all FlowInfos (Hiện tất cả FlowInfos):
- 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 của quá trình theo dõi và xác định nơi xảy ra lỗi.
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:
- 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ỉ.
- lỗi:
- Chuyển đến Giai đoạn AX (Đã ghi dữ liệu Analytics) trong dấu vết và nhấp vào đó.
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-code và X-Apigee-fault-source và 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 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
. 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ỗi hay khôngmessaging.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ới503
. 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ủamessaging.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:
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 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 4: Sử dụng Nhật ký trình xử lý thư
- 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.
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 problemLỗ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
- 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.
- Nếu Mã lỗi là
messaging.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: - Tìm error.cause bằng công cụ Theo dõi như được giải thích trong 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ư như được giải thích trong Các bước chẩn đoán thường gặp
- Tìm
faultstring
trong phản hồi lỗi cho lệnh gọi API 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ì đ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:
- 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 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
- 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ợ.
- 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ợ.
Sử dụng tcpdump để 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á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
- 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
- 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ớiCN= GTS CA 1D4
và chứng chỉ gốc cùng vớiCN = 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ư.
- Gói số 43: Bộ xử lý thư (Nguồn) đã gửi một
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 Cửa hàng tin cậy của Đơn vị xử lý thư
- 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 tin cậy của Trình xử lý thư bằng cách sử dụng
các bước sau:
Lấy tên tham chiếu kho tin cậy từ phần tử
TrustStore
trong phầnSSLInfo
trongTargetEndpoint
.Hãy xem xét phần
SSLInfo
mẫu trongTargetEndpoint
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>
- 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 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.
Trong ví dụ trên, tên kho tin cậy là:
myCompanyTruststoreRef:
myCompanyTruststore
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:
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" ]
-
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",
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:
- 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ủ.
- 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ợ.
- 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.
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ỗimessaging.adaptors.http.flow.SslHandshakeFailed
đến khách hàng .
- Giấy chứng nhận mô tả:
Độ 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 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ư.
- 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
- 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
. 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 R1Trong ví dụ trên, FQDN của máy chủ phụ trợ là
backend.apigee.net
.- 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.
- 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 :
- 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.
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ợ.
- 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:
- 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ủ.
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
- 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 - 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ỉ.
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:
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ợ.
- 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:
- Đã 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 lại trên máy chủ phụ trợ hoặc Bộ xử lý thông báo.
- Dữ liệu đầu ra của Nhận tất cả chứng chỉ cho API kho khoá hoặc kho tin cậy cũng như thông tin chi tiết về mỗi chứng chỉ thu được sử dụng Nhận thông tin chi tiết về chứng chỉ từ API Kho khoá hoặc Truststore.
Tài liệu tham khảo
- Chứng chỉ Chuỗi tin cậy
- Lệnh OpenSSL