Как настроить SSL и HTTP-прокси с Axis2, используя httpClient4 - PullRequest
0 голосов
/ 23 ноября 2018

Я хочу использовать axis2 1.7.8 для подключения через веб-сервис через https (порт 443) через прокси-сервер http (порт 8080).Я прочитал статью https://stackoverflow.com/a/53171162/1692626, в которой описано, как настроить httpclient 4 и SSL.Я попытался установить прокси как параметры с HttpTransportProperties.ProxyProperties без удачи.Я также попытался установить прокси-сервер в качестве Httphost непосредственно для httpclient (httpclient.getParams (). SetParameter (ConnRoutePNames.DEFAULT_PROXY, proxy) и зарегистрировать дополнительный http-порт 8080, но я получил исключения, такие как «Нераспознанное сообщение SSL, соединение в виде открытого текста?»

Как правильно это сделать?

Вот мой код с последним целым числом

    public static  <Axis2Stub extends Stub> void initHttpsStub(Axis2Stub stub, String proxyIp, Integer proxyPort, long connectionTimeout, long connectionRequestTimeout, long socketTimeout, String trustStore, String trustStorePass){
    if(stub != null){
        stub._getServiceClient().getOptions().setProperty(HTTPConstants.CACHED_HTTP_CLIENT,
                getHttpClient(proxyIp, proxyPort, trustStore, trustStorePass, connectionTimeout, connectionRequestTimeout, socketTimeout));
    }
}

private static HttpClient getHttpClient(String proxyIp, Integer proxyPort, String trustStorePath, String trustStorePass, long connectionTimeout, long connectionRequestTimeout, long socketTimeout){

    try {
        KeyStore keyStore = KeyStore.getInstance("JKS");
        LOG.debug("Loading keystore file:{}", trustStorePath);
        keyStore.load(new FileInputStream(new File(trustStorePath)), trustStorePass.toCharArray());

        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        keyManagerFactory.init(keyStore, trustStorePass.toCharArray());
        TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        trustManagerFactory.init(keyStore);

        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom());
        SSLSocketFactory sf = new SSLSocketFactory(sslContext);
        SchemeRegistry schemeRegistry = new SchemeRegistry();
        if(proxyPort != null) {
            Scheme httpScheme = new Scheme("http", proxyPort, sf);
            schemeRegistry.register(httpScheme);
        }
        Scheme httpsScheme = new Scheme("https", 443, sf);
        schemeRegistry.register(httpsScheme);
        ClientConnectionManager cm = new PoolingClientConnectionManager(schemeRegistry);
        HttpClient httpClient = new DefaultHttpClient(cm);

        HttpParams params = httpClient.getParams();
        params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, connectionTimeout);
        params.setParameter(CoreConnectionPNames.SO_TIMEOUT, socketTimeout);
        params.setParameter(ClientPNames.CONN_MANAGER_TIMEOUT, connectionRequestTimeout);

        if(proxyIp != null && proxyPort != null){
            HttpHost proxy = new HttpHost(proxyIp, proxyPort);
            params.setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
        }

        return httpClient;
    }catch (GeneralSecurityException | IOException ex){
        throw new MwRuntimeException(ex, "1", "Unable to initialize webservice client: " + ex.getMessage());
    }
}

И трассировкой стека

2018-11-22 09:18:46,023 INFO  [org.apache.axis2.transport.http.impl.httpclient4.HTTPSenderImpl] (default task-1) [b4a5d3ca-318d-4869-84ff-a2f7aa71ea81]    Unable to sendViaPost to url[https://XXXXXXXXXXXXXXXXXXX]: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
        at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:710)
        at sun.security.ssl.InputRecord.read(InputRecord.java:527)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:983)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1397)
        at org.apache.http.conn.ssl.SSLSocketFactory.createLayeredSocket(SSLSocketFactory.java:573)
        at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:557)
        at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:414)
        at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
        at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:326)
        at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610)
        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)
        at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
        at org.apache.axis2.transport.http.impl.httpclient4.HTTPSenderImpl.executeMethod(HTTPSenderImpl.java:873)
        at org.apache.axis2.transport.http.impl.httpclient4.HTTPSenderImpl.sendViaPost(HTTPSenderImpl.java:238)
        at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:121)
        at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:403)
        at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:234)
        at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:431)
        at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:399)
        at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:225)
        at org.apache.axis2.client.OperationClient.execute(OperationClient.java:150)
        at xxxxx.Stub.getID(Stub.java:173)

Я попытался удалить http-портзарегистрироваться, но потом я получил исключение, что конфигурация http отсутствует. Приложение работает на сервере wildfly12. Я знаю, что могу использовать cxf, но не могу изменить его

...