«SunX509 TrustManagerFactory недоступен» в AIX (клиент веб-службы SSL) - PullRequest
0 голосов
/ 29 марта 2012

Мой Java-компонент в контейнере JBoss 4.2.2 пытается получить доступ к веб-сервису SSL, но получает исключение (не критично, функциональность работает, ответ получен из веб-сервиса ssl).

ОС: AIX

Java:

> /usr/java6_64/bin/java -version
java version "1.6.0"
Java(TM) SE Runtime Environment (build pap6460sr9fp1-20110208_03(SR9 FP1))
IBM J9 VM (build 2.4, JRE 1.6.0 IBM J9 2.4 AIX ppc64-64 jvmap6460sr9-20110203_74623 (JIT enabled, AOT enabled)
J9VM - 20110203_074623
JIT  - r9_20101028_17488ifx3
GC   - 20101027_AA)
JCL  - 20110203_01

Код:

SOAPMessage reply = connection.call(message, webserviceUrl);

Соединение является соединением SOAP.

Я получаю следующий вывод журнала:

2012-03-29 15:10:17,651 ERROR [org.jboss.remoting.transport.http.HTTPClientInvoker] (Thread-17) Error creating SSL Socket Factory for client invoker.
java.io.IOException: Error initializing socket factory SSL context: SunX509 TrustManagerFactory not available
        at sun.security.jca.GetInstance.getInstance(GetInstance.java:230)
        at javax.net.ssl.TrustManagerFactory.getInstance(TrustManagerFactory.java:11)
        at org.jboss.remoting.security.SSLSocketBuilder.loadTrustManagers(SSLSocketBuilder.java:1407)
        at org.jboss.remoting.security.SSLSocketBuilder.initializeSocketFactorySSLContext(SSLSocketBuilder.java:1326)
        at org.jboss.remoting.security.SSLSocketBuilder.createCustomSocketFactory(SSLSocketBuilder.java:451)
        at org.jboss.remoting.security.SSLSocketBuilder.createSSLSocketFactory(SSLSocketBuilder.java:431)
        at org.jboss.remoting.security.SSLSocketBuilder.createSSLSocketFactory(SSLSocketBuilder.java:381)
        at org.jboss.remoting.transport.http.ssl.HTTPSClientInvoker.createSocketFactory(HTTPSClientInvoker.java:140)
        at org.jboss.remoting.RemoteClientInvoker.<init>(RemoteClientInvoker.java:46)
        at org.jboss.remoting.transport.http.HTTPClientInvoker.<init>(HTTPClientInvoker.java:105)
        at org.jboss.remoting.transport.https.TransportClientFactory.createClientInvoker(TransportClientFactory.java:39)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
        at java.lang.reflect.Method.invoke(Method.java:611)
        at org.jboss.remoting.InvokerRegistry.loadClientInvoker(InvokerRegistry.java:419)
        at org.jboss.remoting.InvokerRegistry.createClientInvoker(InvokerRegistry.java:320)
        at org.jboss.remoting.Client.connect(Client.java:459)
        at org.jboss.ws.core.client.RemotingConnectionImpl.createRemotingClient(RemotingConnectionImpl.java:247)
        at org.jboss.ws.core.client.RemotingConnectionImpl.invoke(RemotingConnectionImpl.java:165)
        at org.jboss.ws.core.client.SOAPRemotingConnection.invoke(SOAPRemotingConnection.java:77)
        at org.jboss.ws.core.soap.SOAPConnectionImpl.callInternal(SOAPConnectionImpl.java:106)
        at org.jboss.ws.core.soap.SOAPConnectionImpl.call(SOAPConnectionImpl.java:66)
        at xxx.yyy.fooservice.FooServiceImpl.foo(FooServiceImpl.java:103)
        at xxx.yyy.fooservice.FooAsyncRunner.run(FooAsyncRunner.java:31)
        at java.lang.Thread.run(Thread.java:736)

Я пытался использовать подсказки в сети для изменения ssl.KeyManagerFactory.algorithm и ssl.TrustManagerFactory.algorithm в $ JAVA_HOME / jre /lib / security / java.security, но преобладает ошибка.

Дополнительная информация: приведенное выше исключение появилось после указания

export JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=$JAVA_HOME/jre/lib/security/cacerts -Djavax.net.ssl.trustStorePassword=foo"

... при запуске JBoss 4.2.2, до этого яполучил следующее исключение:

2012-03-28 12:10:13,424 ERROR [org.jboss.remoting.transport.http.HTTPClientInvoker] (Thread-13) Error creating SSL Socket Factory for client invoker.
java.io.IOException: Error initializing socket factory SSL context: Can not find truststore url.
        at org.jboss.remoting.security.SSLSocketBuilder.initializeSocketFactorySSLContext(SSLSocketBuilder.java:1340)
        at org.jboss.remoting.security.SSLSocketBuilder.createCustomSocketFactory(SSLSocketBuilder.java:451)
        at org.jboss.remoting.security.SSLSocketBuilder.createSSLSocketFactory(SSLSocketBuilder.java:431)
        at org.jboss.remoting.security.SSLSocketBuilder.createSSLSocketFactory(SSLSocketBuilder.java:381)
        at org.jboss.remoting.transport.http.ssl.HTTPSClientInvoker.createSocketFactory(HTTPSClientInvoker.java:140)
        at org.jboss.remoting.RemoteClientInvoker.<init>(RemoteClientInvoker.java:46)
        at org.jboss.remoting.transport.http.HTTPClientInvoker.<init>(HTTPClientInvoker.java:105)
        at org.jboss.remoting.transport.https.TransportClientFactory.createClientInvoker(TransportClientFactory.java:39)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
        at java.lang.reflect.Method.invoke(Method.java:611)
        at org.jboss.remoting.InvokerRegistry.loadClientInvoker(InvokerRegistry.java:419)
        at org.jboss.remoting.InvokerRegistry.createClientInvoker(InvokerRegistry.java:320)
        at org.jboss.remoting.Client.connect(Client.java:459)
        at org.jboss.ws.core.client.RemotingConnectionImpl.createRemotingClient(RemotingConnectionImpl.java:247)
        at org.jboss.ws.core.client.RemotingConnectionImpl.invoke(RemotingConnectionImpl.java:165)
        at org.jboss.ws.core.client.SOAPRemotingConnection.invoke(SOAPRemotingConnection.java:77)
        at org.jboss.ws.core.soap.SOAPConnectionImpl.callInternal(SOAPConnectionImpl.java:106)
        at org.jboss.ws.core.soap.SOAPConnectionImpl.call(SOAPConnectionImpl.java:66)
        at xxx.yyy.fooservice.FooServiceImpl.foo(FooServiceImpl.java:103)
        at xxx.yyy.fooservice.FooAsyncRunner.run(FooAsyncRunner.java:31)
        at java.lang.Thread.run(Thread.java:736)

Что я могу сделать, чтобы эти исключения исчезли?Вся помощь высоко ценится!Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

После быстрого просмотра JBoss SSLSocketBuilder.loadTrustManagers он пытается использовать свойство org.jboss.remoting.trustStoreAlgorithm в конфигурации, возвращаясь к org.jboss.remoting.keyStoreAlgorithm, затем возвращаясь к жестко заданному значению по умолчанию, SunX509.

Обратите внимание, что даже в JRE Sun / Oracle это не значение по умолчанию для алгоритма диспетчера доверия, это PKIX.

Я бы сообщил об этом как об ошибке / RFE в JBoss: вероятно, он должен вернуться к TrustManagerFactory.getDefaultAlgorithm(), когда ничего не установлено (в этом смысл этого метода).

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

1 голос
/ 29 марта 2012

В IBM JVM имя - IbmX509, а не SunX509 - это значение по умолчанию, используемое JBoss, если явно не указано иное.

Подробнее см. http://docs.jboss.org/jbossweb/2.1.x/ssl-howto.html. Искать IbmX509.

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