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 nhận được phản hồi HTTP 400 – Yêu cầu không hợp lệ kèm theo thông báo "The SSL Certificate error". Lỗi này thường do Bộ định tuyến Edge gửi theo cách thiết lập TLS hai chiều để kết nối đến Apigee Edge.
Thông báo Lỗi
Ứng dụng khách nhận được mã phản hồi sau đây:
HTTP/1.1 400 Bad Request
Theo sau là trang lỗi HTML bên dưới:
<html> <head> <title>400 The SSL certificate error</title> </head> <body bgcolor="white"> <center> <h1>400 Bad Request</h1> </center> <center>The SSL certificate error</center> <hr> <center>nginx</center> </body> </html>
Nguyên nhân có thể xảy ra
Sau đây là những nguyên nhân có thể gây ra vấn đề này:
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ỉ máy khách đã hết hạn | Chứng chỉ do ứng dụng gửi đã hết hạn. | Người dùng Edge riêng tư và Cloud Cloud |
Chứng chỉ do Ứng dụng gửi không chính xác | Lỗi này sẽ xảy ra nếu chứng chỉ do ứng dụng gửi không khớp bằng chứng chỉ được lưu trữ trong kho tin cậy của Bộ định tuyến Edge. | Người dùng Edge riêng tư và Cloud Cloud |
Thiếu Chứng chỉ gốc của ứng dụng khách trong Truststore | Lỗi này được gửi nếu chứng chỉ gốc đã ký của CA của ứng dụng bị thiếu trong kho tin cậy của bộ định tuyến Edge. | Người dùng Edge riêng tư và Cloud Cloud |
Chứng chỉ ứng dụng không được tải trong Bộ định tuyến Edge | Lỗi này sẽ xảy ra nếu không tải được chứng chỉ ứng dụng khách đã tải lên kho tin cậy trên Bộ định tuyến. | Người dùng Edge Private Cloud |
Nguyên nhân: Chứng chỉ ứng dụng khách đã hết hạn
Vấn đề này thường xảy ra với TLS 2 chiều, khi chứng chỉ do ứng dụng gửi đã hết hạn. Trong TLS 2 chiều, cả máy khách và máy chủ trao đổi chứng chỉ công khai của họ để hoàn tất cơ chế bắt tay. Ứng dụng xác thực chứng chỉ máy chủ và máy chủ xác thực chứng chỉ máy khách.
Trong Edge, TLS 2 chiều được triển khai tại máy chủ ảo, trong đó chứng chỉ máy chủ được thêm vào Kho khoá và chứng chỉ máy khách được thêm vào kho lưu trữ tin cậy.
Trong quá trình bắt tay TLS, nếu nhận thấy chứng chỉ máy khách đã hết hạn thì máy chủ sẽ gửi 400 - Yêu cầu không hợp lệ với thông báo "Lỗi chứng chỉ SSL".
Chẩn đoán
Đăng nhập vào giao diện người dùng Edge và xem cấu hình Máy chủ ảo cụ thể (Quản trị > Máy chủ ảo) có yêu cầu API đang được đã tạo hoặc sử dụng Nhận API máy chủ ảo Management API để nhận định nghĩa về Máy chủ ảo cụ thể.
Thông thường, máy chủ ảo để giao tiếp TLS hai chiều có dạng như sau:
<VirtualHost name="myTLSVHost"> <HostAliases> <HostAlias>api.myCompany.com</HostAlias> </HostAliases> <Port>443</Port> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>ref://myKeystoreRef</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> <TrustStore>ref://myTruststoreRef</TrustStore> </SSLInfo> </VirtualHost>
Xác định tham chiếu Truststore được dùng trong Máy chủ ảo. Trong ví dụ trên, tên tham chiếu Truststore là myTruststoreRef.
- Xác định Truststore được trỏ đến bằng tham chiếu của Truststore.
- Trong giao diện người dùng Edge, hãy chuyển đến mục Quản trị > Môi trường > Tài liệu tham khảo và tìm kiếm tên tham chiếu Truststore.
Lưu ý tên này trong cột Reference (Tham chiếu) đối với tệp tham chiếu cụ thể của Truststore. Đây sẽ là tên Truststore của bạn.
Trong ví dụ trên, hãy lưu ý rằng myTruststoreRef có tham chiếu đến myTruststore. Do đó, tên Truststore là myTruststore.
- Trong mục Quản trị > Môi trường > Kho khoá TLS trong giao diện người dùng Edge, chuyển đến TLS Kho khoá và tìm Truststore được tìm thấy ở bước 3.
Chọn chứng chỉ trong Truststore cụ thể (được xác định trong bước số 3 ở trên) như minh hoạ dưới đây:
Chứng chỉ có bí danh
client-cert-markw
trong ví dụ trên cho thấy rằng đã hết hạn.- Kiểm tra xem chứng chỉ đã hết hạn đối với bí danh chứng chỉ dành cho kho tin cậy của bạn hay chưa.
- Nếu chứng chỉ chưa hết hạn, hãy chuyển sang phần Các bước chẩn đoán phổ biến cho các nguyên nhân khác.
Độ phân giải
Lấy chứng chỉ mới và tải chứng chỉ lên:
- Tạo một kho tin cậy mới, ví dụ: myNewTruststore.
- Tải chứng chỉ mới lên kho tin cậy mới tạo.
Sửa đổi tệp tham chiếu trustore được dùng trong Máy chủ ảo cụ thể để trỏ đến cửa hàng tin cậy bằng cách làm theo các bước được cung cấp trong Sửa đổi tệp đối chiếu.
Trong ví dụ được mô tả ở trên, hãy trỏ tệp tham chiếu myTruststoreRef đến myNewTruststore.
Các bước chẩn đoán phổ biến cho các nguyên nhân khác
- Để điều tra vấn đề này, bạn cần bắt các gói TCP/IP bằng cách sử dụng
tcpdump (tcpdump).
- 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 ứng dụng khách hoặc Bộ định tuyến.
- Nếu bạn là người dùng Public Cloud (Đám mây công cộng), hãy thu thập các gói TCP/IP trên ứng dụng.
Sau khi bạn đã quyết định được vị trí cần bắt các gói TCP/IP, hãy sử dụng tcpdump để thu các gói TCP/IP:
tcpdump -i any -s 0 host <IP address> -w <File name>
Lưu ý: Nếu bạn đang nhận gói TCP/IP trên Bộ định tuyến, hãy sử dụng địa chỉ IP công khai của ứng dụng trong lệnh
tcpdump
.Nếu bạn nhận gói TCP/IP trên ứng dụng, hãy sử dụng IP công khai địa chỉ của tên máy chủ lưu trữ dùng trong Virtual Host trong lệnh
tcpdump
.Tham khảo tcpdump để biết thêm thông tin về công cụ này và các biến thể khác của lệnh này.
- Phân tích các gói TCP/IP thu thập được bằng cách sử dụng Công cụ Wireshark hoặc công cụ tương tự mà bạn đã quen thuộc.
Dưới đây là phân tích mẫu dữ liệu gói TCP/IP bằng công cụ Wireshark:
- Gói số 30 trong tcpdump (hình ảnh bên dưới) cho thấy Ứng dụng khách (nguồn) đã gửi thư "Xin chào Khách hàng" thông báo đến Bộ định tuyến (đích).
- Gói tin số 34 cho thấy Bộ định tuyến xác nhận thông báo Client Hello từ ứng dụng khách.
- Bộ định tuyến gửi "Server Hello" (Xin chào máy chủ) trong gói số 35 rồi gửi chứng chỉ của nó cũng như yêu cầu ứng dụng khách gửi chứng chỉ của nó trong gói số 38.
- Trong gói số 38, tại đó Bộ định tuyến gửi gói "Yêu cầu chứng chỉ", hãy kiểm tra "Tên phân biệt" phần này cung cấp thông tin chi tiết về chứng chỉ máy khách, chuỗi của chứng chỉ máy khách và tổ chức phát hành chứng chỉ được Bộ định tuyến (máy chủ) chấp nhận.
Ứng dụng khách gửi chứng chỉ trong Gói số 41. Kiểm tra chứng chỉ Certificate Xác minh phần trong gói số 41 và xác định chứng chỉ mà ứng dụng khách đã gửi.
- Xác minh xem chủ thể, người cấp chứng chỉ và chuỗi chứng chỉ do ứng dụng gửi có phải không ứng dụng (gói số 41) khớp với chứng chỉ được chấp nhận và chuỗi của chứng chỉ đó từ Bộ định tuyến (gói số 38). Nếu thông tin không khớp thì đó là nguyên nhân gây ra lỗi. Do đó, Bộ định tuyến (Máy chủ) gửi Cảnh báo đã mã hoá (gói 57) theo sau là FIN, ACK (gói 58) đến Ứng dụng và cuối cùng kết nối sẽ bị chấm dứt.
- Việc chứng chỉ và chuỗi của chứng chỉ không khớp có thể là do các tình huống được mô tả trong các phần sau đây.
Nguyên nhân: Chứng chỉ do ứng dụng gửi không chính xác
Điều này thường xảy ra nếu chủ thể/người cấp chứng chỉ và/hoặc chuỗi của chứng chỉ được gửi bởi ứng dụng khách không khớp với chứng chỉ và/hoặc chuỗi của chứng chỉ được lưu trữ trong kho tin cậy của Bộ định tuyến (Máy chủ).
Chẩn đoán
Đăng nhập vào giao diện người dùng Edge rồi xem cấu hình Máy chủ ảo cụ thể (Quản trị > Máy chủ ảo) có yêu cầu API đang được đã tạo hoặc sử dụng Get Virtual Host API (Nhận API máy chủ ảo) Management API để nhận định nghĩa về Máy chủ ảo cụ thể.
Thông thường, máy chủ ảo để giao tiếp TLS hai chiều có dạng như sau:
<VirtualHost name="myTLSVHost"> <HostAliases> <HostAlias>api.myCompany.com</HostAlias> </HostAliases> <Port>443</Port> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>ref://myKeystoreRef</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> <TrustStore>ref://myCompanyTruststoreRef</TrustStore> </SSLInfo> </VirtualHost>
- Xác định tham chiếu Truststore được dùng trong Máy chủ ảo.
Trong ví dụ trên, tên tham chiếu của Truststore là myCompanyTruststoreRef.
- Xác định Truststore được trỏ bởi tham chiếu của Truststore.
- Trong giao diện người dùng Edge, hãy chuyển đến mục Quản trị > Tài liệu tham khảo về môi trường và tìm kiếm tên tham chiếu Truststore.
Lưu ý tên này trong cột Reference (Tham chiếu) đối với tệp tham chiếu cụ thể của Truststore. Đây sẽ là tên Truststore của bạn.
Trong ví dụ trên, hãy lưu ý rằng myCompanyTruststoreRef có tham chiếu đến myCompanyTruststore. Do đó, tên Truststore là myCompanyTruststore.
- Lấy chứng chỉ được lưu trữ trong Truststore (được xác định ở bước trước) bằng các API sau:
Liệt kê các chứng chỉ cho kho khoá hoặc API cửa hàng tin cậy.
API này liệt kê tất cả chứng chỉ trong Truststore cụ thể.
Nhận thông tin chi tiết về chứng chỉ qua một kho khoá hoặc API cửa hàng tin cậy.
API này trả về thông tin về một chứng chỉ cụ thể trong Truststore cụ thể.
- Kiểm tra xem bên phát hành và chủ thể của mỗi chứng chỉ cũng như chuỗi của chứng chỉ đó có được lưu trữ trong myCompanyTruststore khớp với chứng chỉ và chuỗi của chứng chỉ dưới dạng bạn thấy trong Gói TCP/IP (tham khảo gói số 38) ở trên. Nếu thông tin không khớp, điều đó có nghĩa là mà các chứng chỉ đã tải lên kho tin cậy không được tải trong Bộ định tuyến Edge. Chuyển đến phần Nguyên nhân: Chứng chỉ ứng dụng không được tải trong Bộ định tuyến Edge.
- Nếu không có thông tin trùng khớp ở Bước 5, thì điều đó cho biết ứng dụng khách đã thực hiện không gửi đúng Chứng chỉ và chuỗi của Chứng chỉ đó.
Độ phân giải
Đảm bảo rằng ứng dụng khách đã gửi chứng chỉ và chuỗi của chứng chỉ chính xác đến Edge.
Nguyên nhân: Thiếu chứng chỉ gốc của ứng dụng khách trong Truststore
Lỗi này được gửi nếu chứng chỉ gốc đã ký của CA của ứng dụng bị thiếu trong kho tin cậy của bộ định tuyến Edge.
Chẩn đoán
Đăng nhập vào giao diện người dùng Edge và xem cấu hình máy chủ ảo cụ thể mà API đang được thực hiện (Quản trị > Máy chủ lưu trữ ảo > virtual_host), hoặc sử dụng Tải API máy chủ ảo để nhận định nghĩa về máy chủ ảo cụ thể.
Thông thường, máy chủ ảo để giao tiếp TLS hai chiều có dạng như sau:
<VirtualHost name="myTLSVHost"> <HostAliases> <HostAlias>api.myCompany.com</HostAlias> </HostAliases> <Port>443</Port> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>ref://myKeystoreRef</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> <TrustStore>ref://myCompanyTruststoreRef</TrustStore> </SSLInfo> </VirtualHost>
- Xác định tệp tham chiếu kho tin cậy được dùng trong máy chủ ảo. Trong ví dụ trước, tên tham chiếu của Truststore là myCompanyTruststoreRef.
- Xác định kho tin cậy thực tế đang được sử dụng bởi tham chiếu kho tin cậy.
- Trong giao diện người dùng Edge, hãy chuyển đến mục Quản trị > Môi trường > Tài liệu tham khảo và nội dung tìm kiếm cho tên tham chiếu kho tin cậy.
Tên kho tin cậy cho tham chiếu kho tin cậy cụ thể nằm trong Cột Tham chiếu.
Trong ví dụ này, hãy lưu ý rằng myCompanyTruststoreRef đã myCompanyTruststore trong cột Tham chiếu. Do đó, kho tin cậy tên là 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ách sử dụng
các API sau:
- Liệt kê các chứng chỉ cho một kho khoá hoặc API cửa hàng tin cậy. API này liệt kê tất cả chứng chỉ trong kho tin cậy.
- Nhận thông tin chi tiết về chứng chỉ qua một kho khoá hoặc API cửa hàng tin cậy. API này trả về thông tin về một chứng chỉ cụ thể trong kho tin cậy.
Kiểm tra xem chứng chỉ có bao gồm một chuỗi hoàn chỉnh, bao gồm cả chứng chỉ gốc hay không do ứng dụng cụ thể gửi như được thấy trong Gói TCP/IP (xem Hình 4). Kho tin cậy phải bao gồm chứng chỉ gốc cũng như leaf certificate của ứng dụng khách và chứng chỉ trung gian. Nếu chứng chỉ gốc hợp lệ của ứng dụng bị thiếu trong kho tin cậy, đó là nguyên nhân gây ra lỗi.
Tuy nhiên, nếu chuỗi chứng chỉ hoàn chỉnh của ứng dụng, bao gồm cả chứng chỉ gốc, tồn tại trong kho tin cậy, thì nó cho biết rằng các chứng chỉ đã được tải lên Truststore có thể không được tải trong Edge Router. Nếu trường hợp đó xảy ra, hãy xem Nguyên nhân: Chứng chỉ ứng dụng khách không được tải trong Bộ định tuyến Edge.
Độ phân giải
Đảm bảo rằng có chứng chỉ của ứng dụng chính xác, bao gồm cả chứng chỉ gốc trong kho tin cậy của bộ định tuyến Apigee Edge.
Nguyên nhân: Chứng chỉ ứng dụng khách không được tải trong Bộ định tuyến Edge
- Nếu bạn là người dùng Public Cloud, hãy liên hệ với Bộ phận hỗ trợ 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 bên dưới trên mỗi Bộ định tuyến:
- Kiểm tra xem tệp
/opt/nginx/conf.d/OrgName_envName_vhostName-client.pem
có tồn tại hay không cho máy chủ ảo cụ thể. Nếu tệp không tồn tại, hãy chuyển sang Phần Giải pháp bên dưới. - Nếu tệp tồn tại, hãy sử dụng lệnh
openssl
bên dưới để lấy thông tin chi tiết về các chứng chỉ hiện có trên Edge Router:openssl -in <OrgName_envName_vhostName-client.pem> -text -noout
- Kiểm tra tổ chức phát hành, tiêu đề và ngày hết hạn của chứng chỉ. Nếu có bất kỳ thông tin nào trong số này không phù hợp với những gì quan sát được trong Truststore ở giao diện người dùng Edge hoặc sử dụng các API quản lý, thì đó là nguyên nhân gây ra lỗi.
- Có thể Bộ định tuyến không tải lại các chứng chỉ đã tải lên.
- Kiểm tra xem tệp
Độ phân giải
Khởi động lại Bộ định tuyến để đảm bảo các Chứng chỉ mới nhất được tải bằng bước bên dưới:
apigee-service edge-router restart
Chạy lại các API và kiểm tra kết quả. Nếu sự cố vẫn tiếp diễn, hãy chuyển đến Thu thập thông tin chẩn đoán.
Thu thập thông tin chẩn đoán
Nếu vấn đề vẫn tiếp diễn sau khi đã làm theo các hướng dẫn ở trên, hãy thu thập thông tin chẩn đoán sau đây. Hãy liên hệ và chia sẻ thông tin bạn thu thập với Bộ phận 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 proxy API
- Tên máy chủ ảo
- Tên bí danh máy chủ lưu trữ
- Hoàn tất lệnh curl để tái hiện lỗi
- Gói TCP/IP được thu thập trên Ứng dụng khách
- 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ên máy chủ lưu trữ ảo và định nghĩa tương ứng bằng cách sử dụng Nhận API máy chủ ảo
- Tên bí danh máy chủ lưu trữ
- Đã phát hiện thấy thông báo lỗi hoàn chỉnh
- Gói TCP/IP được thu thập trên Ứng dụng khách hoặc Bộ định tuyến.
- Kết quả của lệnh Liệt kê các chứng chỉ từ API kho khoá API cũng như thông tin chi tiết về từng Chứng chỉ mà bạn nhận được qua API Thông tin chi tiết về chứng chỉ.
- Thông tin chi tiết về những phần mà bạn đã thử trong Cẩm nang này và mọi thông tin chi tiết khác sẽ giúp chúng tôi nhanh chóng giải quyết vấn đề này.