web-dev-qa-db-fra.com

SSLHandShakeException Aucun protocole approprié

J'ai récemment ajouté SSL à mon site Web et il est accessible via https. Maintenant, lorsque mon Java essaie de faire des demandes à mon site Web et de le lire avec un lecteur tamponné, elle produit cette trace de pile

Je n'utilise pas de certificat auto-signé, le certificat provient de Namecheap qui utilise COMODO SSL comme autorité de certification pour signer mon certificat. im en utilisant 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)

Mon code est très basique et essaie simplement de lire la page de mon site à l'aide d'un lecteur tamponné

 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();
    }

}

J'ai essayé d'ajouter mon certificat SSL au magasin de clés de la JVM et j'ai même essayé d'accepter chaque certificat (ce qui va à l'encontre du but de SSL que je connais) avec ce code

 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) {

    }
}

Im perplexe et toute aide serait très appréciée!

10
ChrisianBartram
protocol is disabled or cipher suites are inappropriate

La clé du problème réside dans cette déclaration. Cela signifie essentiellement:

  1. L'implémentation TLS utilisée par le client ne prend pas en charge les suites de chiffrement utilisées par le certificat du serveur.
  2. La configuration TLS sur le serveur a désactivé les suites de chiffrement prises en charge par le client.
  3. Les configurations TLS sur le client désactivent les suites de chiffrement proposées par le serveur.
  4. Incompatibilité de version TLS entre le client et le serveur.

Cela conduit à un échec de prise de contact dans TLS et la connexion échoue. Vérifiez un ou tous les trois scénarios ci-dessus.

4
automaton

Dans $JRE/lib/security/Java.security:

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, RC4, DES, MD5withRSA, DH keySize < 1024, \
EC keySize < 224, 3DES_EDE_CBC, anon, NULL

Cette ligne est activée, après avoir commenté cette ligne, tout fonctionne bien. Apparemment, après/dans jre1.8.0_181, cette ligne est activée.

Ma Java est "1.8.0_201.

2
wwjih123