Tôi tạo khóa chứng nhận với openssl. Đây là lệnh của tôi:Cửa hàng khóa Java có thể nhập một cặp khóa do OpenSSL tạo ra không?
openssl genrsa -des3 -out enc_key.pem 1024
Tôi xuất thành tệp cer, sau đó với keytool java Tôi nhập vào kho khóa java (jks).
Kho lưu trữ âm thanh tốt. Tôi có thể tải kho khóa từ ứng dụng java của mình.
Vấn đề là khi client kết nối đến máy chủ (Trong trường hợp này là FTP server, không phải máy chủ web, và tôi sử dụng apache mina), ngoại trừ xảy ra:
javax.net.ssl.SSLHandshakeException: SSL handshake failed. at org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:433) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434) at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$5(DefaultIoFilterChain.java:429)
...
Caused by: javax.net.ssl.SSLHandshakeException: no cipher suites in common at com.sun.net.ssl.internal.ssl.Handshaker.checkThrown(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLEngineImpl.checkTaskThrown(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLEngineImpl.writeAppRecord(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLEngineImpl.wrap(Unknown Source) at javax.net.ssl.SSLEngine.wrap(Unknown Source)
...
Caused by: javax.net.ssl.SSLHandshakeException: no cipher suites in common at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLEngineImpl.fatal(Unknown Source)
có một vài điều mà tôi muốn hỏi:
- Mật mã xác nhận mà tôi tạo bằng openssl là gì? Làm thế nào chúng ta có thể biết? có thể bởi dòng lệnh openssl xxx?
- Tôi truy cập http://java.sun.com/j2se/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#AppA. Và tôi đặt SSL_RSA_xxx cho các bộ mã hóa được kích hoạt, nhưng vẫn không thể làm việc (tôi đặt SSL_RSA vì nó là SSL đang sử dụng ssl implisit, và genrsa, chỉ genrsa ý kiến của tôi là tạo RSA). Nó có đúng không?
- Bất kỳ ai biết giải pháp?
- Hoặc, bất kỳ ai biết cách tạo kho khóa chuẩn từ dòng lệnh openssl cho đến khi có thể được sử dụng trong ứng dụng java (tắt khóa học với mật mã). Bởi vì ngay bây giờ tôi có thể tạo ra các chứng nhận từ openssl và xuất khẩu keystore java, nhưng tôi không biết mật mã mà tôi đã sử dụng là gì và cách tôi sử dụng trong ứng dụng java. Lưu ý: Tôi có thể chạy nếu kho khóa được tạo trực tiếp từ java. Ngay bây giờ vấn đề là nếu keystore được tạo ra bởi keytool java từ chứng nhận như openssl (và có thể khác).
Mọi trợ giúp sẽ được đánh giá cao! Cảm ơn
Về cơ bản, tôi có thể chạy ứng dụng (xem điểm câu hỏi của tôi 4) với kho khóa được tạo bởi keytool java (vâng, như bạn đã nói, chính xác, tôi đã làm). Nó hoạt động tốt nếu tôi tạo keystore trực tiếp (jks) từ keytool java sau đó ứng dụng của tôi (máy chủ FTPS) chỉ sử dụng keystore đó. Không vấn đề gì với điều đó. Câu hỏi của bạn tại sao tôi sử dụng OpenSSL để tạo ra cặp khóa là vì hiện tại khách hàng có giấy chứng nhận giấy phép (verisign) vì vậy tôi phải kiểm tra bằng openssl trước. Btw, keytool có thể nhập từ cert x509 (bằng cách thực hiện lệnh: openssl req -x509 -key key.pem -in req.pem -out cert.pem -days 365) – Jef
Tiếp tục từ trên Tôi đã nhập khóa được tạo bởi openssl để java keystore (jks) và ứng dụng java cho biết keystore đã hợp lệ (tôi thử khóa khác, java có thể xác minh keystore hợp lệ của nó hay không). Vấn đề là khi tôi chạy ứng dụng thông qua kho khóa (được tạo bởi java keytool import từ cert openssl), ứng dụng sẽ ném ngoại lệ lên trên. Kho lưu trữ khóa chứa mục nhập khóa (nó hoạt động trong httpd ssl), khi tôi thực hiện danh sách keytool, mục nhập đã được tin cậy. Tôi thực hiện lệnh này: keytool -import -v -trustcacerts -alias máy chủ-bí danh -file cert.pem -keystore cacerts.jks -keypass x -storepass x – Jef
@Jef - * Không, * không đúng, hoặc chương trình của bạn sẽ hoạt động; chỉ vì kho khóa của bạn có định dạng * hợp lệ * không có nghĩa là * chứa * thông tin cần thiết để xác thực máy chủ. Đặc biệt, tuyên bố của bạn, "khi tôi làm một danh sách keytool, mục nhập đã được tin cậy," làm cho nó âm thanh như đó là một mục tin cậy, không phải là một mục nhập quan trọng. ** Một mục tin cậy sẽ không hoạt động - không có khóa riêng. ** Áp dụng một số lý do đơn giản: bạn có bao giờ cung cấp 'keytool' một tệp chứa khóa riêng không? Làm thế nào để bạn mong đợi để thực hiện xác thực máy chủ mà không làm cho khóa riêng có sẵn? – erickson