Веб-служба вызова клиентского приложения из WSDL в HTTPS: общая проблема SSLEngine - PullRequest
0 голосов
/ 01 апреля 2019

Я устанавливаю клиентское приложение, которое вызывает веб-сервис. Веб-сервис развернут на сервере Weblogic. У меня есть WSDL, доступный в HTTP или Local (это то же самое), и я хочу использовать метод этой службы. Сервер хочет получить сертификат от клиента, потому что я настроил двустороннюю аутентификацию и настроил трафик HTTPS.

Я создал клиентские классы с помощью плагина JAX-WS RI.

Мне нужно получить доступ к веб-сервису в https и передать сертификат клиента.

Вопросы:

  • Почему возникает ошибка ниже, если я изменяю доступ к WSDL в HTTPS и не генерируется с использованием HTTP?

<code>Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
  • Достаточно ли иметь соединение в HTTPS, если я получаю доступ к WSDL в HTTP и устанавливаю BindingProvider.ENDPOINT_ADDRESS_PROPERTY в https (как я сделал)?

Это метод, который вызывает веб-сервис:

 protected synchronized void reloadListaCondizioni(){

                URL wsdlURL = new URL("http://localhost:7001/CondizioniWS/services/condizioniService?wsdl");
                CondizioniService_Service cdzService = new CondizioniService_Service(wsdlURL);

                BindingProvider bindingProvider = (BindingProvider) cdzService.getCondizioniServiceImplPort();

                bindingProvider.getRequestContext().put("com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory", cdzService.getCustomSSLSocketFactory());

                bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "https://localhost:7002/CondizioniWS/services/condizioniService");

                CondizioniService condizioniWS = cdzService.getCondizioniServiceImplPort();

                List famiglie = condizioniWS.getStrutturaListaCondizioni("00000", "CC", "ISC", "T");

Это пользовательский SSLSocketFactory:

    public SSLSocketFactory getCustomSSLSocketFactory() throws NoSuchAlgorithmException, KeyStoreException, CertificateException, FileNotFoundException, IOException, UnrecoverableKeyException, KeyManagementException {
        SSLContext sc = SSLContext.getInstance("SSLv3");

        KeyManagerFactory kmf =
            KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());

        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());

        String certPasswd = "mypassword";   
        ks.load(new FileInputStream("C:\\....\\client_keystore.jks"), certPasswd.toCharArray());

        kmf.init(ks, certPasswd.toCharArray());

        sc.init( kmf.getKeyManagers(), null, null );

        return sc.getSocketFactory();
    } 
...