Почему java использует местоположение хранилища/доверительное хранилище по умолчанию для JAVA_HOME/lib/security/cacerts, хотя я предоставил свойства -Djavax.net.ssl.trustStore

В моем 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 не использует этот сертификат из custom 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 default keyStore location: $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 по умолчанию, он работает отлично для меня.

где и что мне нужно изменить, чтобы настроить другое хранилище ключей, чтобы избежать превышения исключения.

Ответ 1

После просмотра этого сообщения я настроил и предоставил следующие параметры системы -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 будет иметь следующие параметры и внутреннюю интерпретацию

  • -Dweblogic.security.TrustKeyStore=JavaStandardTrust (Мы должны использовать, когда доверенные ЦС в cacerts JDK, укажите это)
  • -Dweblogic.security.TrustKeyStore=DemoTrust (Мы должны использовать, когда доверенные ЦС в DemoTrust.jks и в JCK cacerts, укажите это)
  • -Dweblogic.security.TrustKeyStore=CustomTrust (Мы должны использовать, когда доверенные ЦС из другого хранилища ключей, укажите это).

Примечание 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 для просмотра более подробного представления журналов. Обычно без этого параметра мы не сможем увидеть более подробный журнал.