Wie zu beheben (SSLException) Received fatal alert: protocol_version in Java

Ich bin versucht, führen Sie eine get-Aufruf auf der website https://www.facebookbrand.com/ und dabei ich erhalte die Fehlermeldung (SSLException) Received fatal alert: protocol_version. Die website in Frage ist die Verwendung von TLSv1.2 und wenn ich meine setup-ConnectionFactory speziell dieses Protokoll unterstützen, nur es funktioniert gut, aber ich brauche es zum arbeiten für jede website und von meinem Verständnis Festplatte Programmieren Sie es auf TLSv1.2 wäre es nicht auch für andere https-Webseiten, die nicht mit TLSv1.2. Ich habe auch versucht, einschließlich einer Liste der Protokolle ("TLSv1.2", "TLSv1.1", "TLSv1", "SSLv3", "SSLv2Hello"), aber dann bekomme ich die Fehlermeldung Unrecognized SSL message, plaintext connection. Ich kümmern sich nicht darum, wie sicher es ist, ich muss nur in der Lage sein, eine Verbindung zu jeder website, die im wesentlichen und bin auf der Suche nach der beste Weg, dies zu tun. Unten habe ich meinen code.

Hier ist mein code für die Einrichtung der httpClient etc:

SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslBuilder.build(), SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
PlainConnectionSocketFactory pcsf = new PlainConnectionSocketFactory();
Registry socketFactoryRegistry = RegistryBuilder.create().register("https", sslsf).register("http", pcsf).build();
PoolingHttpClientConnectionManager multiConnectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
multiConnectionManager.setMaxTotal(100);
multiConnectionManager.setDefaultMaxPerRoute(10);
httpClientBuilder.setConnectionManager(multiConnectionManager);
this.httpClient = httpClientBuilder.disableContentCompression().setSSLSocketFactory(sslsf).build();

Hier ist der code für die get-Anforderung und die Ausführung über httpClient:

HttpGet call = new HttpGet(url);
LinkPullerContentHandler handler = new LinkPullerContentHandler();
PageLinks pl = new PageLinks(url, 200, null);
HttpResponse getResponse;

try {
    call.addHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)");
    call.addHeader("Accept","text/html");
    call.setConfig(RequestConfig.custom().setCookieSpec(CookieSpecs.IGNORE_COOKIES).build());

    try {
        getResponse = httpClient.execute(call);
    } catch (SocketTimeoutException ste) {
        LOG.error(String.format("Socket timeout pulling URL %s; skipping",url));
        pl.setHttpStatusCode(408);
        return pl;
    } catch (ConnectTimeoutException cte) {
        LOG.warn(String.format("Connect timeout pulling URL %s; skipping", url));
        pl.setHttpStatusCode(408);
        return pl;
    } catch (UnknownHostException uhe) {
        LOG.warn("Unable to resolve host for URL {}; skipping", url);
        pl.setHttpStatusCode(404);
        return pl;
    } catch (Exception e) {
        LOG.error(String.format("Unable to load link %s: (%s) %s",
            url,e.getClass().getSimpleName(),e.getMessage()),e);
        pl.setHttpStatusCode(420);
        return pl;
    }

    int code = getResponse.getStatusLine().getStatusCode();

In dem Versuch zu zählen speziell die TLSv1.2 Protokoll modifizierte ich die SSLConnectionSocketFactory setup-code zu diesem:

SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslBuilder.build(),
                new String[] { "TLSv1.2" }, null,
                SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

Die arbeiten für die website in Frage stellen, aber ich habe das Gefühl, es würde scheitern einige andere seit es ist hart codiert TLSv1.2. Alternativ hier war, wie es aussah, wenn ich versuchte, einschließlich der Zusatzprotokolle:

SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslBuilder.build(),
                new String[] { "TLSv1.2", "TLSv1.1", "TLSv1", "SSLv3", "SSLv2Hello"},
                null, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

Die endet immer die Ausnahme "Unrecognized SSL message, plaintext connection." Ich bin auch versucht, eine Liste der cipherSuites, um zu sehen, ob das hilft, aber ich habe nicht hatte keinen Erfolg mit ihm noch.

Jede Hilfe jemand kann mir helfen, herauszufinden, wie diese Arbeit zu machen, während Sie nicht opfern zu können, bekommen andere Seiten wäre toll.

Vielen Dank im Voraus

InformationsquelleAutor Ben | 2015-10-01
Schreibe einen Kommentar