com.sun.xml.internal.ws.client.ClientTransportException: ошибка транспорта HTTP: java.net.SocketException: сброс подключения - PullRequest
0 голосов
/ 22 марта 2019

Клиент, разработанный на Java с использованием JDK 1.6. Я использую API в коде Java. Всякий раз, когда я обращаюсь к этому API из soapui или из JDK 1.7, он работает отлично, но когда я пытался поразить этот API с помощью JDK 1.6, он возвращает ошибку. com.sun.xml.internal.ws.client.ClientTransportException: ошибка транспорта HTTP: java.net.SocketException: сброс подключения.

Я пытался при разработке клиента с использованием WSDL и HTTPSURLConnection с обоими механизмами, я получаю ту же ошибку. Кажется, нет ничего плохого в коде. Я не могу найти способ разрешения.

Wireshark Результат: Когда я запустил jar из JDK 1.7, я вижу результат в Wireshark, протокол TSLv1, но когда я попытался запустить jar из 1.6, протокол был изменен на SSLv2. Можно ли изменить протокол в коде или в системе, где мы вызываем jar?

Вот мой код:

 public String myFun(String sender) throws IOException, 
 NoSuchAlgorithmException, KeyManagementException{


    SSLContext sslContext = SSLContext.getInstance("SSL");
    TrustManager[] trustManager = getTrustManager();
    sslContext.init(null, trustManager, new SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

    try{
            String inquiryRequest = inquiryRequest = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:v5=\"http://xxxxxxx\">\n" 
                    +"<soapenv:Header>\n" 
                    +"</soapenv:Header>\n" 
                    +"<soapenv:Body>\n" 
                    +"<v5:single.smsReq>\n" 
                    +"<sender>"+sender+"</sender>\n" 
                    +"</v5:single.smsReq>\n" 
                    +"</soapenv:Body>\n" 
                    +"</soapenv:Envelope>";

            URL url =new URL ("https://xxxx:xx/xx");
            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();

            conn.setRequestMethod("POST");
            conn.setRequestProperty("content-type","application/xml");
            conn.setRequestProperty("Authorization","Basic xxx");
            conn.setDoOutput(true);
            DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
                wr.writeBytes(inquiryRequest);
                wr.flush();
                wr.close();

            BufferedReader in = new BufferedReader( new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
                while ((inputLine = in.readLine()) != null) {
                        response.append(inputLine);
                }
                in.close();
                conn.disconnect();

            return response.toString();

    }catch(Exception e){
        return null;
    } 

}
private TrustManager[] getTrustManager() {
    TrustManager[] certs = new TrustManager[] { new X509TrustManager() {
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
        public void checkClientTrusted(X509Certificate[] certs, String t) {
        }
        public void checkServerTrusted(X509Certificate[] certs, String t) {
        }
    }
    };
    return certs;
}

1 Ответ

0 голосов
/ 22 марта 2019

В SSLContext вы можете настроить свой собственный SSlContext TSLv1 или SSLv2, а затем вызвать sslContext.init с доверенными сертификатами. И добавьте его в HttpsURLConnection как DefaultSSLSocketFactory.

System.setProperty ("jsse.enableSNIExtension", "false");

SSLContext sslContext = SSLContext.getInstance("SSL");
TrustManager[] trustManager = getTrustManager();
sslContext.init(null, trustManager, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

HostnameVerifier hostNameVerifier = new HostnameVerifier() {
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
};

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