obtenir javax.net.le protocole ssl.SSLException: Reçu alerte fatale: protocol_version tout en raclant les données à l'aide de Jsoup
J'essaie d'obtenir des données à partir d'un site à l'aide de Jsoup.
Lien vers le site est Cliquez ici!
Voici mon code pour extraire les données.
`
//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();
Veuillez me suggérer ce qui est mon erreur ici.
Qui les algorithmes utilisés sur le site ? Java version utilisez-vous ? Il est probable que le site demande pour sslv3 et votre Java supprimé le support
java version 7. La version de Java de soutien? Ou tout tiers bibliothèque devrait le faire?
Vous avez pour vérifier la Ssl / tls version du dit serveur web prend en charge. Il pourrait être vous demandez pour plus de il prend en charge. Google comment utiliser OpenSSL pour obtenir cette information, je suis sûr que vous trouverez des infos ici sur stackoverflow.
Subhasish: Autre voie: ce site n'accepte TLSv1.2 seulement, et Java7 client par défaut ne fait pas de 1.2 (ou 1.1). Depuis Jsoup utilise HttpsURLConnection, si vous ne pouvez pas mettre à niveau vers Java8, vous pouvez définir la propriété système
J'étais juste deviner, bon vous avez vérifié les détails. Souhaitez transformer cela en une réponse ?
java version 7. La version de Java de soutien? Ou tout tiers bibliothèque devrait le faire?
Vous avez pour vérifier la Ssl / tls version du dit serveur web prend en charge. Il pourrait être vous demandez pour plus de il prend en charge. Google comment utiliser OpenSSL pour obtenir cette information, je suis sûr que vous trouverez des infos ici sur stackoverflow.
Subhasish: Autre voie: ce site n'accepte TLSv1.2 seulement, et Java7 client par défaut ne fait pas de 1.2 (ou 1.1). Depuis Jsoup utilise HttpsURLConnection, si vous ne pouvez pas mettre à niveau vers Java8, vous pouvez définir la propriété système
https.protocols=TLSv1,TLSv1.1,TLSv1.2
. Aussi, l'utilisation de la toute-confiance TrustManager veut dire que pratiquement toute personne ayant accès à votre réseau de faux ce site et d'exposer des données sensibles de l'envoyer.J'étais juste deviner, bon vous avez vérifié les détails. Souhaitez transformer cela en une réponse ?
OriginalL'auteur subhfyu546754 | 2015-11-08
Vous devez vous connecter pour publier un commentaire.
Vous souhaitez utiliser Java 8 ici car il prend en charge TLSv1.2 par défaut, avec de nouveaux suites de chiffrement.
Pourquoi ne pas Java 7?
Je l'ai testé sur ma boîte avec Java 7 (1.7.0_45) et a obtenu le même message d'erreur.
J'ai activé les messages de débogage et forcé TLSv1.2.
Puis j'ai frappé cette nouvelle erreur:
Enfin, je suis allé à Comodoca SSL de l'analyseur et de voir quelque chose d'intéressant.
Selon le protocole SSL de l'analyseur, le site que vous ciblez est activée uniquement les suites de chiffrement suivants:
(voir Plus de détails)
De mon côté, je ne suis pas l'un de ces suites. Vérifiez si vous en avez:
Voir le SSLSocketFactoryEx pour permettre la nécessaire suites de chiffrement.
Pourquoi Java 8?
Sur l'autre main, je réussis à runnnig le code en se déplaçant à partir de Java 7 de Java 8 (1.8.0_20) qui prennent en charge TLS v1.2 par défaut, et les suites de chiffrement.
Ici est un coupé liste de prise en charge des suites de chiffrement (71 suites au total) pour Java 8 (1.8.0_20) sur Windows 7.
Extrait de
Dernière pensée:
J'ai ajouté un extrait de code dans le post.
OriginalL'auteur Stephan
(À partir de commentaires de clôture, élargi un peu pour les futurs inventeurs)
Par l'expérience, ce site nécessite une version de protocole TLSv1.2 et bien que Java7 JSSE implémente cette, côté client par défaut désactive 1.2 et 1.1. Java8 ne les activer par défaut; ou dans Java7 depuis Jsoup utilise
HttpsURLConnection
vous pouvez modifier le permis versions avec système de la propriétéhttps.protocols
. Vous devez inclure au moinsTLSv1.2
et pour une plus grande flexibilité doit utiliser toutes acceptable à l'heure actuelle protocoleshttps.protocols=TLSv1,TLSv1.1,TLSv1.2
.Aussi, l'utilisation de la toute-confiance
TrustManager
signifie que pratiquement n'importe quelle crapule avec l'accès à votre réseau de faux ce site et d'exposer des données sensibles de l'envoyer. Il est préférable de configurer votre local truststore de sorte qu'il accepte le certificat(s) et ainsi de serveur(s) dont vous avez besoin, mais pas faux.Voir ici: stackoverflow.com/a/35698258/363573
OriginalL'auteur dave_thompson_085