gpt4 book ai didi

java - 自签名根 CA 不适用于 Java

转载 作者:太空宇宙 更新时间:2023-11-03 14:08:37 24 4
gpt4 key购买 nike

我不认为这是像 this one 这样的问题的重复因为证书可以被 java 识别。

出于测试目的,我生成了自己的根 CA 和证书,如下所示:

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

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

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

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

如果我检查异常详细信息,我可以看到,SunCertPathBuilderException 包含我的客户端证书和中间 CA 证书,但不包含根 CA 证书(在 adjList 字段中) .

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

最佳答案

客户端需要指定 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");

关于java - 自签名根 CA 不适用于 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35847004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com