#java #ssl #weblogic #axis #keystore
#java #ssl #weblogic #ось #хранилище ключей
Вопрос:
Я работаю над веб-службой на основе AXIS, где поставщик услуг внедрил 1-way TLS. Чтобы использовать эту службу, я предоставил свойства хранилища ключей и хранилища доверия в сценарии запуска weblogic, используя javax.net.ssl.keyStore или javax.net.ssl.trustStore.
Когда мы выполняем тест, мы получаем исключение ниже:
Вызвано: java.security.Исключение NoSuchAlgorithmException: ошибка при построении реализации (алгоритм: по умолчанию, поставщик: IBMJSSE2, класс: com.ibm.jsse2.ec ) в java.security.Поставщик $Service.newInstance(Provider.java: 1271) в sun.security.jca.getInstance.getInstance(getInstance.java:249) в sun.security.jca.getInstance.getInstance(getInstance.java: 177) в javax.net.ssl.SSLContext.getInstance(SSLContext.java: 26) вjavax.net.ssl.SSLContext.getDefault(SSLContext.java:9) в javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:23) в org.apache.axis.components.net.JSSESocketFactory.initFactory(JSSESocketFactory.java:87) в org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:105) … еще 22
Вызвано: java.lang.Исключение: файл хранилища доверия не существует: /home/apps/weblogic/.keystore на com.ibm.jsse2.rc.a(rc.java:38) на com.ibm.jsse2.ec.f(ec.java: 19) на com.ibm.jsse2.ec .<init>(ec.java:21) в sun.reflect.NativeConstructorAccessorImpl.newInstance0(собственный метод) в sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:86) в sun.reflect.Делегирование constructoraccessorimpl.newInstance(делегирование constructoraccessorimpl.java:58) в java.lang.reflect.Конструктор.newInstance(Constructor.java: 542) в java.security.Поставщик $Service.newInstance(Provider.java:1252) … еще 29
Я даже не уверен, откуда он выбирает местоположение /home/apps/weblogic/.keystore даже после настройки свойств хранилища ключей / truststore .
Когда я проверил файл AXIS JAR, я увидел, что в классе org.apache.axis.components.net.SunJSSESocketFactory у нас есть свойство по умолчанию для truststore:
статическое логическое значение defaultClientAuth = false; частное логическое значение clientAuth = false; статическая строка defaultKeystoreFile = System.getProperty(«user.home») «/.keystore»; статическая строка defaultKeyPass = «changeit»;
Кто-нибудь может объяснить, почему AXIS API использует это хранилище ключей по умолчанию вместо того, которое указано в аргументе командной строки.
Ответ №1:
Я нашел основную причину этой проблемы, а не ОСЬ вообще. Проблема была в IControl.Класс интерфейса, используемый для связи f5 с большим IP. В конструкторах этого класса системное свойство хранилища доверия было перезаписано следующей строкой: System.setProperty(«javax.net.ssl.trustStore», System.getProperty(«user.home») «/.keystore»);
Это не ищет хранилище доверия в расположении, указанном в сценарии запуска weblogic, вместо этого он ищет файл .keystore в user.home.
Мы можем либо изменить IControl JAR, чтобы удалить это жестко запрограммированное значение, либо обновить его до версии 11.5.
Другим обходным путем является повторная установка свойства truststore после вызова конструктора IControl.Класс интерфейсов.
Вы также можете инициализировать контекст SSL deafult перед вызовом IControl.Конструктор интерфейсов, который загрузит контекст SSL, используя свойства, упомянутые в сценарии запуска weblogic.