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
Lỗi bắt tay TLS/SSL xảy ra khi máy khách và máy chủ không thể thiết lập giao tiếp bằng Giao thức TLS/SSL. Khi lỗi này xảy ra trong Apigee Edge, ứng dụng ứng dụng nhận được trạng thái HTTP 503 với thông báo Service Available. Bạn thấy lỗi này sau bất kỳ lệnh gọi API nào xảy ra lỗi bắt tay TLS/SSL.
Thông báo lỗi
HTTP/1.1 503 Service Unavailable
Bạn cũng có thể thấy thông báo lỗi này khi xảy ra lỗi bắt tay TLS/SSL:
Received fatal alert: handshake_failure
Các nguyên nhân có thể
TLS (Bảo mật tầng truyền tải, tiền thân là SSL) là công nghệ bảo mật tiêu chuẩn cho thiết lập liên kết được mã hoá giữa máy chủ web và ứng dụng web, chẳng hạn như trình duyệt hoặc ứng dụng. Bắt tay là một quy trình cho phép máy khách và máy chủ TLS/SSL thiết lập một tập hợp khoá bí mật các khoá mà chúng có thể giao tiếp. Trong quá trình này, máy khách và máy chủ:
- Đồng ý với phiên bản của giao thức cần sử dụng.
- Chọn thuật toán mật mã sẽ sử dụng.
- Xác thực lẫn nhau bằng cách trao đổi và xác thực chứng chỉ kỹ thuật số.
Nếu bắt tay TLS/SSL thành công thì ứng dụng và máy chủ TLS/SSL sẽ chuyển dữ liệu cho từng
khác một cách an toàn. Ngược lại, nếu xảy ra lỗi bắt tay TLS/SSL, kết nối sẽ bị chấm dứt và ứng dụng
nhận được lỗi 503 Service Unavailable
.
Các nguyên nhân có thể gây ra lỗi bắt tay TLS/SSL là:
Nguyên nhân | Nội dung mô tả | Người có thể thực hiện các bước khắc phục sự cố |
---|---|---|
Giao thức không khớp | Giao thức mà máy khách sử dụng không được máy chủ hỗ trợ. | Người dùng riêng tư và người dùng Cloud công khai |
Bộ mật mã không khớp | Bộ thuật toán mật mã mà máy khách sử dụng không được máy chủ hỗ trợ. | Người dùng riêng tư và người dùng Cloud công khai |
Chứng chỉ không chính xác | Tên máy chủ trong URL được ứng dụng sử dụng không khớp với tên máy chủ trong chứng chỉ được lưu trữ ở phía máy chủ. | Người dùng riêng tư và người dùng Cloud công khai |
Chuỗi chứng chỉ không hoàn chỉnh hoặc không hợp lệ được lưu trữ ở phía máy khách hoặc máy chủ. | Người dùng riêng tư và người dùng Cloud công khai | |
Máy khách gửi chứng chỉ không chính xác hoặc đã hết hạn đến máy chủ hoặc từ máy chủ cho khách hàng. | Người dùng riêng tư và người dùng Cloud công khai | |
Máy chủ hỗ trợ SNI | Máy chủ phụ trợ đang bật tính năng Chỉ báo tên máy chủ (SNI); tuy nhiên, khách hàng không thể giao tiếp với Máy chủ SNI. | Chỉ người dùng Cloud riêng tư |
Giao thức Không khớp
Lỗi bắt tay TLS/SSL xảy ra nếu giao thức được ứng dụng sử dụng không được hỗ trợ bởi máy chủ tại kết nối đến (theo hướng bắc) hoặc đi (hướng về phía nam). Xem thêm Hiểu sự kết nối giữa hướng bắc và hướng nam.
Chẩn đoán
- Xác định xem lỗi xảy ra tại hướng bắc chuẩn hay kết nối hướng về phía nam. Để được hướng dẫn thêm về cách làm xác định, xem Xác định nguồn gốc của vấn đề.
- Chạy
tcpdump để thu thập thêm thông tin:
- Nếu là người dùng Đám mây riêng tư, bạn có thể thu thập
tcpdump
tại máy khách hoặc máy chủ có liên quan. Ứng dụng có thể là ứng dụng khách (đối với ứng dụng khách đến, hoặc các kết nối về hướng bắc) hoặc Thông báo Bộ xử lý (dành cho các kết nối đi hoặc kết nối hướng nam). Máy chủ có thể là Bộ định tuyến Edge (đối với kết nối đến hoặc hướng bắc) hoặc máy chủ phụ trợ (đối với các kết nối đi hoặc về hướng nam) dựa trên quyết định của bạn trong Bước 1. - Nếu là người dùng Cloud Public, bạn có thể thu thập
tcpdump
chỉ dữ liệu trên ứng dụng khách (cho các kết nối đến hoặc hướng bắc) hoặc máy chủ phụ trợ (cho các kết nối đi hoặc về hướng nam) vì bạn có không có quyền truy cập vào Edge Router hoặc Message Processor.
Xem tcpdump để biết thêm thông tin về cách sử dụngtcpdump -i any -s 0 host IP address -w File name
tcpdump
. - Nếu là người dùng Đám mây riêng tư, bạn có thể thu thập
- Phân tích dữ liệu
tcpdump
bằng công cụ Wireshark hoặc một công cụ tương tự. - Dưới đây là phân tích mẫu về
tcpdump bằng Wireshark:
- Trong ví dụ này, lỗi bắt tay TLS/SSL đã xảy ra giữa Trình xử lý thư và máy chủ phụ trợ (kết nối đi hoặc hướng về phía nam).
- Thông báo số 4 trong dữ liệu đầu ra
tcpdump
dưới đây cho biết rằng Trình xử lý thông báo (Nguồn) đã gửi một "Xin chào khách hàng" thông báo đến máy chủ phụ trợ (Đích).
Nếu bạn chọn thông báo
Client Hello
, điều đó cho thấy rằng Trình xử lý thông báo đang sử dụng Giao thức TLSv1.2, như trình bày dưới đây:- Thông báo số 5 cho biết máy chủ phụ trợ xác nhận "Xin chào ứng dụng khách" tin nhắn từ Trình xử lý thư.
- Máy chủ phụ trợ sẽ ngay lập tức gửi Cảnh báo nghiêm trọng : Đóng thông báo đến Trình xử lý tin nhắn (thông báo số 6). Điều này có nghĩa là quá trình bắt tay TLS/SSL không thành công và kết nối sẽ bị đóng.
Xem xét kỹ hơn thông báo số 6 cho thấy nguyên nhân gây ra lỗi bắt tay TLS/SSL là do máy chủ phụ trợ chỉ hỗ trợ giao thức TLSv1.0 như hình dưới đây:
- Do có sự không khớp giữa giao thức do Trình xử lý thông báo sử dụng và máy chủ phụ trợ, máy chủ phụ trợ đã gửi thông báo: Thông báo cảnh báo nghiêm trọng: Đóng Thông báo.
Độ phân giải
Trình xử lý thông báo chạy trên Java 8 và sử dụng giao thức TLSv1.2 theo mặc định. Nếu phần phụ trợ không hỗ trợ TLSv1.2 giao thức, sau đó bạn có thể thực hiện một trong các bước sau đây để giải quyết vấn đề này:
- Nâng cấp máy chủ phụ trợ của bạn để hỗ trợ giao thức TLSv1.2. Đây là một giải pháp được đề xuất vì thì giao thức TLSv1.2 an toàn hơn.
- Nếu vì lý do nào đó mà bạn không thể nâng cấp ngay máy chủ phụ trợ, thì bạn có thể
buộc Bộ xử lý thư sử dụng giao thức TLSv1.0 để giao tiếp
máy chủ phụ trợ bằng cách làm theo các bước sau:
- Nếu bạn không chỉ định máy chủ mục tiêu trong định nghĩa TargetEndpoint của proxy, thì hãy đặt
phần tử
Protocol
sangTLSv1.0
như minh hoạ bên dưới:<TargetEndpoint name="default"> … <HTTPTargetConnection> <SSLInfo> <Enabled>true</Enabled> <Protocols> <Protocol>TLSv1.0</Protocol> </Protocols> </SSLInfo> <URL>https://myservice.com</URL> </HTTPTargetConnection> … </TargetEndpoint>
- Nếu bạn đã định cấu hình một máy chủ đích cho proxy của mình, sau đó hãy sử dụng API quản lý này để đặt giao thức thành TLSv1.0 trong cấu hình máy chủ mục tiêu.
- Nếu bạn không chỉ định máy chủ mục tiêu trong định nghĩa TargetEndpoint của proxy, thì hãy đặt
phần tử
Thuật toán mật mã không khớp
Bạn có thể thấy lỗi bắt tay TLS/SSL nếu thuật toán bộ thuật toán mật mã mà ứng dụng sử dụng không được máy chủ hỗ trợ khi kết nối đến (theo hướng bắc) hoặc đi (đi hướng nam) trong Apigee Edge. Xem thêm Hiểu sự kết nối giữa hướng bắc và hướng nam.
Chẩn đoán
- Xác định xem lỗi có xảy ra tại kết nối theo hướng bắc hoặc hướng về phía nam. Để biết thêm hướng dẫn về cách xác định điều này, hãy xem Xác định nguồn gốc vấn đề.
- Chạy
tcpdump để thu thập thêm thông tin:
- Nếu là người dùng Đám mây riêng tư, bạn có thể thu thập
tcpdump
tại máy khách hoặc máy chủ có liên quan. Ứng dụng có thể là ứng dụng khách (đối với ứng dụng khách đến, hoặc các kết nối về hướng bắc) hoặc Thông báo Bộ xử lý (dành cho các kết nối đi hoặc kết nối hướng nam). Máy chủ có thể là Bộ định tuyến Edge (đối với kết nối đến hoặc hướng bắc) hoặc máy chủ phụ trợ (đối với các kết nối đi hoặc về hướng nam) dựa trên quyết định của bạn trong Bước 1. - Nếu là người dùng Cloud Public, bạn có thể thu thập
tcpdump
chỉ dữ liệu trên ứng dụng khách (cho các kết nối đến hoặc hướng bắc) hoặc máy chủ phụ trợ (cho các kết nối đi hoặc về hướng nam) vì bạn có không có quyền truy cập vào Edge Router hoặc Message Processor.
Xem tcpdump để biết thêm thông tin về cách sử dụng lệnhtcpdump -i any -s 0 host IP address -w File name
tcpdump
. - Nếu là người dùng Đám mây riêng tư, bạn có thể thu thập
- Phân tích dữ liệu
tcpdump
bằng công cụ Wireshark hoặc bất kỳ công cụ nào khác mà bạn quen thuộc. - Dưới đây là bản phân tích mẫu về đầu ra
tcpdump
bằng Wireshark:- Trong ví dụ này, đã xảy ra lỗi Giao thức bắt tay TLS/SSL giữa Ứng dụng khách và
Bộ định tuyến Edge (kết nối hướng bắc). Dữ liệu đầu ra
tcpdump
đã được thu thập trên Edge bộ định tuyến. Thông báo số 4 trong dữ liệu đầu ra
tcpdump
dưới đây cho biết rằng ứng dụng khách (nguồn) đã gửi một "Xin chào khách hàng" nội dung đến Bộ định tuyến cạnh (đích).Chọn thông báo Client Hello cho biết ứng dụng khách đang sử dụng Giao thức TLSv1.2.
- Thông báo số 5 cho biết Bộ định tuyến cạnh xác nhận "Xin chào ứng dụng khách" tin nhắn từ ứng dụng khách.
- Bộ định tuyến Edge gửi ngay một Cảnh báo nghiêm trọng : Lỗi bắt tay tới ứng dụng khách (thông báo số 6). Điều này có nghĩa là quá trình bắt tay TLS/SSL không thành công và kết nối sẽ bị đóng.
- Khi xem xét kỹ thông báo số 6, bạn sẽ thấy những thông tin sau:
- Bộ định tuyến Edge hỗ trợ giao thức TLSv1.2. Điều này có nghĩa là giao thức khớp với giữa ứng dụng khách và Bộ định tuyến Edge.
Tuy nhiên, bộ định tuyến Edge vẫn gửi Cảnh báo nghiêm trọng: Bắt tay Không thể đối với ứng dụng như trong ảnh chụp màn hình dưới đây:
- Lỗi này có thể là do một trong các vấn đề sau:
- Ứng dụng khách không sử dụng các thuật toán bộ thuật toán mật mã được Máy định tuyến cạnh.
- Bộ định tuyến Edge được bật SNI nhưng ứng dụng khách không gửi tên máy chủ.
- Thông báo số 4 trong dữ liệu đầu ra của
tcpdump
liệt kê các thuật toán của bộ thuật toán mật mã mà ứng dụng hỗ trợ ứng dụng, như được hiển thị dưới đây: - Danh sách các thuật toán bộ mật mã được Bộ định tuyến Edge hỗ trợ được liệt kê trong
Tệp
/opt/nginx/conf.d/0-default.conf
. Trong ví dụ này, Edge Router chỉ hỗ trợ các thuật toán của bộ thuật toán mật mã Mã hoá cao. - Ứng dụng khách không sử dụng bất kỳ thuật toán nào trong bộ thuật toán mật mã Mã hoá cao. Sự không khớp này là nguyên nhân dẫn đến Lỗi bắt tay TLS/SSL.
- Vì Bộ định tuyến cạnh được bật SNI, hãy cuộn xuống để thông báo số 4 trong đầu ra
tcpdump
và xác nhận rằng ứng dụng khách đang gửi tên máy chủ chính xác, như được thể hiện trong hình bên dưới:
- Nếu tên này hợp lệ, bạn có thể suy luận rằng lỗi bắt tay TLS/SSL đã xảy ra do thuật toán của bộ mật mã được ứng dụng sử dụng không được hỗ trợ bởi Máy định tuyến cạnh.
- Trong ví dụ này, đã xảy ra lỗi Giao thức bắt tay TLS/SSL giữa Ứng dụng khách và
Bộ định tuyến Edge (kết nối hướng bắc). Dữ liệu đầu ra
Độ phân giải
Bạn phải đảm bảo rằng khách hàng sử dụng các thuật toán bộ thuật toán mật mã được máy chủ hỗ trợ. Để giải quyết vấn đề được mô tả trong phần trước Chẩn đoán, tải xuống và cài đặt Gói Tiện ích mã hoá Java (JCE) và đưa vào gói Java để hỗ trợ các thuật toán của bộ thuật toán mật mã Mã hoá cao.
Chứng chỉ không chính xác
Lỗi bắt tay TLS/SSL xảy ra nếu bạn có chứng chỉ không chính xác trong kho khoá/đáng tin cậy, khi kết nối đến (đi hướng bắc) hoặc đi (đi hướng nam) trong Apigee Edge. Xem thêm Hiểu sự kết nối giữa hướng bắc và hướng nam.
Nếu vấn đề là theo hướng hướng về hướng bắc, thì bạn có thể thấy các thông báo lỗi khác nhau tuỳ thuộc vào nguyên nhân cơ bản.
Các phần sau đây liệt kê các thông báo lỗi mẫu và các bước để chẩn đoán và giải quyết vấn đề này vấn đề.
Thông báo lỗi
Bạn có thể thấy các thông báo lỗi khác nhau tuỳ thuộc vào nguyên nhân gây ra lỗi bắt tay TLS/SSL. Dưới đây là thông báo lỗi mẫu mà bạn có thể thấy khi gọi proxy API:
* SSL certificate problem: Invalid certificate chain * Closing connection 0 curl: (60) SSL certificate problem: Invalid certificate chain More details here: http://curl.haxx.se/docs/sslcerts.html
Các nguyên nhân có thể
Dưới đây là những nguyên nhân điển hình dẫn đến vấn đề này:
Nguyên nhân | Nội dung mô tả | Người có thể thực hiện các bước khắc phục sự cố |
Tên máy chủ không khớp |
Tên máy chủ được sử dụng trong URL và chứng chỉ trong kho khoá của bộ định tuyến không
khớp. Ví dụ: trường hợp không khớp xảy ra nếu tên máy chủ lưu trữ được sử dụng trong URL là myorg.domain.com trong khi
chứng chỉ có tên máy chủ trong CN là CN=something.domain.com.
|
Người dùng Edge riêng tư và Cloud Cloud |
Chứng chỉ không đầy đủ hoặc không chính xác | Chuỗi chứng chỉ chưa hoàn chỉnh hoặc không chính xác. | Chỉ người dùng Edge Private và Public Cloud |
Chứng chỉ đã hết hạn hoặc không xác định do máy chủ hoặc ứng dụng khách | Chứng chỉ đã hết hạn hoặc không xác định được gửi bởi máy chủ hoặc ứng dụng theo hướng bắc hoặc tại đường kết nối hướng nam. | Người dùng Edge Private Cloud và Edge |
Tên máy chủ Không khớp
Chẩn đoán
- Lưu ý tên máy chủ được sử dụng trong URL được lệnh gọi API quản lý Edge sau trả về:
Ví dụ:curl -v https://myorg.domain.com/v1/getinfo
curl -v https://api.enterprise.apigee.com/v1/getinfo
- Lấy CN dùng trong chứng chỉ được lưu trữ trong kho khoá cụ thể. Bạn có thể sử dụng
sau đây là các API quản lý Edge để biết thông tin chi tiết về chứng chỉ:
-
Lấy tên chứng chỉ trong kho khoá:
Nếu bạn là người dùng Đám mây riêng tư, hãy sử dụng API Quản lý như sau:
Nếu bạn là người dùng Cloud Public, hãy sử dụng API Quản lý như sau:curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
-
Lấy thông tin chi tiết về chứng chỉ trong kho khoá bằng API Quản lý Edge.
Nếu bạn là người dùng Đám mây riêng tư:
Nếu bạn là người dùng Đám mây công cộng:curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
Chứng chỉ mẫu::
"certInfo": [ { "basicConstraints": "CA:FALSE", "expiryDate": 1456258950000, "isValid": "No", "issuer": "SERIALNUMBER=07969287, CN=Go Daddy Secure Certification Authority, OU=http://certificates.godaddy.com/repository, O=\"GoDaddy.com, Inc.\", L=Scottsdale, ST=Arizona, C=US", "publicKey": "RSA Public Key, 2048 bits", "serialNumber": "07:bc:a7:39:03:f1:56", "sigAlgName": "SHA1withRSA", "subject": "CN=something.domain.com, OU=Domain Control Validated, O=something.domain.com", "validFrom": 1358287055000, "version": 3 },
Tên đối tượng trong chứng chỉ chính có CN là
something.domain.com.
Do tên máy chủ được sử dụng trong URL yêu cầu API (tham khảo bước#1 ở trên) và chủ đề tên trong chứng chỉ không khớp, thì bạn sẽ gặp lỗi bắt tay TLS/SSL.
-
Lấy tên chứng chỉ trong kho khoá:
Độ phân giải
Bạn có thể giải quyết vấn đề này bằng một trong hai cách sau:
- Lấy chứng chỉ (nếu bạn chưa có chứng chỉ) trong đó tiêu đề CN có ký tự đại diện
chứng chỉ, sau đó tải chuỗi chứng chỉ hoàn chỉnh mới lên kho khoá. Ví dụ:
"subject": "CN=*.domain.com, OU=Domain Control Validated, O=*.domain.com",
- Lấy chứng chỉ (nếu bạn chưa có chứng chỉ) với chủ đề hiện có là CN, nhưng hãy sử dụng your-org.your-domain làm tên thay thế của chủ đề, sau đó tải toàn bộ chuỗi chứng chỉ vào kho khoá.
Tài liệu tham khảo
Chuỗi chứng chỉ chưa hoàn chỉnh hoặc không chính xác
Chẩn đoán
- Lấy CN dùng trong chứng chỉ được lưu trữ trong kho khoá cụ thể. Bạn có thể sử dụng
sau đây là các API quản lý Edge để biết thông tin chi tiết về chứng chỉ:
-
Lấy tên chứng chỉ trong kho khoá:
Nếu bạn là người dùng Đám mây riêng tư:
Nếu bạn là người dùng Đám mây công cộng:curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
-
Lấy thông tin chi tiết về chứng chỉ trong kho khoá:
Nếu bạn là người dùng Đám mây riêng tư:
Nếu bạn là người dùng Đám mây công cộng:curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
- Xác thực chứng chỉ và chuỗi của chứng chỉ cũng như xác minh chứng chỉ tuân thủ theo các nguyên tắc nêu trong bài viết Cách hoạt động của chuỗi chứng chỉ để đảm bảo chuỗi chứng chỉ đó là hợp lệ và hoàn chỉnh chuỗi chứng chỉ. Nếu chuỗi chứng chỉ được lưu trữ trong kho khoá là không hoàn chỉnh hoặc không hợp lệ, thì bạn sẽ thấy giao thức bắt tay TLS/SSL lỗi.
- Hình ảnh dưới đây hiển thị chứng chỉ mẫu có chuỗi chứng chỉ không hợp lệ, trong đó chứng chỉ trung gian và chứng chỉ gốc không khớp với nhau:
Chứng chỉ gốc và trung gian mẫu mà nhà phát hành và tiêu đề không khớp
-
Lấy tên chứng chỉ trong kho khoá:
Độ phân giải
- Lấy chứng chỉ (nếu bạn chưa có chứng chỉ) bao gồm chuỗi chứng chỉ.
- Chạy lệnh openssl sau đây để xác minh rằng chuỗi chứng chỉ là chính xác và
hoàn thành:
openssl verify -CAfile root-cert -untrusted intermediate-cert main-cert
- Tải chuỗi chứng chỉ đã xác thực lên kho khoá.
Đã hết hạn hoặc không xác định chứng chỉ do máy chủ hoặc ứng dụng gửi
Nếu máy chủ/ứng dụng gửi chứng chỉ không chính xác/đã hết hạn theo hướng bắc hoặc tại kết nối hướng nam, sau đó đầu bên kia (máy chủ/máy khách) từ chối chứng chỉ dẫn đến lỗi bắt tay TLS/SSL.
Chẩn đoán
- Xác định xem lỗi xảy ra tại hướng bắc chuẩn hay kết nối hướng về phía nam. Để được hướng dẫn thêm về cách làm xác định, xem Xác định nguồn gốc của vấn đề.
- Chạy
tcpdump để thu thập thêm thông tin:
- Nếu là người dùng Đám mây riêng tư, bạn có thể thu thập
tcpdump
tại máy khách hoặc máy chủ có liên quan. Ứng dụng có thể là ứng dụng khách (đối với ứng dụng khách đến, hoặc các kết nối về hướng bắc) hoặc Thông báo Bộ xử lý (dành cho các kết nối đi hoặc kết nối hướng nam). Máy chủ có thể là Bộ định tuyến Edge (đối với kết nối đến hoặc hướng bắc) hoặc máy chủ phụ trợ (đối với các kết nối đi hoặc về hướng nam) dựa trên quyết định của bạn trong Bước 1. - Nếu là người dùng Cloud Public, bạn có thể thu thập
tcpdump
chỉ dữ liệu trên ứng dụng khách (cho các kết nối đến hoặc hướng bắc) hoặc máy chủ phụ trợ (cho các kết nối đi hoặc về hướng nam) vì bạn có không có quyền truy cập vào Edge Router hoặc Message Processor.
Xem tcpdump để biết thêm thông tin về cách sử dụng lệnhtcpdump -i any -s 0 host IP address -w File name
tcpdump
. - Nếu là người dùng Đám mây riêng tư, bạn có thể thu thập
- Phân tích dữ liệu
tcpdump
bằng Wireshark hoặc công cụ tương tự. - Từ đầu ra
tcpdump
, xác định máy chủ lưu trữ (ứng dụng hoặc máy chủ) đang từ chối chứng chỉ trong bước xác minh. - Bạn có thể truy xuất chứng chỉ được gửi từ đầu bên kia từ đầu ra
tcpdump
, miễn là dữ liệu sẽ không được mã hoá. Điều này sẽ rất hữu ích khi so sánh xem chứng chỉ này có khớp với chứng chỉ có sẵn trong kho tin cậy. - Xem lại
tcpdump
mẫu về hoạt động giao tiếp SSL giữa Trình xử lý thư và máy chủ phụ trợ.Mẫu
tcpdump
cho thấy lỗi Certificate Unknown
- Trình xử lý tin nhắn (máy khách) gửi thông báo "Xin chào ứng dụng" đến máy chủ phụ trợ (máy chủ) trong thông báo số 59.
- Máy chủ phụ trợ gửi "Server Hello" (Xin chào máy chủ) đến Trình xử lý thư trong thư #61.
- Hai thuật toán này xác thực lẫn nhau đối với giao thức và thuật toán bộ thuật toán mật mã được sử dụng.
- Máy chủ phụ trợ gửi thông báo Chứng chỉ và thông báo Hello Done (Xong) của máy chủ cho Bộ xử lý tin nhắn trong tin nhắn số 68.
- Bộ xử lý tin nhắn gửi Cảnh báo nghiêm trọng "Description: Certificate Không xác định" trong thông báo số 70.
- Khi xem xét kỹ thông báo số 70, không có thông tin chi tiết nào khác
so với thông báo cảnh báo như được hiển thị dưới đây:
- Xem lại thông báo số 68 để biết thông tin chi tiết về chứng chỉ mà phần phụ trợ gửi máy chủ, như được thể hiện trong hình sau:
- Chứng chỉ của máy chủ phụ trợ và chuỗi đầy đủ của máy chủ phụ trợ đều có sẵn trong trường "Certificates" (Chứng chỉ) như minh hoạ trong hình trên.
- Nếu Bộ định tuyến (hướng bắc) hoặc bộ định tuyến không xác định được chứng chỉ
Bộ xử lý thư (theo hướng nam) như trong ví dụ minh hoạ ở trên, sau đó đi theo các
các bước:
- Lấy chứng chỉ và chuỗi của chứng chỉ được lưu trữ trong kho tin cậy cụ thể. (Tham khảo
đối với cấu hình máy chủ ảo cho Bộ định tuyến và cấu hình điểm cuối đích cho
Trình xử lý thư). Bạn có thể sử dụng các API sau để lấy thông tin chi tiết về
chứng chỉ:
-
Lấy tên chứng chỉ trong kho tin cậy:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/truststore-name/certs
-
Lấy thông tin chi tiết về chứng chỉ trong kho tin cậy:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/truststore-name/certs/cert-name
-
Lấy tên chứng chỉ trong kho tin cậy:
- Kiểm tra xem chứng chỉ có được lưu trữ trong kho tin cậy của Bộ định tuyến (hướng hướng bắc) hay không
Trình xử lý thư (hướng về phía nam) khớp với chứng chỉ được lưu trữ trong
kho khoá của ứng dụng khách (hướng hướng bắc) hoặc máy chủ mục tiêu (hướng về phía nam) hoặc
giá trị nhận được từ dữ liệu đầu ra
tcpdump
. Nếu thông tin không khớp, thì đó là nguyên nhân dẫn đến lỗi bắt tay TLS/SSL.
- Lấy chứng chỉ và chuỗi của chứng chỉ được lưu trữ trong kho tin cậy cụ thể. (Tham khảo
đối với cấu hình máy chủ ảo cho Bộ định tuyến và cấu hình điểm cuối đích cho
Trình xử lý thư). Bạn có thể sử dụng các API sau để lấy thông tin chi tiết về
chứng chỉ:
- Nếu ứng dụng khách (theo hướng bắc) phát hiện thấy chứng chỉ không xác định
hoặc máy chủ mục tiêu (hướng về phía nam), sau đó làm theo các bước sau:
- Lấy chuỗi chứng chỉ hoàn chỉnh dùng trong chứng chỉ được lưu trữ trong
kho khoá. (Tham khảo cấu hình máy chủ ảo của Bộ định tuyến và điểm cuối đích
cho Trình xử lý thư.) Bạn có thể sử dụng các API sau để lấy
thông tin chi tiết của chứng chỉ:
-
Lấy tên chứng chỉ trong kho khoá:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
-
Lấy thông tin chi tiết về chứng chỉ trong kho khoá:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
-
Lấy tên chứng chỉ trong kho khoá:
- Kiểm tra xem chứng chỉ được lưu trữ trong kho khoá của Bộ định tuyến (theo hướng bắc) hay
Trình xử lý thư (hướng về phía nam) khớp với chứng chỉ được lưu trữ trong kho tin cậy của
ứng dụng khách (theo hướng bắc) hoặc máy chủ mục tiêu (hướng về phía nam) hoặc một máy chủ
lấy từ dữ liệu đầu ra
tcpdump
. Nếu thông tin không khớp, thì đó là nguyên nhân gây ra lỗi SSL không bắt tay được.
- Lấy chuỗi chứng chỉ hoàn chỉnh dùng trong chứng chỉ được lưu trữ trong
kho khoá. (Tham khảo cấu hình máy chủ ảo của Bộ định tuyến và điểm cuối đích
cho Trình xử lý thư.) Bạn có thể sử dụng các API sau để lấy
thông tin chi tiết của chứng chỉ:
- Nếu chứng chỉ do máy chủ/ứng dụng gửi đi được phát hiện là đã hết hạn thì trình nhận
máy khách/máy chủ từ chối chứng chỉ và bạn thấy thông báo cảnh báo sau trong
tcpdump
:Cảnh báo (Cấp độ: Nghiêm trọng, Nội dung mô tả: Chứng chỉ đã hết hạn)
- Xác minh rằng chứng chỉ trong kho khoá của máy chủ lưu trữ thích hợp đã hết hạn.
Độ phân giải
Để giải quyết vấn đề đã xác định trong ví dụ trên, hãy tải tệp chứng chỉ cho trustore trên Bộ xử lý thư.
Bảng sau đây tóm tắt các bước giải quyết vấn đề tuỳ thuộc vào nguyên nhân vấn đề.
Nguyên nhân | Nội dung mô tả | Độ phân giải |
Chứng chỉ đã hết hạn |
NorthBound
|
Tải chứng chỉ mới và chuỗi hoàn chỉnh của chứng chỉ lên kho khoá trên máy chủ lưu trữ. |
SouthBound
|
Tải chứng chỉ mới và chuỗi hoàn chỉnh của chứng chỉ lên kho khoá trên máy chủ lưu trữ. | |
Chứng chỉ không xác định |
NorthBound
|
Tải chứng chỉ hợp lệ lên kho tin cậy trên máy chủ lưu trữ phù hợp. |
SouthBound
|
Tải chứng chỉ hợp lệ lên kho tin cậy trên máy chủ lưu trữ phù hợp. |
Đã bật SNI Máy chủ
Lỗi bắt tay TLS/SSL có thể xảy ra khi máy khách đang giao tiếp với Máy chủ Đã bật chỉ báo tên (SNI) Máy chủ nhưng ứng dụng khách chưa được bật SNI. Điều này có thể xảy ra tại hướng bắc hoặc kết nối theo hướng nam trong Edge.
Trước tiên, bạn cần xác định tên máy chủ và số cổng của máy chủ đang được sử dụng và kiểm tra xem nó có được bật SNI hay không.
Xác định máy chủ đã bật SNI
- Thực thi lệnh
openssl
và cố gắng kết nối với tên máy chủ có liên quan (Edge Bộ định tuyến hoặc máy chủ phụ trợ) mà không truyền tên máy chủ, như minh hoạ dưới đây: Bạn có thể nhận được chứng chỉ và đôi khi có thể thấy lỗi bắt tay trong lệnh openssl, như được hiển thị dưới đây:openssl s_client -connect hostname:port
CONNECTED(00000003) 9362:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.6/src/ssl/s23_clnt.c:593
- Thực thi lệnh
openssl
và cố gắng kết nối với tên máy chủ có liên quan (Bộ định tuyến cạnh hoặc máy chủ phụ trợ) bằng cách chuyển tên máy chủ như minh hoạ dưới đây:openssl s_client -connect hostname:port -servername hostname
- Nếu bạn gặp lỗi bắt tay ở bước 1 hoặc nhận các chứng chỉ khác nhau ở bước 1 và bước 2, thì nó chỉ ra rằng Máy chủ được chỉ định đã được bật SNI.
Sau khi xác định rằng máy chủ đã được bật SNI, bạn có thể làm theo các bước bên dưới để kiểm tra xem lỗi bắt tay TLS/SSL có phải do ứng dụng không thể giao tiếp hay không máy chủ SNI.
Chẩn đoán
- Xác định xem lỗi xảy ra tại hướng bắc chuẩn hay kết nối hướng về phía nam. Để được hướng dẫn thêm về cách làm xác định, xem Xác định nguồn gốc của vấn đề.
- Chạy
tcpdump để thu thập thêm thông tin:
- Nếu là người dùng Đám mây riêng tư, bạn có thể thu thập
tcpdump
tại máy khách hoặc máy chủ có liên quan. Ứng dụng có thể là ứng dụng khách (đối với ứng dụng khách đến, hoặc các kết nối về hướng bắc) hoặc Thông báo Bộ xử lý (dành cho các kết nối đi hoặc kết nối hướng nam). Máy chủ có thể là Bộ định tuyến Edge (đối với kết nối đến hoặc hướng bắc) hoặc máy chủ phụ trợ (đối với các kết nối đi hoặc về hướng nam) dựa trên quyết định của bạn trong Bước 1. - Nếu là người dùng Cloud Public, bạn có thể thu thập
tcpdump
chỉ dữ liệu trên ứng dụng khách (cho các kết nối đến hoặc hướng bắc) hoặc máy chủ phụ trợ (cho các kết nối đi hoặc về hướng nam) vì bạn có không có quyền truy cập vào Edge Router hoặc Message Processor.
Xem tcpdump để biết thêm thông tin về cách sử dụng lệnhtcpdump -i any -s 0 host IP address -w File name
tcpdump
. - Nếu là người dùng Đám mây riêng tư, bạn có thể thu thập
- Phân tích dữ liệu đầu ra
tcpdump
bằng Wireshark hoặc công cụ tương tự. - Dưới đây là bản phân tích mẫu về
tcpdump
bằng Wireshark:- Trong ví dụ này, lỗi bắt tay TLS/SSL đã xảy ra giữa Thông báo Edge Bộ xử lý và máy chủ phụ trợ (kết nối theo hướng nam).
- Thông báo số 4 trong dữ liệu đầu ra
tcpdump
dưới đây cho biết rằng Trình xử lý thông báo (nguồn) đã gửi "Xin chào khách hàng" thông báo đến máy chủ phụ trợ (đích). - Chọn "Xin chào khách hàng" Thông báo cho biết Thông báo Bộ xử lý đang sử dụng giao thức TLSv1.2.
- Thông báo số 4 cho biết máy chủ phụ trợ xác nhận "Xin chào ứng dụng" tin nhắn từ Trình xử lý tin nhắn.
- Máy chủ phụ trợ ngay lập tức gửi Cảnh báo nghiêm trọng : Bắt tay Lỗi với Trình xử lý thư (thông báo số 5). Điều này có nghĩa là cơ chế bắt tay TLS/SSL không thành công và kết nối sẽ bị đóng.
- Xem lại thông báo số 6 để khám phá thông tin sau
- Máy chủ phụ trợ có hỗ trợ giao thức TLSv1.2. Điều này có nghĩa là giao thức được so khớp giữa Trình xử lý thông báo và máy chủ phụ trợ.
- Tuy nhiên, máy chủ phụ trợ vẫn gửi Cảnh báo nghiêm trọng: Bắt tay Lỗi đối với Trình xử lý thư như minh hoạ trong hình dưới đây:
- Lỗi này có thể xảy ra vì một trong những lý do sau:
- Trình xử lý thư không sử dụng các thuật toán bộ thuật toán mật mã được hỗ trợ bởi máy chủ phụ trợ.
- Máy chủ phụ trợ đã được bật SNI nhưng ứng dụng khách không gửi tên máy chủ.
- Xem lại thông báo số 3 (Xin chào ứng dụng) trong dữ liệu đầu ra
tcpdump
để biết thêm thông tin chi tiết. Lưu ý rằng Tiện ích server_name bị thiếu, như minh hoạ dưới đây: - Điều này xác nhận rằng Trình xử lý thư đã không gửi server_name đến máy chủ phụ trợ đã bật SNI.
- Đây là nguyên nhân gây ra lỗi bắt tay TLS/SSL và lý do chương trình phụ trợ máy chủ gửi Cảnh báo nghiêm trọng: Lỗi bắt tay đến Thông báo Bộ xử lý.
- Xác minh rằng
jsse.enableSNIExtension property
trongsystem.properties
được đặt thành false trên Trình xử lý thư để xác nhận rằng Trình xử lý thông báo chưa được bật để giao tiếp với máy chủ đã bật SNI.
Độ phân giải
Cho phép(các) Trình xử lý thư giao tiếp với các máy chủ đã bật SNI bằng cách thực hiện các bước sau:
- Tạo
/opt/apigee/customer/application/message-processor.properties
(nếu chưa có). - Thêm dòng sau vào tệp này:
conf_system_jsse.enableSNIExtension=true
- Đã chỉ định chủ sở hữu của tệp này cho
apigee:apigee
:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Khởi động lại Trình xử lý thư.
/opt/apigee/apigee-service/bin/apigee-service message-processor restart
- Nếu bạn có nhiều Trình xử lý thư, hãy lặp lại các bước từ 1 đến 4 trên tất cả Bộ xử lý tin nhắn.
Nếu bạn không thể xác định nguyên nhân gây ra lỗi Giao thức bắt tay TLS/SSL
và khắc phục vấn đề hoặc bạn cần hỗ trợ thêm, hãy liên hệ với
Hỗ trợ Apigee Edge. Chia sẻ toàn bộ thông tin chi tiết về vấn đề cùng với
dữ liệu đầu ra tcpdump
.