Проблема Axis2 после использования другого веб-сервиса с https, но только один использует аутентификацию сертификата - PullRequest
0 голосов
/ 08 октября 2018

У меня есть веб-приложение на Java, которое использует различные веб-сервисы.Теперь я должен использовать один WebService, который требует аутентификации в обоих направлениях.Я использую SSLClientAxisEngineConfig реализацию (https://github.com/linhkuivanen/axistools), которую я отправляю в качестве параметра моему классу, который расширяет org.apache.axis.client.Service. Это сработало. Но только если это первое использование некоторого Axis Client. После этого, если я потреблюWebService с «https», который не требует сертификата, я получил сообщение об ошибке «Цепочка сертификатов ненадежного сервера».

Если я сначала использую веб-сервис, который не требует аутентификации сертификата, при попытке использовать другой, которыйМне нужна аутентификация, я получил сообщение об ошибке «Ошибка рукопожатия».

Я предполагаю, что Axis имеет какой-то кэш, который использует первую конфигурацию, но я не могу найти способ решить мою проблему.

Редактировать : Я решил проблему. Я сгенерировал новый клиент Axis с wsdl2java (Axis2-1.7.8) вместо использования генератора клиента веб-службы Eclipse. Прежде чем использовать WebService, я регистрируюсьновый https протокол с сертификатом клиента и cacerts:

Protocol protocol = new Protocol("https", socketFactoryDinamico, 443);    
Protocol.registerProtocol("https", protocol);

и после его использования я отменяю регистрацию протокола:

Protocol.unregisterProtocol("https");

После этого я могуиспользовать другие Web-сервисы без аутентификации сертификата без проблем.

Edit2:

Классы, сгенерированные Eclipse:

public class NfseWSServiceLocator extends org.apache.axis.client.Service implements NfseWSService {
}

public interface NfseWSService extends javax.xml.rpc.Service {
}

И класс, сгенерированный Axis2:

public class NfseWSServiceStub extends org.apache.axis2.client.Stub {
}

1 Ответ

0 голосов
/ 09 октября 2018

«Цепочка сертификатов недоверенного сервера» означает, что ваш клиент не доверяет сертификату сервера, который пытается установить соединение.Для правильной настройки сценария связи с поддержкой HTTPS обе стороны связи должны доверять друг другу.

RFC 5246 определяет следующее:

unknown_ca

  A valid certificate chain or partial chain was received, but the
  certificate was not accepted because the CA certificate could not
  be located or couldn't be matched with a known, trusted CA.  This
  message is always fatal.

Обычно это клиент, которому требуется доверять цепочке сертификатов сервера для установления соединения, поскольку сервер может работать в анонимном режиме, не запрашивая сертификат клиента у однорангового узла.

...