Java密钥库是否可以导入OpenSSL生成的密钥对?
我使用openssl生成一个认证密钥。 这是我的命令:
openssl genrsa -des3 -out enc_key.pem 1024
我导出到cer文件,然后使用java keytool我导入到java密钥库(jks)。
密钥库听起来不错。 我可以从我的Java应用程序加载密钥库。
问题是当客户端连接到服务器时(在这种情况下是FTP服务器,而不是Web服务器,我使用apache mina),发生exception:
javax.net.ssl.SSLHandshakeException:SSL握手失败。 org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:433)位于org.apache.mina.core的org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434) .filterchain.DefaultIoFilterChain.access $ 5(DefaultIoFilterChain.java:429)
…
引起:javax.net.ssl.SSLHandshakeException:在com.sun.net.ssl.ssl.inl.ssl.SSLEngineImpl的com.sun.net.ssl.internal.ssl.Handshaker.checkThrown(未知来源)中没有共同的密码套件来自com.sun.net.ssl.internal.ssl.SSLEngineImpl.writeAppRecord(未知来源)的.checkTaskThrown(未知来源)位于javax.net的com.sun.net.ssl.internal.ssl.SSLEngineImpl.wrap(未知来源) .ssl.SSLEngine.wrap(未知来源)
…
引起:javax.net.ssl.SSLHandshakeException:在com.sun.net.ssl.inl.ssl.SSLEngineImpl的com.sun.net.ssl.internal.ssl.Alerts.getSSLException(未知来源)中没有共同的密码套件.fatal(未知来源)
我想问一些事情:
- 我使用openssl生成的认证密码是什么? 我们怎么知道? 也许通过命令行openssl xxx?
- 我去http://java.sun.com/j2se/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#AppA 。 我把SSL_RSA_xxx设置为启用密码套件,但仍然无法工作(我把SSL_RSA放在SSL,因为SSL使用的是ssl implisit,而genrsa,只是我的意见genrsa生成RSA)。 这是对的吗?
- 有人知道解决方案吗?
- 或者,任何人都知道如何从openssl命令行生成标准密钥库,直到可以在java应用程序中使用(当然使用密码)。 因为我现在可以从openssl和export keystore java生成认证,但我不知道我使用的密码是什么以及我在java应用程序中的使用方式。 注意:如果密钥库直接从java生成,我可以运行。 现在问题是如果java keytool生成的密钥库来自认证,如openssl(和其他可能)。
任何帮助将不胜感激! 谢谢
为什么使用OpenSSL生成密钥对? 为什么不使用keytool
?
genrsa
工具只生成一个私钥。 你是如何创建相应的证书的? 如何将私钥导入Java密钥库? (我问,因为keytool
只能从现有的密钥库导入私钥,而且只能从Java 6开始导入。)
我怀疑您的问题是您的密钥库不包含密钥条目(私钥和相应的证书)。 使用keytool
列出密钥库内容时,有多少条目? 它们是关键条目还是可信条目?
服务器需要访问私钥才能进行身份validation。 要导入私钥,请使用Java 6的增强型keytool
。
使用OpenSSL创建密钥和证书后,使用OpenSSL创建PKCS#12密钥库:
openssl pkcs12 -export -in cert.pem -inkey key.pem > server.p12
然后将此存储转换为Java密钥存储:
keytool -importkeystore -srckeystore server.p12 -destkeystore server.jks -srcstoretype pkcs12
现在在SSL启用服务器中使用server.jks
,其中包含证书和私钥。