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 :
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();
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
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)
Merci d'avance

[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]