SSLHandShakeException Нет соответствующего протокола

Я недавно добавил SSL на свой веб-сайт, и к нему можно получить доступ через https. Теперь, когда мое java-приложение пытается отправлять запросы на мой веб-сайт и читать с него с помощью буферизованного считывателя, оно генерирует этот стек

Я не использую самоподписанный сертификат, сертификат от Namecheap, который использует COMODO SSL в качестве CA для подписи моего сертификата. я использую Java 8

javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
at sun.security.ssl.Handshaker.activate(Handshaker.java:503)
at sun.security.ssl.SSLSocketImpl.kickstartHandshake(SSLSocketImpl.java:1482)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1351)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)

Мой код очень простой и просто пытается прочитать страницу на моем сайте с помощью буферизированного читателя

 private void populateDataList() {
    try {
        URL url = new URL("https://myURL.com/Data/Data.txt");
        URLConnection con = url.openConnection();
        con.setRequestProperty("Connection", "close");
        con.setDoInput(true);
        con.setUseCaches(false);

        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String line;
        int i = 0;
        while((line = in.readLine()) != null) {
            this.url.add(i, line);
            i++;
        }
    }   catch (Exception e) {
        e.printStackTrace();
    }

}

Я пытался добавить свой SSL-сертификат в хранилище ключей JVM, а также даже пытался принять каждый сертификат (который не соответствует назначению SSL, которое я знаю) с этим кодом

 private void trustCertificate() {
    TrustManager[] trustAllCerts = new TrustManager[] {
            new X509TrustManager() {
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return new X509Certificate[0];
                }
                public void checkClientTrusted(
                        java.security.cert.X509Certificate[] certs, String authType) {
                }
                public void checkServerTrusted(
                        java.security.cert.X509Certificate[] certs, String authType) {
                }
            }
    };
    try {
        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    } catch (GeneralSecurityException e) {
    }
    try {
        URL url = new URL("https://myURL.com/index.php");
        URLConnection con = url.openConnection();
        BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String line;
        while((line = br.readLine()) != null) {
            System.out.println(line);
        }

    } catch (Exception e) {

    }
}

Я в тупике, и любая помощь будет высоко ценится!

 John Yeary02 февр. 2018 г., 17:12
Пожалуйста, укажите версию Java, которую вы используете. если вы добавите-Djavax.net.debug=ssl:handshake:verbose это позволит вам изучить проблему рукопожатия более подробно.
 D-Klotz05 июл. 2016 г., 16:32
Вы, вероятно, должны предоставить более подробную информацию. Я полагаю, используя самоподписанный сертификат? Какая версия java?
 ChrisianBartram05 июл. 2016 г., 16:41
Я не использую самоподписанный сертификат, сертификат от Namecheap, который использует COMODO SSL в качестве CA для подписи моего сертификата. я использую Java 8
 dave_thompson_08505 июл. 2016 г., 23:47
(1) Сертификат не имеет ничего общего с этой ошибкой. (2) Используете ли вы версию Sun 8 для Sun / Oracle и, если да, то какое обновление или какую-либо другую Java? Были ли какие-либо изменения конфигурации в JRE, особенно в файле$JRE/lib/security/java.security? (3) У вас есть какие-либо системные свойства?https особенноhttps.protocols? (4) Попробуйте запустить с syspropjavax.net.debug=ssl и опубликуйте результат, за исключением того, что если в вашем хранилище доверенных сертификатов много сертификатов (что по умолчанию есть), вы можете сократить эту часть до минимума.

Ответы на вопрос(1)

протокол отключен или наборы шифров не подходят
Ключ к проблеме лежит в этом утверждении. То, что это в основном означает, является либо:

Реализация TLS, используемая клиентом, не поддерживает наборы шифров, используемые сертификатом сервера.Конфигурация TLS на сервере отключила наборы шифров, поддерживаемые клиентом.Конфигурации TLS на клиенте отключают наборы шифров, предлагаемые сервером.Несовместимость версии TLS между клиентом и сервером.

Это приводит к сбою рукопожатия в TLS, и соединение не устанавливается. Проверьте один или все три сценария выше.

 dave_thompson_08508 июл. 2016 г., 11:17
Это в рукопожатиилогика, но если вы выполняете трассировку кода, он находится в точке, предшествующей отправке чего-либо (в частности ClientHello) на уровне socket = TCP. (SYN / ACK TCP уже выполнен, если вы считаете это, но это не относится к SSL / TLS.)
 automaton06 июл. 2016 г., 15:37
Похоже, что происходит во время рукопожатия TLS.
 Nicholas DiPiazza11 окт. 2018 г., 21:19
Да, я должен был переключить «SSL» с «TLS» в моемsetSecureSocketProtocol и все работало нормально
 dave_thompson_08505 июл. 2016 г., 23:52
Это исключение происходит еще до отправки на сервер.

Ваш ответ на вопрос