当前位置: 首页 > 面试题库 >

Java密钥存储区可以导入OpenSSL生成的密钥对吗?

赫连冠玉
2023-03-14
问题内容

我使用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握手失败。在org.apache.mina.core处在org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)处在org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:433)
.filterchain.DefaultIoFilterChain.access $ 5(DefaultIoFilterChain.java:429)

引起原因:javax.net.ssl.SSLHandshakeException:com.sun.net.ssl.internal.ssl.Handshaker.checkThrown(没有已知密码)在com.sun.net.ssl.internal.ssl.SSLEngineImpl中没有通用的密码套件com.sun.net.ssl.internal.ssl的.checkTaskThrown(未知源),javax.net的com.sun.net.ssl.internal.ssl.SSLEngineImpl.wrap(未知源)的SSLEngineImpl.writeAppRecord(未知源)
.ssl.SSLEngine.wrap(未知来源)

造成原因:javax.net.ssl.SSLHandshakeException:com.sun.net.ssl.internal.ssl.Alerts.getSSLException(在com.sun.net.ssl.internal.ssl.SSLEngineImpl上没有通用的密码套件)
.fatal(来源不明)

我想问几件事:

  1. 我使用openssl生成的认证密码是什么?我们怎么知道 也许通过命令行openssl xxx?
  2. 我去http://java.sun.com/j2se/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#AppA。我将SSL_RSA_xxx放入启用的密码套件中,但仍然无法正常工作(我放SSL_RSA是因为它使用的是SSL隐含的ssl和genrsa,我认为genrsa是生成RSA)。这是正确的吗?
  3. 有人知道解决方案吗?
  4. 或者,任何人都知道如何从openssl命令行生成标准密钥库,直到可以在Java应用程序中使用(当然不使用密码)。因为现在我可以从openssl生成证书并导出java的密钥库,但是我不知道我使用的密码是什么以及如何在java应用程序中使用密码。注意:如果密钥库是直接从java生成的,则可以运行。现在的问题是,是否由java keytool由openssl之类的证书(可能还有其他)生成的密钥库。

任何帮助将不胜感激!谢谢


问题答案:

为什么要使用OpenSSL生成密钥对?为什么不只是使用keytool

genrsa工具仅生成一个私钥。您如何创建相应的证书?您如何将私钥导入到Java密钥库中?(我问,因为keytool只能从现有的密钥存储区导入私有密钥,并且只能从Java
6开始。)

我怀疑您的问题是您的密钥存储区不包含密钥条目(私钥
相应的证书)。当您使用列出密钥库内容时keytool,有多少个条目?它们是密钥条目还是可信条目?

服务器需要访问私钥才能对其进行身份验证。要导入私钥,请使用 Java 6的 Enhanced 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

现在,server.jks在包含证书 私钥的启用SSL的服务器中使用。



 类似资料:
  • keytool-importkeystore-srckeystore newks.p12-srcstoreType pkcs12-srcstorePass pass-destkeystore exportedjks.jks-deststoreType jks-deststorePass pass 但我会收到以下错误消息: keytool错误:java.Security.UnrecoverableK

  • 编辑:没有必要的变通方法。使用上述代码可以将外部生成的密钥导入到Android Keystore中。

  • 在许多情况下,安全软件涉及(桌面)应用程序和web界面之间的交互。对于(RSA)非对称加密,我们使用OpenSSL的C库(目前版本为1.0.2d)和OpenSSL PHP库。 所有标准的东西: 私有加密(C)数据和公共解密(PHP) 公共加密(C)数据和私有解密(PHP) 作品还有另一种方法:PHP- 此外,使用PHP生成加密的私钥,并使用C/C解密该密钥也可以。但不是相反:我想用PHP解密一个用

  • 我正在尝试创建一个公钥以允许我推送到Git,但我的. ssh文件夹尚未创建。 以下是我运行的命令: $ssh-keygen-t rsa-Cemaill@me.com 生成公共/私有rsa密钥对 输入保存密钥的文件(/h/.ssh/id\u rsa): 这就是H:驱动器配置、数据、配置文件、配置文件中的全部内容。V2 我认为有一个问题,因为当我得到提示输入文件,其中保存密钥(/h//. ssh/id

  • 如何使用OpenSSL支持的格式在Java中生成RSA密钥对? 有没有办法像我们在php中那样直接生成它们? 输出应该如下所示: 非常感谢。

  • 2)生成CA证书请求 3)生成自签有效期-10年 4)使用KeyStoreExplorer这样的程序将密钥对(私钥和自签名证书)导入到新的JKS中