Précédent   Forum des professionnels en informatique > Java > Développement Web en Java > Applets
Applets Vos questions sur les Applets
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/01/2012, 15h28   #1
Membre confirmé
 
Avatar de DarkSeiryu
 
Homme Mickaël
Développeur Web
Inscription : janvier 2009
Messages : 408
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Âge : 23
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2009
Messages : 408
Points : 234
Points : 234
Envoyer un message via MSN à DarkSeiryu
Par défaut Applet et HTTPS

Bonjour tout le monde !

Bon, j'ai deux soucis concernant mon Applet avec le HTTPS...
  1. elle doit s'exécuter sur un site HTTPS
  2. elle doit me permettre de transmettre des fichiers sur le serveur où est hébergé ce même site (donc en HTTPS)
Donc, mon premier souci à régler étant l'exécution de l'Applet sur mon site HTTPS.
Il faut savoir qu'un certificat est nécessaire pour se connecter au site Web en question, et c'est surement pour cela que mon Applet refuse de s'exécuter sur le site vu que dans NetBeans ou sur un site HTTP il n'y a pas de souci.
Exception retournée quand j'exécute l'Applet sur le site HTTPS (ça met d'ailleurs sacrément longtemps à me sortir l'Exception...) :
Citation:
java.lang.ClassNotFoundException: ExportHeliosJApplet.class
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Exception : java.lang.ClassNotFoundException: ExportHeliosJApplet.class
Du coup, que faut-il que je fasse pour que mon Applet s'exécute sur mon site ?

Ensuite, le transfert de fichiers.
Jusque là, on a un autre Applet fonctionnel nous permettant de faire des transferts, mais sur du HTTP à l'aide de l'outil HttpClient d'Apache.
D'après mes recherches, il y a une histoire de KeyStore et TrustStore. J'ai d'ailleurs trouvé pas mal d'exemples de code permettant soit de passer outre la demande de certificat du serveur (ça semble fonctionner) soit d'autoriser tous les hosts et tous les certificats (ça n'a pas fonctionné). Cela dit, je suis un peu perdu et ai du mal à trouver la bonne solution, sachant qu'il faut que je puisse faire ce transfert de fichier sur du HTTPS (pas trop le choix vu que le site requiert un certificat).
Donc, comment faire pour arriver à transmettre des fichiers en HTTPS ?

D'avance, merci.

DarkSeiryu
DarkSeiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 15h47   #2
Membre chevronné
 
Inscription : février 2010
Messages : 580
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : février 2010
Messages : 580
Points : 727
Points : 727
Bonjour,

Citation:
Il faut savoir qu'un certificat est nécessaire pour se connecter au site Web en question, et c'est surement pour cela que mon Applet refuse de s'exécuter sur le site vu que dans NetBeans ou sur un site HTTP il n'y a pas de souci.
Déjà, l'applet ne s'execute pas sur le site, mais sur le poste client.

Ensuite il va te falloir signer l'applet pour faire quoi que ce soit avec un fichier. Et enfin faire du https dans l'applet. C'est pas forcement très compliqué d'autant que sur internet il y a plein d'exemple.

Mais il est important que tu te documente sur ce qu'est un Keystore, un TrustStore et un certificat. Tu n'y couperas pas.

Bon courage,
Jimmy_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 15h57   #3
Membre confirmé
 
Avatar de DarkSeiryu
 
Homme Mickaël
Développeur Web
Inscription : janvier 2009
Messages : 408
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Âge : 23
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2009
Messages : 408
Points : 234
Points : 234
Envoyer un message via MSN à DarkSeiryu
Yo ! Merci pour ta réponse.

Alors, je sais que l'Applet s'exécute sur le poste client. Je me suis peut-être mal exprimé, mais quand je la lance depuis un site HTTP ça fonctionne, mais sur un HTTPS ça ne fonctionne pas. D'où ma demande.
Ensuite, l'Applet est déjà signé (oublié de le préciser, désolé ^^). Pour ce qui est du KeyStore, je me suis documenté. Surtout que que j'ai mon propre objet KeyStore dans lequel je stocke les certificats utilisateurs qui sont stockés dans son magasin de certificats Windows ou sur le trousseau de clés Mac. Ce que je ne sais pas, c'est quoi rajouter dans mon KeyStore pour que le transfert de fichiers puisse s'éxécuter en HTTPS.

Enfin, faire du HTTPS dans l'Applet. Ben oui je m'en doute, mais ma question c'est comment faire ? Quelle(s) API(s) utiliser ? Parce que les exemples dont tu parles, je ne les ai pas vu alors que j'ai fait moults recherches.

Merci d'avance !

DarkSeiryu
DarkSeiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 15h42   #4
Membre confirmé
 
Avatar de DarkSeiryu
 
Homme Mickaël
Développeur Web
Inscription : janvier 2009
Messages : 408
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Âge : 23
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2009
Messages : 408
Points : 234
Points : 234
Envoyer un message via MSN à DarkSeiryu
Re à tous.

Du coup, à force de recherches, j'ai fini par me faire une méthode qui, théoriquement (ouais parce que pour moi c'est censé fonctionner ), devrait me permettre de faire mes transferts de fichier dans un environnement HTTPS :

Code :
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
public static void sendViaHttps(String url, File file, ArrayList<Proxy> proxysList) {
 
	try {
//		System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
//		java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
 
		char[] certPass = "myPass".toCharArray();
		InputStream certInput = AppletAWS.frame.getClass().getResourceAsStream("path/to/my/certificate");
 
		KeyStore ks = KeyStore.getInstance("PKCS12");
		ks.load(certInput, certPass);
 
		KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
		keyManagerFactory.init(ks, certPass);
		KeyManager[] keyManager = keyManagerFactory.getKeyManagers();
 
		TrustManager[] trustManager = new TrustManager[]{
			new X509TrustManager() {
				public boolean checkClientTrusted(java.security.cert.X509Certificate[] chain) {
					return true;
				}
 
				public boolean isServerTrusted(java.security.cert.X509Certificate[] chain) {
					return true;
				}
 
				public boolean isClientTrusted(java.security.cert.X509Certificate[] chain) {
					return true;
				}
 
				@Override
				public java.security.cert.X509Certificate[] getAcceptedIssuers() {
					return null;
				}
 
				@Override
				public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {}
 
				@Override
				public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {}
			}
		};
 
		SSLContext sslContext = SSLContext.getInstance("SSL");
		sslContext.init(keyManager, trustManager, null);
 
		for (Proxy proxy : proxysList) {
			InetSocketAddress addr = (InetSocketAddress) proxy.address();
 
			System.setProperty("http.proxyHost", addr.getHostName()); // L'adresse du proxy.
			System.setProperty("http.proxyPort", Integer.toString(addr.getPort()));	// Le port du proxy.
		}
 
		HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
		HttpsURLConnection connection = (HttpsURLConnection) new URL(url).openConnection();
 
		connection.setDoInput(true);
		connection.setDoOutput(true);
 
		String cookieHeader = connection.getHeaderField("set-cookie");
		if (cookieHeader != null) {
			String cuki	= "";
 
			int index	= cookieHeader.indexOf(";");
			if (index >= 0)
				cuki = cookieHeader.substring(0, index);
 
			connection.setRequestProperty("Cookie", cuki);
		}
 
		connection.setRequestMethod("POST");
		connection.setFollowRedirects(true);
 
		final String encodage = "UTF-8";
		String query = "fichier=" + URLEncoder.encode(new FileBody(file).getTransferEncoding(), encodage);
 
		//connection.setRequestProperty("Accept-Language","it");
		//connection.setRequestProperty("Accept", "application/cfm, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, //*/*");
		//connection.setRequestProperty("Accept-Encoding","gzip");
 
		int queryLength = query.length();
		AppletAWS.err("\nQuery : " + query);
		AppletAWS.err("Longueur de la query : " + queryLength + "\n");
 
		connection.setRequestProperty("Content-length", String.valueOf(queryLength));
		connection.setRequestProperty("Content-Type", "application/x-www- form-urlencoded");
		connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)");
 
		// open up the output stream of the connection 
		DataOutputStream output = new DataOutputStream(connection.getOutputStream());
 
		// write out the data 
		output.writeBytes(query);
		output.close();
 
		AppletAWS.print("Resp Code:" + connection.getResponseCode());
		AppletAWS.print("Resp Message:" + connection.getResponseMessage());
 
		// get ready to read the response from the cgi script 
		DataInputStream input = new DataInputStream(connection.getInputStream());
 
		// read in each character until end-of-stream is detected 
		for (int c = input.read(); c != -1; c = input.read())
			AppletAWS.print((char) c);
 
		input.close();
	}
	catch (Exception e) {
		AppletAWS.err("Something bad just happened.");
		AppletAWS.err(e);
		e.printStackTrace();
	}
}
Quand je fais un test de transfert, voilà ce que la console me sort :
Code :
1
2
3
4
5
6
7
8
java.net.ProtocolException: Can't reset method: already connected
java.net.ProtocolException: Can't reset method: already connected
Something bad just happened.
java.net.ProtocolException: Can't reset method: already connected
	at java.net.HttpURLConnection.setRequestMethod(HttpURLConnection.java:320)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.setRequestMethod(HttpsURLConnectionImpl.java:354)
	at OutilsAWS.Outils.SSLConnection.HttpsPost.sendViaHttps(HttpsPost.java:106)
	at OutilsAWS.Thread.Transfert.Http.Apache.UploadApache.run(UploadApache.java:103)
La ligne 106 de ma classe OutilsAWS.Outils.SSLConnection.HttpsPost est :
Code :
connection.setRequestMethod("POST");
Malgré plusieurs tentatives, je n'arrive pas à résoudre ce problème... Est-ce que quelqu'un pourrait m'aider SVP ?

Autre question, tant que j'y suis, est-ce que cette méthode me permettra de faire du transfert de fichier ? Parce que j'ai cru comprendre que ça n'acceptait pas les données binaires (donc les fichiers).
Si le transfert de fichier est censé fonctionner avec cette méthode, est-ce que je m'y prend correctement avec mon :
Code :
String query = "fichier=" + URLEncoder.encode(new FileBody(file).getTransferEncoding(), encodage);
?

Merci d'avance.

DarkSeiryu

EDIT : j'ai pompé cette méthode via deux sources :
- http://www.java-samples.com/showtuto...utorialid=1343 pour les HttpsUrlConnection
- http://www.developpez.net/forums/d24...y/#post2227955 pour tout le SSLContext

EDIT 2 : pensant que le bug venait du fait que cette méthode est appelée dans une boucle pour chacun des fichiers à transférer, j'ai rajouté la déconnexion de mon HttpsURLConnection à la fin de ma méthode mais ça n'a rien changé...
DarkSeiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 11h54   #5
Membre confirmé
 
Avatar de DarkSeiryu
 
Homme Mickaël
Développeur Web
Inscription : janvier 2009
Messages : 408
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Âge : 23
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2009
Messages : 408
Points : 234
Points : 234
Envoyer un message via MSN à DarkSeiryu
Désolé je reviens à l'assaut mais j'ai vraiment besoin d'aide (c'pour le boulot ^^).

J'ai effectué des modif' du coup. Au lieu de tout faire dans une méthode static, j'ai fait une vraie classe avec un constructeur qui m'initialise la connexion HTTPS, une autre qui me crée la query et une dernière qui effectue l'envoi.
Voici le code de ma classe :

Code :
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
import UI.Composent.AppletAWS.AppletAWS;
import aws.apache.http.entity.mime.content.FileBody;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.InputStream;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.net.URLEncoder;
import java.security.KeyStore;
import java.util.ArrayList;
import java.util.Enumeration;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
 
/**
 * A free Java sample program to POST to a HTTPS secure SSL website.
 * Free for use as long as this comment is included in the program as it is.
 * @see http://www.java-samples.com/showtutorial.php?tutorialid=1343
 * @see http://www.java-samples.com for more Free Java programs available for download
 * 
 * Pour tous ce qui touche aux contexte SSL :
 * @see http://www.developpez.net/forums/d246453/java/developpement-web-java/web-services/connexion-java-client-serveur-https-via-proxy/#post2227955
 * @author William Alexander
 */
public class HttpsPost {
	private final String _certPath		= "/path/to/my/certificate.p12"; // Le chemin vers le certificat.
	private final char[] _certPass		= "certPass".toCharArray(); // Le mot de passe du certificat.
	private final char[] _keyStorePass	= "keyStorePass".toCharArray(); // Le mot de passe du KeyStore.
 
	private HttpsURLConnection _connection;
	private String _query;
	private String _response;
 
	/**
	 * Constructeur. Initialise la connexion HTTPS.
	 * @param url l'URL à laquelle se connecter
	 * @param proxysList la liste des proxys détectés
	 */
	public HttpsPost(String url, ArrayList<Proxy> proxysList) {
		this._query		= "";
		this._response	= "";
 
		try {
//			System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
//			java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
 
			// On récupère le certificat.
			InputStream certInput = AppletAWS.frame.getClass().getResourceAsStream(this._certPath);
 
			// Création d'un KeyStore PKCS12.
			KeyStore ksP12 = KeyStore.getInstance("PKCS12");
			ksP12.load(certInput, this._certPass); // Ajout du certificat dans ce KeyStore.
 
			String alias = ""; // Va contenir l'alias du certificat.
 
			// Récupération de l'alias.
			Enumeration aliases = ksP12.aliases();
			while (aliases.hasMoreElements())
				alias = (String) aliases.nextElement();
 
			KeyStore ksJks = KeyStore.getInstance("JKS"); // Création d'un KeyStore Java.
			ksJks.load(null, this._keyStorePass);
 
			 // Ajout du certificat dans le KeyStore Java.
			ksJks.setKeyEntry(
				alias,
				ksP12.getKey(alias, this._certPass), // La clé du certificat.
				this._keyStorePass,
				ksP12.getCertificateChain(alias) // Le certificat.
			);
 
			aliases = ksJks.aliases();
			while (aliases.hasMoreElements())
				AppletAWS.print("\n" + (String) aliases.nextElement());
 
			// Création d'une KeyManagerFactory.
			KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
			keyManagerFactory.init(ksJks, this._keyStorePass);
 
			KeyManager[] keyManager = keyManagerFactory.getKeyManagers();
 
			// TODO : créer un TrustManager sécurisé dans lequel on met nos données de certificats.
			// Pour l'instant, afin de faire des tests, je fais confiance à tous les certificats.
			TrustManager[] trustManager = new TrustManager[] {
				new X509TrustManager() {
					public boolean checkClientTrusted(java.security.cert.X509Certificate[] chain) {
						return true;
					}
 
					public boolean isServerTrusted(java.security.cert.X509Certificate[] chain) {
						return true;
					}
 
					public boolean isClientTrusted(java.security.cert.X509Certificate[] chain) {
						return true;
					}
 
					@Override
					public java.security.cert.X509Certificate[] getAcceptedIssuers() {
						return null;
					}
 
					@Override
					public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {}
 
					@Override
					public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {}
				}
			};
 
			// On crée notre contexte SSL.
			SSLContext sslContext = SSLContext.getInstance("SSL");
			sslContext.init(keyManager, trustManager, null);
 
			// Si il y a des proxys, on les ajoute à la connexion.
			if (!proxysList.isEmpty()) {
				for (Proxy proxy : proxysList) {
					InetSocketAddress addr = (InetSocketAddress) proxy.address();
 
					System.setProperty("http.proxyHost", addr.getHostName()); // L'adresse du proxy.
					System.setProperty("http.proxyPort", Integer.toString(addr.getPort()));	// Le port du proxy.
				}
			}
 
			// On ajoute à l'HttpsURLConnection notre constexte SSL.
			HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
			HttpsURLConnection.setFollowRedirects(true);
 
			// Création et initialisation de la connexion HTTPS.
			this._connection = (HttpsURLConnection) new URL(url).openConnection();
			this._connection.setDoInput(true);
			this._connection.setDoOutput(true);
 
			String cookieHeader = this._connection.getHeaderField("set-cookie");
			if (cookieHeader != null) {
				String cuki	= "";
 
				int index = cookieHeader.indexOf(";");
				if (index >= 0)
					cuki = cookieHeader.substring(0, index);
 
				this._connection.setRequestProperty("Cookie", cuki);
			}
 
//			this._connection.setRequestMethod("POST");
		}
		catch (Exception e) {
			AppletAWS.err("Une erreur est survenue pendant la création de la connexion sécurisée : " + e.getMessage());
			e.printStackTrace();
		}
	}
 
	/**
	 * Crée le query à envoyer en POST.
	 * @param file le fichier à envoyer
	 * @param idClient l'ID du client
	 * @param idEtab l'ID de l'établissement
	 * @param md5File le MD5 du fichier à transférer
	 */
	public void setQuery(File file, String idClient, String idEtab, String md5File) {
		final String encodage = "UTF-8";
 
		try {
			this._query = "fichier=" + URLEncoder.encode(new FileBody(file).getTransferEncoding(), encodage);
			this._query += "&idClient=" + URLEncoder.encode(idClient, encodage);
			this._query += "&idEtab=" + URLEncoder.encode(idEtab, encodage);
			this._query += "&md5=" + URLEncoder.encode(md5File, encodage);
 
			int queryLength = this._query.length();
			AppletAWS.err("\nQuery : " + this._query);
			AppletAWS.err("Longueur de la query : " + queryLength + "\n");
 
			this._connection.setRequestProperty("Content-length", String.valueOf(queryLength));
			this._connection.setRequestProperty("Content-Type", "application/x-www- form-urlencoded");
			this._connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)");
		}
		catch (Exception e) {
			AppletAWS.print("Une erreur est survenue lors de la création de la requête HTTPS : " + e.getMessage());
			e.printStackTrace();
		}
	}
 
	/**
	 * Envoi la requête.
	 */
	public void upload() {
		try {
			//connection.setRequestProperty("Accept-Language","it");
			//connection.setRequestProperty("Accept", "application/cfm, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, //*/*");
			//connection.setRequestProperty("Accept-Encoding","gzip");
 
			// open up the output stream of the connection 
			DataOutputStream output = new DataOutputStream(this._connection.getOutputStream());
 
			// write out the data 
			output.writeBytes(this._query);
			output.close();
 
			int responseCode	= this._connection.getResponseCode();
			String responseMsg	= this._connection.getResponseMessage();
 
			AppletAWS.print("Resp code : " + responseCode);
			AppletAWS.print("Resp message : " + responseMsg);
 
			// get ready to read the response from the cgi script 
			DataInputStream input = new DataInputStream(this._connection.getInputStream());
 
			// read in each character until end-of-stream is detected 
			AppletAWS.print("\nREPONSE :");
			for (int c = input.read(); c != -1; c = input.read())
				AppletAWS.print((char) c);
 
			input.close();
		}
		catch (Exception e) {
			AppletAWS.err("Une erreur est survenue pendant le transfert : " + e.getMessage());
			e.printStackTrace();
		}
	}
 
	/**
	 * Ferme la connexion.
	 */
	public void closeConnection() {
		this._connection.disconnect();
	}
}
Du coup, pour l'utilisation, je crée mon objet HttpsPost avant ma boucle sur ma liste de fichiers à envoyer. Je passe cette connexion à mon Panel qui la passe au thread qui va effectuer l'envoi.
Dans la méthode run() de ce thread, j'ai ça :

Code :
1
2
3
4
5
6
7
8
try {
	this._httpsConn.setQuery(this._pli.getDossier(), ((String) this.fireGetParam("Id_Client")), ((String) this.fireGetParam("Id_Etablissement")), this._pli.getMd5());
	this._httpsConn.upload();
}
catch (Exception e) {
	System.out.println("Une erreur est survenue : " + e.getMessage());
	e.printStackTrace();
}
Et bref, quand j'exécute l'Applet, voici l'exception que je me mange au moment où j'essaie d'envoyer les fichiers :
Code :
1
2
3
4
5
6
7
8
9
Une erreur est survenue pendant le transfert : HTTPS hostname wrong:  should be <mon.site.com>
java.io.IOException: HTTPS hostname wrong:  should be <mon.site.com>
	at sun.net.www.protocol.https.HttpsClient.checkURLSpoofing(HttpsClient.java:524)
	at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:448)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
	at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1014)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)
	at OutilsAWS.Outils.SSLConnection.HttpsPost.upload(HttpsPost.java:201)
	at OutilsAWS.Thread.Transfert.Https.UploadHttps.run(UploadHttps.java:52)
A cette ligne là :
Code :
DataOutputStream output = new DataOutputStream(this._connection.getOutputStream());
Du coup, ça semble venir d'un problème entre le certificat serveur et le certificat que je passe à mon Java KeyStore. Mais je ne comprends pas pourquoi ça ferait ça, étant donné que ce certificat, je m'en sers pour me connecter au site en question...

Est-ce que quelqu'un aurait un élément de réponse s'il-vous-plaît ?
DarkSeiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 17h17   #6
Membre confirmé
 
Avatar de DarkSeiryu
 
Homme Mickaël
Développeur Web
Inscription : janvier 2009
Messages : 408
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Âge : 23
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2009
Messages : 408
Points : 234
Points : 234
Envoyer un message via MSN à DarkSeiryu
Hum autant pour moi, il suffisait de faire un HostnameVerifier. Je pensais l'avoir déjà fait c'pour ça que quand j'ai cherché je suis passé à côté.

Le code si y'a des intéressés :
Code :
1
2
3
4
5
6
7
8
9
HostnameVerifier myHv = new HostnameVerifier() {
 
	@Override
	public boolean verify(String hostName, javax.net.ssl.SSLSession session) {
		return true;
	}
};
 
HttpsURLConnection.setDefaultHostnameVerifier(myHv);
Attention cependant, ce Verifier accepte tous les hostnames, ce qui n'est pas sécurisé. Pensez à faire le votre qui acceptera vos propres paramètres.

Maintenant il semblerait que ma connexion en HTTPS fonctionne, puisque l'Exception qui est maintenant retournée est une java.net.SocketException: Unexpected end of file from server.
Je vais aller ouvrir un thread sur le forum concerné.
DarkSeiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h56.


 
 
 
 
Partenaires

Hébergement Web