Мои вопросы):
Похоже, что одним из отличий в базовом sun.net.www.protocol.https.HttpsClient является реализация HostNameVerifier. В настоящее время проблема заключается в HttpsClient в методе afterConnect, где setHost не вызывается, и это не похоже, относятся к любым SSLParameters - моя попытка обойти это состояла в том, чтобы заставить наш код вызова клиента WS загрузить нашу фабрику, до сих пор я безуспешно -
1) Как мне получить наш код вызова клиента WS для загрузки нашей фабрики?
OR
2) Как настроить JBOSS для правильной обработки этого запроса? (Предположим, что это конфигурация JBOSS)
Этап: - Java Oracle JDK 1.8 64-разрядная версия - Jboss 6.4 EAP - AXIS2 - JAX - Сертификаты действительны и загружены правильно - Я могу воспроизвести ошибку с помощью автономного приложения Java, и я могу исправить ошибку с помощью автономного Java-приложение.
Попытки:
1) Добавлен выходной перехватчик CXF фазы PRE-PROTOCOL, который добавит имя хоста в заголовок.
public void handleMessage(Message message) {
System.out.println("Inside handle message");
Map<String, List> headers = (Map<String, List>) message.get(Message.PROTOCOL_HEADERS);
try {
headers.put("Host", Collections.singletonList("ecm-users-dev.aexp.com"));
} catch (Exception ce) {
throw new Fault(ce);
}
}
2) Попытался отключить HostNameVerfier, так как в некоторых блогах предлагалось, чтобы включение hostNameverfier вызвало проблемы.
3) Создал оболочку вокруг SSLSocketFactory для ввода параметров SSL, как это предлагается ниже в блоге http://javabreaks.blogspot.com/2015/12/java-ssl-handshake-with-server-name.html
4) Внедрение параметров хоста в сеанс httpconduit через клиентскую политику.
final HTTPConduit httpConduit = (HTTPConduit) cxfClient.getConduit();
final TLSClientParameters tlsCP = new TLSClientParameters();
HTTPClientPolicy clientPolicy = new HTTPClientPolicy();
clientPolicy.setHost(endpoint.getHost());
httpConduit.setClient(clientPolicy);
httpConduit.setTlsClientParameters(tlsCP);
5) Пробовал внедрить оболочку SSLSocketfactory через провайдера привязки.
В чем проблема: установка SNI..
Мои журналы:
-------Работающий-----
14:11:02,417 INFO [stdout] (http-/127.0.0.1:8080-2) Extension signature_algorithms, signature_algorithms: SHA512withECDSA, SHA512withRSA, SHA384withECDSA, SHA384withRSA, SHA256withECDSA, SHA256withRSA, SHA224withECDSA, SHA224withRSA, SHA1withECDSA, SHA1withRSA, SHA1withDSA, MD5withRSA
14:11:02,419 I
NFO [stdout] (http-/127.0.0.1:8080-2) Extension server_name, server_name: [type=host_name (0), value=some.server.value]
14:11:02,419
INFO [stdout] (http-/127.0.0.1:8080-2) ***
----Нерабочий-----
14:15:35,081 INFO [stdout] (http-/127.0.0.1:8080-1) Extension signature_algorithms, signature_algorithms: SHA512withECDSA, SHA512withRSA, SHA384withECDSA, SHA384withRSA, SHA256withECDSA, SHA256withRSA, SHA224withECDSA, SHA224withRSA, SHA1withECDSA, SHA1withRSA, SHA1withDSA, MD5withRSA
14:15:35,082
INFO [stdout] (http-/127.0.0.1:8080-1) ***
(в этом отсутствует SNI)
(две попытки) фрагменты кода:
try{ bp.getRequestContext().put("com.sun.xml.ws.transport.https.client.SSLSocketFactory", new SSLSocketFactoryWrapper(sslContext.getSocketFactory(), sslParameters));
} catch (Exception e) {
log.error("Error of port default SSL configuration applying", e);
throw new IllegalArgumentException("fail to configure ws client by configuration", e);
}
--------------------
bp.getRequestContext().put("com.sun.xml.ws.transport.https.client.SSLSocketFactory" , new SSLSocketFactoryFacade().createSocket(endPoint,443));
log.info("exit getServiceClient(): " + client);
return client;
} catch(Throwable e) {
log.error("Error creating the Service Client", e);
throw new RuntimeException("Error creating the Service Client: " + e.getMessage(), e);
}
Аналогичный вопрос:
(Предложение не сработало) Расширенное имя_сервера (расширение SNI) не отправляется с jdk1.8.0, но отправляется с jdk1.7.0