【发布时间】:2015-11-20 08:07:02
【问题描述】:
在我的 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/standalone/lib/asm-5.0.3.jar:/myapp/standalone/lib/castor-1.3.2-core.jar:/myapp/standalone/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 中导入和添加相同的证书时,它不会给出任何异常。
我参考了这个post 并尝试在$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 loation 中导入相同的证书,它对我来说工作正常。
我需要更改的位置和所有内容以配置不同的密钥库以避免上述异常。
【问题讨论】:
-
请发布整个命令行,并解释为什么您认为 Java 使用默认的信任库位置。我在这里没有看到任何实际证据。
-
$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/standalone/lib/asm-5.0.3.jar:/myapp /standalone/lib/castor-1.3.2-core.jar:/myapp/standalone/lib/myAPP_final.jar
-
以上是我完整的命令行。我正在使用:java 版本“1.7.0_79”Java(TM) SE 运行时环境(构建 1.7.0_79-b15)Java HotSpot(TM) 64 位服务器 VM(构建 24.79-b02,混合模式)
-
我注意到如果我在类路径中没有 /Oracle_Home/wlserver/server/lib/wlfullclient.jar:我得到不同的异常:如下所示:ExecuteThread:'5' for queue:' default',处理异常:java.net.SocketTimeoutException:读取超时 ExecuteThread:'5' for queue:'default',处理异常:java.net.SocketTimeoutException:读取超时 - 2015-11-20 04:54:02,645 [AT_230SMyApp:AutoLog] INFO 关于自定义证书系统参数docs.oracle.com/middleware/1221/wls/SACLT/security.htm#SACLT221,我也尝试了以下 URL,我遇到了同样的错误
-
这些都表明与信任库无关。这一切似乎都与网络连接有关。