Bonjour à tous,
J'essaie de me connecter à un serveur avec HTTPS. Or je n'ai pas accès à ce serveur à partir de mon poste.
J'ai donc utilisé Putty pour me créer un tunnel SSH sur le port 123 de ma machine. Ce tunnel me connecte sur une machine distante, à partir de laquelle je souhaite faire ma connexion HTTPS car elle a accès au serveur (vous me suivez toujours ?).
J'ai réussi à m'en sortir avec Putty et à lancer un tunnel SSH, cependant je ne sais pas comment faire pour ouvrir une connexion HTTPS en apssant par le tunnel SSH.
Quelqu'un serait-il capable de m'expliquer le principe ?
Pour le moment j'ai essayé d'utiliser le tunnel comme s'il s'agissait d'un proxy ... mais je suppose que ce n'est pas comme ça que je dois procéder ^^'
Voici le code que j'utilise actuellement mais qui ne fonctionne pas :
L'erreur obtenue est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 System.setProperty("java.protocol.handler.pkgs", "javax.net.ssl"); System.getProperties().put("javax.net.debug", "ssl"); System.getProperties().put("https.proxySet", "true"); System.getProperties().put("https.proxyHost", "localhost"); System.getProperties().put("https.proxyPort", "123"); System.getProperties().put("http.proxyHost", "localhost"); System.getProperties().put("http.proxyPort", "123"); java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); final TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(final java.security.cert.X509Certificate[] certs, final String authType) { } public void checkServerTrusted(final java.security.cert.X509Certificate[] certs, final String authType) { } }}; final SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); // La chaine encodée final String encodingGood = Base64.encodeString(loginMdp); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); final HttpsURLConnection conn = (HttpsURLConnection) new URL(uri).openConnection(); // Authentification basic conn.setRequestProperty("Authorization", "Basic " + encodingGood); conn.connect();
Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 trigger seeding of SecureRandom done seeding SecureRandom Exception in thread "main" java.util.NoSuchElementException at java.util.StringTokenizer.nextToken(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.doTunneling(Unknown Source) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source) at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source) at com.sfr.si.activation.m2m.monarc.core.collecte.webservice.TestWebService.testConnection(TestWebService.java:102) at com.sfr.si.activation.m2m.monarc.core.collecte.webservice.TestWebService.main(TestWebService.java:43)
[EDIT]
L'erreur venait d'une mauvaise utilisation du tunnel ssh. Voici ce que j'ai fait pour résoudre le problème :
J'ouvre un tunnel ssh vers le port Y du serveur auquel de veux envoyer ma requète sur le port X de ma machine.
Je lance la connexion ssh avec putty sur la machine distante qui a accès au serveur. Je me log.
Je lance mon programme java en remplaçant l'adresse du serveur par mon adresse en local :
URL à laquelle je veux envoyer ma requète (sans tunnel) : https://monserveur:Y/webservice
URL à laquelle j'envoie ma requète quand le tunnel est ouvert sur le port X :
https://localhost:X/webservice
Et là ... ça fonctionne !
[/EDIT]
Partager