【问题标题】:Use certificate for HTTPS request in Java在 Java 中使用证书进行 HTTPS 请求
【发布时间】:2018-11-08 22:36:35
【问题描述】:

我想通过 Java 中的 HTTPS 连接调用一些 Web 服务。证书颁发机构给了我一个 PKCS12 文件,但我得到了一个

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

由于

javax.net.ssl.SSLHandshakeException

这是我正在执行的代码:

System.setProperty("javax.net.ssl.keyStoreType", "JKS");
System.setProperty("javax.net.ssl.keyStore", "path/toto2.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "pwd");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "path/toto2.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "pwd");
System.setProperty("proxySet","true") ;
System.setProperty("https.proxyHost", "XXX") ;
System.setProperty("https.proxyPort", "XXX") ;

我首先尝试提供 PKCS12 文件,然后是 JKS,但我遇到了同样的错误。

我尝试了另一种解决方案,使用 curl。所以我从 PKCS12 中提取了证书,请求成功。

以下是我用来从 P12 中提取不同文件的命令:

openssl pkcs12 -in file.p12 -nocerts -nodes -out clientcert.key
openssl pkcs12 -in file.p12 -clcerts -nokeys -out clientcert.cer
openssl pkcs12 -in file.p12 -cacerts -nokeys -chain -out cacerts.cer

我在 Java 中使用这些文件的方式有问题吗?

【问题讨论】:

    标签: java ssl https pkcs#12


    【解决方案1】:

    PKCS12 通常包含私钥和证书(链)组合,用于验证您的系统,即客户端,这是通过javax.net.ssl.keyStore* 属性完成的。您应该指定类型 PKCS12,尽管某些 Java8 版本(仅限!)在您指定 JKS 时可以读取 PKCS12。

    它通常不对服务器进行身份验证,这是javax.net.ssl.trustStore* 的用途,所以不要在那里使用它。根据服务器的不同,您可能需要也可能不需要不同于 P12 并且也不同于 Java 的默认值的自定义信任库。 使用浏览器或其他工具(如 curlkeytool -printcert -sslserver host[:port])查看服务器使用的证书链 并确定它是否使用公共根 CA,例如 Verisign-now-Symantec-now-Digicert 或 GoDaddy,它们已经在 J​​ava 的默认信任库中,或者“私有”CA 甚至自签名证书,在这种情况下,您应该要么将该证书添加到默认信任库,或者如果您不能或不想修改您的 JVM,则将该证书放入您用作信任库的密钥库文件中。

    PS:ValidatorException 导致SSLHandshakeException 不是相反的。

    【讨论】:

    • 非常感谢您的解释。我通过将 CA 放入 Java 的默认信任库来解决信任库问题。但是,当我打印 ssl 调试时,我仍然得到同样的异常。 Java 使用的证书主题(来自密钥库)与信任库中的主题不同。 p12 文件(密钥库)包含多个证书,如何提取与信任库具有相同主题的证书?
    • 我修复了错误,请求现在运行良好。我只需要将 cacerts 的所有 CA 都添加到 5 个,其中一个丢失了,所以我从网站上下载了它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 2016-02-08
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    相关资源
    最近更新 更多