immer javax.net.ssl.SSLException: Received fatal alert: protocol_version, während das Schaben von Daten mit Jsoup
Ich versuche Daten aus einer Website mit Jsoup.
Link zur Website ist Klicken Sie hier!
Hier ist mein code zum abrufen der Daten.
`
//WARNING: do it only if security isn't important, otherwise you have
//to follow this advices: http://stackoverflow.com/a/7745706/1363265
//Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager(){
public X509Certificate[] getAcceptedIssuers(){return null;}
public void checkClientTrusted(X509Certificate[] certs, String authType){}
public void checkServerTrusted(X509Certificate[] certs, String authType){}
}};
//Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
;
}`
String url = "https://www.sos.nh.gov/corporate/soskb/SearchResults.asp?FormName=CorpNameSearch&Words=Starting&SearchStr="+query+"&SearchType=Search";
Connection.Response response = Jsoup.connect(url).timeout(30000)
.method(Connection.Method.GET)
.userAgent("Mozilla/5.0 (Windows NT 10.0; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0")
.execute();
Document document = response.parse();
Bitte schlagen Sie mich, was ist mein Fehler hier.
Die Chiffren funktioniert die Website verwenden ? Welche Java-version benutzt du ? Es ist wahrscheinlich, die Seite verlangt für sslv3 und Ihre Java-support entfernt
die java-version ist 7. Welche Java version wird es unterstützt? Oder irgendwelche Drittanbieter-Bibliothek sollte es tun?
Sie haben zu prüfen, welche Ssl / tls version der besagten web-server unterstützt. Es könnte sein, Sie fordern mehr als es unterstützt. Google, wie man OpenSSL für diese Informationen bekommen, ich bin sicher, Sie finden die Infos hier auf stackoverflow.
Subhasish: Andere Möglichkeit: diese Website akzeptiert TLSv1.2 nur, und Java7-client standardmäßig nicht tut 1.2 (oder 1.1). Da Jsoup verwendet HttpsURLConnection, wenn Sie nicht aktualisieren, um Java8, können Sie die system property
Ich war nur raten, gut Sie überprüft die Angaben. Möchten, deaktivieren Sie diese in eine Antwort ?
die java-version ist 7. Welche Java version wird es unterstützt? Oder irgendwelche Drittanbieter-Bibliothek sollte es tun?
Sie haben zu prüfen, welche Ssl / tls version der besagten web-server unterstützt. Es könnte sein, Sie fordern mehr als es unterstützt. Google, wie man OpenSSL für diese Informationen bekommen, ich bin sicher, Sie finden die Infos hier auf stackoverflow.
Subhasish: Andere Möglichkeit: diese Website akzeptiert TLSv1.2 nur, und Java7-client standardmäßig nicht tut 1.2 (oder 1.1). Da Jsoup verwendet HttpsURLConnection, wenn Sie nicht aktualisieren, um Java8, können Sie die system property
https.protocols=TLSv1,TLSv1.1,TLSv1.2
. Auch, mit, dass alle-Vertrauen TrustManager bedeutet, dass so ziemlich jeder mit Zugang zu Ihrem Netzwerk kann fake diese Seite und offenlegen sensible Daten, die Sie senden.Ich war nur raten, gut Sie überprüft die Angaben. Möchten, deaktivieren Sie diese in eine Antwort ?
InformationsquelleAutor subhfyu546754 | 2015-11-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Sie verwenden möchten Java 8 hier, da es TLSv1 unterstützt.2 standardmäßig mit zusätzlichen erforderlichen cipher suites.
Warum nicht Java 7?
Getestet habe ich auf meinem Rechner mit Java 7 (1.7.0_45) und bekam den gleichen Fehler.
Ich aktiviert den debugging-Meldungen und gezwungen TLSv1.2.
Dann traf ich diesen neuen Fehler:
Schließlich ging ich zu Comodoca SSL-analyzer und finden Sie etwas Interessantes.
Nach SSL-analyzer, die Website, die Sie sind targeting ist nur aktiviert, die folgenden cipher suites:
(siehe Volle details)
Auf meiner Seite, ich habe keine der oben genannten Suiten. Prüfen Sie, ob Sie Sie haben:
Sehen die SSLSocketFactoryEx dafür, dass die benötigte cipher suites.
Warum Java 8?
Auf der anderen Seite gelingt es mir in runnnig den code durch verschieben von Java 7 auf Java 8 (1.8.0_20), die Unterstützung für TLS v1.2 ist Standard und bietet die benötigte cipher suites.
Hier ist eine beschnittene Liste der unterstützten cipher suites (71 Suiten) für Java 8 (1.8.0_20) auf Windows 7.
Snippet
Letzter Gedanke:
Ich habe ein snippet in der post.
InformationsquelleAutor Stephan
(Kommentar für die Schließung, ein wenig erweitert für zukünftige Sucher)
Durch das experiment, dass die Website erfordert ein Protokoll, version TLSv1.2 und obwohl Java7 JSSE implementiert das client-Seite standardmäßig deaktiviert 1.2 und 1.1. Java8 ermöglicht Ihnen standardmäßig; oder in Java7 seit Jsoup verwendet
HttpsURLConnection
Sie können ändern Sie die enabled-Versionen mit system-Eigenschafthttps.protocols
. Sie müssen mindestensTLSv1.2
und für größte Flexibilität sollte alle derzeit akzeptabel Protokollehttps.protocols=TLSv1,TLSv1.1,TLSv1.2
.Außerdem mit, dass alle-Vertrauen
TrustManager
bedeutet, dass so ziemlich jeder Bösewicht, der Zugang zu Ihrem Netzwerk kann fake diese Seite und offenlegen sensible Daten, die Sie senden. Es ist besser, um Ihre lokalen truststore so akzeptiert er das Zertifikat(en) und somit der server(s), die Sie benötigen, aber nicht falsche ones.Siehe hier: stackoverflow.com/a/35698258/363573
InformationsquelleAutor dave_thompson_085