Telechargement fichier depuis url en https
Résolu
jordane45
Messages postés
38486
Date d'inscription
Statut
Modérateur
Dernière intervention
-
Ibrahima.yi Messages postés 20 Date d'inscription Statut Membre Dernière intervention -
Ibrahima.yi Messages postés 20 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'essaye de télécharger un fichier depuis une url en https
https://machintruc.fr/bidule/monfichier.xls
NB: L'url a été modifiée depuis peu (n'était pas en https mais http tout court ) et le script fonctionnait parfaitement avant ce changement
Voici le code utilisé
J'avais un Message d'erreur :
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
J'ai donc suivi quelques docs sur le net indiquant qu'il suffisait d'installer le certificat du site dans le jdk/jre .... chose faite.
Mais maintenant... j'obtiens l'erreur : Server redirected too many times (20)
Auriez-vous, oh grands manitous du java..., une idée sur les causes du problème et un moyen d'y remédier ?
J'essaye de télécharger un fichier depuis une url en https
https://machintruc.fr/bidule/monfichier.xls
NB: L'url a été modifiée depuis peu (n'était pas en https mais http tout court ) et le script fonctionnait parfaitement avant ce changement
Voici le code utilisé
private void getA() throws Exception { Utilitaire.afficherCommentaire("Recuperation de " + this.filenameA); System.setProperty("http.auth.ntlm.domain", domaine); System.out.println("URL=" + adresseA); URL url = new URL(adresseA); URLConnection uc = url.openConnection(); int contentLength = uc.getContentLength(); InputStream raw = uc.getInputStream(); InputStream in = new BufferedInputStream(raw); byte[] data = new byte[contentLength]; int bytesRead = 0; int offset = 0; while (offset < contentLength) { bytesRead = in.read(data, offset, data.length - offset); if (bytesRead == -1) { break; } offset += bytesRead; } in.close(); if (offset != contentLength) { throw new IOException("Only read " + offset + " bytes; Expected " + contentLength + " bytes"); } FileOutputStream out = new FileOutputStream(this.filenameA); out.write(data); out.flush(); out.close(); }
J'avais un Message d'erreur :
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
J'ai donc suivi quelques docs sur le net indiquant qu'il suffisait d'installer le certificat du site dans le jdk/jre .... chose faite.
keytool -keystore cacerts -importcert -alias moncert -file d:\temp\moncert.cer
Mais maintenant... j'obtiens l'erreur : Server redirected too many times (20)
Auriez-vous, oh grands manitous du java..., une idée sur les causes du problème et un moyen d'y remédier ?
A voir également:
- Url telechargement
- Url - Guide
- Telechargement direct - Accueil - Outils
- Url masquée pour votre sécurité - Forum Programmation
- Comment lire un message masqué???? - Forum TV & Vidéo
- La nouvelle messagerie du Boncoin.... - Forum Réseaux sociaux
Remarque : plutôt que d'enregistrer le certificat du site dans le JDK (et donc de devoir le faire autant de fois qu'il y a de site à vérifier) il est plus intéressant d'enregistrer le certificat racine, afin d'autoriser tout les sites certifiés par cet organisme (s'il est fiable bien sûr).
Java connaît la plupart des autorités de certifications "standards" (VeriSign, GeoTrust, etc) ce qui couvre la plupart des sites https du web. Et régulièrement lors de mises à jours Java, de nouveaux certificats sont rajoutés.
Mais effectivement si le site est signé par un certificat maison... il faut le rajouter à la main.
On peut aussi (mais c'est plus moche) forcer Java à ignorer la vérification du certificat, un peu comme on peut le faire avec un navigateur web lorsque le https est "suspect".
C'est 12 minutes fictives.... j'ai cherché une bonne parti de la soirée hier avant de me décider de poster ma question....
Et puis... (c'est souvent mon cas....) au moment de poster ma question... hop...un moment de lucidité.... :-)
C'est en effet ce que j'ai fait.
J'y avait pensé .. mais je n'ai pas trouvé (sans avoir trop cherché de toutes façons..) comment faire.
A la limite... si tu as cette technique sous la main.. ça m'interesse quand même....
https://java.com/en/download/help/revocation_options.html
Cependant, je pense que pour un utilisateur lambda, faire cette manipulation est un peu compliqué, il en va de même pour l'installation du certificat dans sa JRE.
Programmatiquement on peut ignorer la certification en faisant une surcharge des méthodes de vérification et faire en sorte qu'elles acceptent toujours tout.
Remarque : cette méthode permet également de renforcer la sécurité en analysant plus finement le contenu des certificats pour éventuellement rajouter des règles de contrôles supplémentaires (par exemple pour ne contourner la sécurité que pour une URL particulière).
Exemple :
NB. j'ai pris https://www.google.fr comme exemple pour voir le contenu des certificats, en sachant que de toute façon Java accepte déjà le certificat de Google.
C'est à tester sur ton site récalcitrant ;-)
Merci m'sieur. Je jetterai un oeil là dessus prochainement et te ferai un petit retour.