我需要能够使用我们的私有 PKI CA 来对 Java 应用程序进行身份验证。具体来说,我需要能够通过我们的智能集线器安全地发送电子邮件,该集线器源自运行 iDempiere 的主机。
我正在使用 SSLPoke 类对此进行测试。
JAVA_VERSION="11" java SSLPoke mx32.harte-lyne.ca 465
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
我的研究表明,当在文件中找不到目标主机证书的 CA 证书时,通常会遇到此错误lib/security/cacerts
。
我已将我们的私有 CA 证书 [hll] 添加到cacerts
并验证它们是否存在:
JAVA_VERSION="11" keytool -list -rfc -cacerts > cacerts.txt
grep 'Alias' cacerts.txt
. . .
lias name: godaddyclass2ca [jdk]
Alias name: godaddyrootg2ca [jdk]
Alias name: hartelyneissuer2016 [hll]
Alias name: hartelyneroot2016 [hll]
Alias name: identrustcommercial [jdk]
Alias name: identrustdstx3 [jdk]
. . .
然而,当我使用SSLPoke
该类进行测试时,我得到了这个错误:
JAVA_VERSION="11" java SSLPoke mx32.harte-lyne.ca 465
sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
at java.base/sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:369)
让我们的 CA 证书被 Java 认可还需要什么?