2012-03-03 24 views
6

Thực hiện theo các hướng dẫn here và các chứng chỉ được tạo lại mà trước đây tôi đã tạo không chính xác. Một cái gì đó đã thay đổi khi tôi đang thấy javax.net.ssl.SSLHandshakeException: no cipher suites in common trên máy chủ và javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure trên máy khách. Thay vì các lỗi this questionSSLHandshakeException: không có bộ mã hóa nào trong chung

Máy chủ là ClassFileServer.java và khách hàng tương ứng

Bất kỳ lời khuyên về việc hai đầu để chơi độc đáo, lưu ý rằng tôi sử dụng localhost vì vậy tôi sẽ giả định khả năng mật mã đều giống nhau.


Cập nhật:

Dưới đây là các bước tôi đã sử dụng để tạo ra các tập tin, tôi có thể bị nhầm lẫn phím và truststore .:

Trên máy chủ (sau đây bằng cách this hướng dẫn) :

$ keytool -genkey -alias serverkey -keyalg RSA -keypass [email protected] -storepass [email protected] -keystore keystore.jks

$ keytool -export -alias serverkey -storepass [email protected] -file server.cer -keystore keystore.jks

$ keytool -import -v -trustcacerts -alias clientkey -file ../client/client.cer -keystore cacerts.jks -keypass [email protected] -storepass [email protected]

Trên client-side (bởi this hướng dẫn):

$ keytool -genkey -alias clientkey -keyalg RSA -keypass changeit -storepass changeit -keystore keystore.jks

$ keytool -export -alias clientkey -storepass changeit -file client.cer -keystore keystore.jks

$ keytool -import -v -trustcacerts -alias serverkey -file ../server/server.cer -keystore cacerts.jks -keypass changeit -storepass changeit

Đã phải sử dụng phương tiện khác như gỡ lỗi vượt quá cơ giới hạn của trang web này:

Lỗi máy khách debug:http://pastebin.com/mHCmEqAk

Lỗi máy chủ debug:http://pastebin.com/YZbh7H8f

Trả lời

4
javax.net.ssl.SSLHandshakeException: no cipher suites in common 

này có hai nguyên nhân:

  1. Máy chủ không có một khóa riêng và chứng chỉ, và có thể không có kho khóa nào cả. Trong trường hợp như vậy, nó chỉ có thể sử dụng các bộ mã hóa ẩn danh không an toàn, được tắt theo mặc định và phải theo cách đó. Vì vậy, không có bộ mã hóa nào mà nó có thể đồng ý sử dụng với máy khách.

  2. Hạn chế quá mức đối với các bộ mã hóa do khách hàng hoặc máy chủ áp đặt hoặc cả hai đều không có thỏa thuận.

Nhập các kho khóa và kho lưu trữ của bạn, tất cả đều OK, ngoại trừ việc bạn đang thực hiện bốn bước nhập mà bạn chỉ cần hai bước. Bạn không cần phải nhập chứng chỉ của máy chủ vào kho tin cậy của máy chủ, hoặc chứng chỉ của máy khách vào kho ủy thác của máy khách.Bạn chỉ cần điều này:

Server:

$ keytool -import -v -trustcacerts -alias clientkey -file ../client/client.cer -keystore cacerts.jks -keypass [email protected] -storepass [email protected] 

Chủ đầu tư:

$ keytool -import -v -trustcacerts -alias serverkey -file ../server/server.cer -keystore cacerts.jks -keypass changeit -storepass changeit 

và bạn chỉ cần nó vì bạn đang sử dụng một chứng chỉ tự ký. Giải pháp đơn giản: không. Sử dụng chứng chỉ được ký CA, được chứng nhận bởi truststore mặc định được gửi kèm với Java.

+0

tôi loại bỏ các không liên quan mục nhập và tôi vẫn nhận được lỗi tương tự. Tôi đã thử nhập các chứng chỉ tương ứng vào kho khóa trên mỗi nhận xét tại đây: http://stackoverflow.com/questions/9547980/unable-to-find-valid-certification-path-to-requested-target-and-certificate-unkn# comment12099962_9547980. Tôi vẫn có thể gây nhầm lẫn với sự tin tưởng và keystores. Ngoài ra, xin lưu ý đây là những chứng chỉ tự ký. – Astron

+1

@Astron (1) bạn đã thay đổi dòng mã 'ks.load (new FileInputStream ("testkeys"), cụm mật khẩu)' để tải các keystores tương ứng thay vì 'testkeys', và (2) bạn có thể chạy máy khách với - Djavax.net.debug = ssl, bắt tay và chỉnh sửa kết quả vào bài đăng của bạn. – EJP

+1

TrustStore cần phải được chỉ định cho máy khách/máy chủ vì chúng đang sử dụng trustStore mặc định, gây ra lỗi. Sử dụng -Djavax.net.ssl.trustStore =/home/share/samples/sockets/client/cacerts.jks -Djavax.net.ssl.trustStorePassword = thay đổi trên máy khách và mã tương ứng tương ứng cho máy chủ cho phép phiên hoàn thành. Kỳ lạ là ứng dụng hỗ trợ xác thực ứng dụng khách nhưng không có điều khoản trustStore trong mã máy khách/máy chủ. Cảm ơn thông tin gỡ lỗi đã giúp ích rất nhiều! Thêm khuyến nghị gỡ lỗi để bạn trả lời. – Astron

2

Tôi gặp lỗi này khi thiết lập SSL trên cụm Cassandra. Vấn đề hóa ra là trong tài liệu của version 2.0 khi mô tả việc tạo ra các phím:

keytool -genkey -alias -keystore .keystore

Nó bỏ qua các đặc điểm kỹ thuật của RSA như các thuật toán, nên (see v1.2 docs):

keytool -genkey -alias -keyalg RSA -keystore .keystore

Các vấn đề liên quan