【问题标题】:Importing cert and pkey to jks file将 cert 和 pkey 导入 jks 文件
【发布时间】:2016-07-21 23:34:29
【问题描述】:

我们有一个使用 openssl 的应用程序1,并且有一个客户端能够连接的 pkey 和证书文件 (RSA)(握手完成)。

我们有另一个应用程序2,它不使用openssl,而是使用Java keytool 和jks 文件。客户端无法连接到此应用程序(协商失败)。我们认为原因与客户端需要与 application1 的 pkey 和 cert 协商这一事实有关,因此我们将它们添加到 jks 文件中(使用此处的过程http://blog.jgc.org/2011/06/importing-existing-ssl-keycertificate.html)。 - 也许我们应该将其拆分为两个条目 - 一个在信任文件中,一个在密钥库文件中。 现在application2(使用Grizzly框架)启动失败,出现以下异常:java.lang.IllegalStateException: KeyManagerFactoryImpl is not initialized。 我们使用的是 jdk1.7。

有人可以帮忙吗? 非常感谢

【问题讨论】:

  • 客户端是否使用私钥向服务器验证自己?或者私钥是否属于服务器? application1 与什么有什么关系?这只是混淆了这个问题。清楚地描述问题,没有多余的信息。

标签: ssl openssl keytool grizzly jks


【解决方案1】:

我在 Java 7 上使用 Grizzly 时遇到了同样的错误。

我使用SSLContextConfigurator 来设置我的 SSL 配置:

SSLContextConfigurator sslContext= new SSLContextConfigurator();

您可以指定许多属性,其中之一是密钥管理器工厂算法。现在,如果您不指定它,则选择默认值,在我的情况下为 SunX509。这个实现在我的类路径中可用,但是我得到了这个异常。

我的想法:指定一个替代方案!

sslContext.setKeyManagerFactoryAlgorithm("X509");

X509 在 Java 7 中也可用。

我尝试通过显式设置 SunX509KeyManagerFactory.getDefaultAlgorithm() 进行尝试,但它失败了,所以我认为这是正确的解决方案。

事实上,在某种程度上。进行此更改后,错误消失了,但由于不相关的问题,特别是密钥库和证书密码设置不正确,我的 SSL 设置仍然无法正常工作。

修复这些密码问题后,我的设置再次生效,无需指定特定的替代管理员,默认设置即可。

总结一下:如果您的 SSL 配置都很好,那么您不需要覆盖默认的 KeyManagerFactoryAlgorithm

【讨论】:

    猜你喜欢
    • 2015-01-04
    • 2023-02-06
    • 2017-02-01
    • 2016-10-02
    • 1970-01-01
    • 2015-04-05
    • 2011-01-29
    • 2011-12-10
    • 2016-01-19
    相关资源
    最近更新 更多