【问题标题】:Self signed Root CA doesn't work with Java自签名根 CA 不适用于 Java
【发布时间】:2016-06-21 04:42:08
【问题描述】:

我不认为这与this one 之类的问题重复,因为证书是由 java 识别的。

出于测试目的,我生成了自己的根 CA 和这样的证书:

自己的根 CA -> 中间 CA -> 我的证书

我用它创建了一个密钥库,并成功地在我的 java 服务器中使用该密钥库来提供加密内容(在 Eclipse 应用程序中使用 Jetty)。我可以使用 SSL 和 Firefox(添加中间 CA 之后)调用我的 rest-api,一切正常。

但是,我不能从另一个 Java 应用程序(使用 javax.ws.rs)调用我的 Rest-API,因为证书链似乎是错误的。

javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

如果我检查异常详细信息,我可以看到,SunCertPathBuilderException 包含我的 Client-Certificate 和 Intermediate CA-Certificate,但不包含 Root-CA-Certificate(在字段 adjList 中)。

为什么应用程序找不到根 CA?我想这就是问题所在,但 Root-CA 在密钥库中,我为服务器使用相同的密钥库,所以我知道它应该是正确的。

【问题讨论】:

    标签: java ssl


    【解决方案1】:

    客户端需要指定trustStore而不是keyStore,例如:

        Path trustStorePath = ...;
        System.setProperty("javax.net.ssl.trustStore", trustStorePath.toString());
        System.setProperty("javax.net.ssl.trustStorePassword", "<some password>");
    

    您可以使用以下系统属性来获取有关您的 SSL 配置的更多信息:

       System.setProperty("javax.net.debug", "ssl");
    

    【讨论】:

    • 谢谢。最后,这不是真正的问题(Eclipse 忽略了 wildfly 设置),但我觉得你的答案是绝对正确的。 (事实上​​它帮助了我,因为我注意到调试输出丢失了)
    猜你喜欢
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多