Получить запрос handshake_faliure:javax.net.ssl.SSLHandshakeException

При отправке запроса get на www.sunnyportal.com в консоли появился код ошибки, он выглядит следующим образом:

    javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1979)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1086)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1343)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1301)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
at personal.Project.GetUrl.getReq(GetUrl.java:25)
at personal.Project.GetUrl.main(GetUrl.java:34)

Я попробовал следующие страницы без удачи:

+ Получено фатальное предупреждение: handshake_failure через SSLHandshakeException

+ Как решить ошибку javax.net.ssl.SSLHandshakeException?

Вот мой код:

package personal.Project;

    import java.io.IOException;

    import java.io.InputStream;

    import java.net.MalformedURLException;

    import java.net.URL;

    import java.net.URLConnection;

    import java.net.URLEncoder;

    public class GetUrl {

        private String url = "https://www.sunnyportal.com/Templates/ChartValues.aspx";

private String charset = "UTF-8";  // Or in Java 7 and later, use the constant: java.nio.charset.StandardCharsets.UTF_8.name()
private String login = "<>";
private String password = "<>";

public String getReq() throws MalformedURLException, IOException
{
    String query = String.format("login=%s&password=%s", 

            URLEncoder.encode(login, charset), 
            URLEncoder.encode(password, charset));

        URLConnection c = new URL(url + "?" + query).openConnection();
        c.setRequestProperty("Accept-Charset", charset);
        InputStream response = c.getInputStream();  

        return response.toString();
}
public static void main (String args[])
{
    GetUrl data = new GetUrl();
    String getString = null;
    try {
        getString = data.getReq();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.exit(1);
    }

    System.out.println( getString );
}

}

Хотелось бы помочь с этой проблемой, заранее спасибо!

1 ответ

Решение

Согласно https://www.ssllabs.com/ssltest/analyze.html?d=sunnyportal.com этот сервер согласовывает только один набор шифров, TLS_RSA_WITH_AES_256_CBC_SHA, который использует AES с 256-битным ключом.

Если вы используете Oracle Java для использования любого симметричного шифра длиной более 128 бит, включая AES 256, вы должны загрузить и установить файлы политики неограниченной юрисдикции JCE для вашей версии. Для поддерживаемой на данный момент версии 8, в нижней части общей страницы загрузки http://www.oracle.com/technetwork/java/javase/downloads/index.html она ссылается на http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html. Для более старых версий поиска можно найти http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html и http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html.

PS: дублирование SSLHandshakeException при подключении к сайту https, хотя я не уверен, что вы могли ожидать, что найдете это.

Другие вопросы по тегам