尽管我提供了-Djavax.net.ssl.trustStore属性,为什么Java为什么使用JAVA_HOME / lib / security / cacerts的默认位置密钥库/信任库

拉克斯曼G

在我的Java应用程序中,我使用提供的-Djavax.net.ssl.trustStore系统属性运行,如下所示。

-Djavax.net.ssl.trustStore=/myapp/app.jks -Djavax.net.ssl.trustStorePassword=XXXXX -Djavax.net.ssl.trustStoreType=jks -Djavax.net.debug=ssl

这是我的完整命令行:

$JAVA_HOME/bin/java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Xms512m -Xmx1024m -XX:MaxPermSize=192m -Djavax.net.ssl.trustStore=/myapp/app.jks -Djavax.net.ssl.keyStore=/myapp/app.jks -Djavax.net.ssl.trustStorePassword=XXXXX -Djavax.net.ssl.keyStorePassword=XXXXX -Dweblogic.security.SSL.ignoreHostnameVerification=true -Djavax.net.debug=ssl -Djavax.net.ssl.trustStoreType=jks -cp /Oracle/Middleware/Oracle_Home/wlserver/server/lib/wlfullclient.jar:/myapp/stand‌​alone/lib/asm-5.0.3.jar:/myapp/standalone/lib/castor-1.3.2-core.jar:/myapp/standa‌​lone/lib/myAPP_final.jar

但是Java并未使用来自自定义路径的自定义keyStore中的证书。默认情况下$JAVA_HOME/lib/security/cacerts,我得到以下异常:

java.net.ConnectException: t3s://myapphost.com:7500: Destination 10.243.155.222, 7900 unreachable; nested exception is:
        javax.net.ssl.SSLHandshakeException: General SSLEngine problem; No available router to destination

当我导入并在其中添加相同证书时$JAVA_HOME/lib/security/cacerts,没有给出任何异常。

我已经参考了这篇文章,并尝试在其中配置相同的内容$JAVA_HOME/jre/lib/security/java.security并添加了以下条目:

javax.net.ssl.trustStore=/myapp/app.jks
javax.net.ssl.trustStorePassword=XXXXX
javax.net.ssl.trustStoreType=jks

我仍然面临着同样的问题。

我的问题是,为什么Java总是转到Java默认的keyStore位置:$JAVA_HOME/lib/security/cacerts尽管我使用以下命令提供并配置了自己的自定义keyStore:-Djavax.net.ssl.trustStore=/myapp/app.jks -Djavax.net.ssl.trustStorePassword=XXXXX -Djavax.net.ssl.trustStoreType=jks -Djavax.net.debug=ssl

而且,如果我要在默认的java keyStore位置中导入相同的证书,则对我来说工作正常。

我需要更改的位置和内容以配置不同的密钥库,以避免上述异常。

拉克斯曼G

看到这篇文章后,我已经配置并提供了以下系统属性-D选项,它为我解决了这个问题。希望对其他人有帮助,所以我将其发布。

-Dweblogic.security.CustomTrustKeyStoreFileName=/myapp/app.jks 
 -Dweblogic.security.TrustKeyStore=CustomTrust 
 -Dweblogic.security.CustomTrustKeyStorePassPhrase=XXXXXPWD
 -Dweblogic.security.CustomTrustKeyStoreType=jks 

我已经了解了我在-Dweblogic.security.TrustKeyStore参数注:中保留的以下内容

注意1: -Dweblogic.security.TrustKeyStore将具有以下选项和内部解释

  1. -Dweblogic.security.TrustKeyStore=JavaStandardTrust我们应该在JDK的cacert中使用受信任的CA时,请指定此项
  2. -Dweblogic.security.TrustKeyStore=DemoTrust当在DemoTrust.jks和JDK的cacerts中使用受信任的CA时,请使用此选项
  3. -Dweblogic.security.TrustKeyStore=CustomTrust当来自另一个密钥库的受信任CA时,应使用来指定此属性)。

注2

任何时候,如果您未达到Exception,则表示您的Java应用程序未在指定的信任库中找到证书。

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385)
        at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
        at sun.security.validator.Validator.validate(Validator.java:260)

PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:unable to find valid certification path to requested target,It is telling the same.

注3:重要的内容请尝试配置以-Djavax.net.debug=ssl查看日志的更多详细信息。通常,没有该参数,我们将无法查看更多详细信息日志。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档