Java 密钥库是否可以导入由 OpenSSL 生成的密钥对?
我使用openssl生成一个认证密钥。这是我的命令:
openssl genrsa -des3 -out enc_key.pem 1024
我导出到 cer 文件中,然后使用 java keytool 导入到 java keystore (jks) 中。
密钥库听起来不错。我可以从我的 Java 应用程序加载密钥库。
问题是当客户端连接到服务器(在这种情况下是FTP服务器,而不是Web服务器,我使用apache mina)时,发生了异常:
javax.net.ssl.SSLHandshakeException: SSL 握手失败。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.ssl.sslEngineImpl.checkTaskThrown(Unknown Source) at com.sun.net.ssl.ssl.internal.sslEngineImpl.writeAppRecord(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLEngineImpl.wrap(Unknown Source) at javax.net.sslEngine.wrap(Unknown Source)
...
Caused: javax.net.ssl.SSLHandshakeException: no cipher suite in common at com.sun.net.ssl.internal.ssl.ssl.alerts.getSSLException(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLEngineImpl.fatal(Unknown Source)
我想问几件事:
- 我使用 openssl 生成的认证密码是什么?我们怎么知道?也许通过命令行打开sl xxx?
- 我去 http://java.sun.com/j2se/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#AppA。我把SSL_RSA_xxx放在启用的密码套件中,但仍然无法工作(我放SSL_RSA因为它SSL正在使用ssl implisit,而genrsa,只是我的观点genrsa是生成RSA)。这是正确的吗?
- 有人知道解决方案吗?
- 或者,任何人都知道如何从openssl命令行生成标准密钥库,直到可以在java应用程序中使用(当然与密码无关)。因为现在我可以从 openssl 生成认证并导出密钥库 java,但我不知道我使用的密码是什么,以及我在 java 应用程序中如何使用。注意:如果密钥库是直接从 java 生成的,我可以运行。现在的问题是,如果java keytool从认证中生成的密钥库,如openssl(以及其他可能)。
任何帮助将不胜感激!谢谢