Сбой HTTPS POST-запроса в WebSphere 5.0 для определенного URL/ сертификата

Я пытаюсь подключиться к конечной точке веб-службы RESTful через HTTPS, используя WebSphere 5.1.

        endpoint                        = new URL("https://restful/web/service");

        HttpURLConnection connection    = (HttpURLConnection) endpoint.openConnection();
        connection.setRequestMethod("POST");

        if (connection.getResponseCode() == 200) {          
            //Do something
        } else {
            //Show error
        }

Я получаю следующее исключение на getResponseCode()

[1/22/15 9:16:28:306 GMT]  9341a3d SystemErr     R javax.net.ssl.SSLProtocolException: end of file
[1/22/15 9:16:28:306 GMT]  9341a3d SystemErr     R  at com.ibm.jsse.bg.a(Unknown Source)
[1/22/15 9:16:28:306 GMT]  9341a3d SystemErr     R  at com.ibm.jsse.bg.startHandshake(Unknown Source)
[1/22/15 9:16:28:306 GMT]  9341a3d SystemErr     R  at com.ibm.net.ssl.www.protocol.https.b.n(Unknown Source)
[1/22/15 9:16:28:306 GMT]  9341a3d SystemErr     R  at com.ibm.net.ssl.www.protocol.https.p.connect(Unknown Source)
[1/22/15 9:16:28:306 GMT]  9341a3d SystemErr     R  at com.ibm.net.ssl.www.protocol.http.bw.getInputStream(Unknown Source)
[1/22/15 9:16:28:307 GMT]  9341a3d SystemErr     R  at com.ibm.net.ssl.www.protocol.http.bw.getHeaderField(Unknown Source)
[1/22/15 9:16:28:307 GMT]  9341a3d SystemErr     R  at com.ibm.net.ssl.www.protocol.http.bw.getResponseCode(Unknown Source)
[1/22/15 9:16:28:307 GMT]  9341a3d SystemErr     R  at com.ibm.net.ssl.internal.www.protocol.https.HttpsURLConnection.getResponseCode(Unknown Source)

Если я попробую тот же код на WebLogic, он работает нормально. Кроме того, для других конечных точек (например, https://googleapis/) он отлично работает как в WebLogic, так и в WebSphere.

Я уже импортировал сертификат в склад доверенных сертификатов, но, похоже, он ничего не изменил. Может кто-нибудь посоветовать, в чем может быть проблема?

1 ответ

Решение

Наконец-то нашел решение. Оказалось, что Websphere по умолчанию использует SSLv3 для рукопожатия SSL вместо TLS. Принудительное использование TLS сделало свое дело.

System.setProperty("https.protocols", "TLSv1");
Другие вопросы по тегам