Bonjour tout le monde
(Je suis novice en programmation java)

Projet : J’ai réalisé une application sous android à l’aide de windev mobile 19. Mon application communique avec un organisme via une requête https. Pour cela cet organisme m’a donné 2 certificats pour pouvoir être identifié.
J’ai réalisé un programme qui fonctionne mais pour cela l’utilisateur doit installer les deux certificats sur leur Android (difficile pour des utilisateurs lambda). Mais en plus lors de l’installation des certificats, l’utilisateur doit choisir entre un modèle, code pin ou mot de passe pour le verrouillage de leur écran (Contrainte supplémentaire).

L’idée : C’est d’importer avec l’application un keystore avec les deux certificats et lors de la requête de lui dire d’aller chercher les certificats dans ce keystore.

Voici les étapes
1) Création du keystore

Code : Sélectionner tout - Visualiser dans une fenêtre à part
keytool -genkey -alias alias -keystore .keystore
2) Ajout des certificats dans le keystore

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
keytool -import -file K:\travaux\keytool\certificat.crt -keystore "K:\travaux\keytool\.Keystore" -alias certificat -storepass "XXXXX"
keytool -import -file K:\travaux\keytool\gip2.crt -keystore "K:\travaux\keytool\.Keystore" -alias gip2 -storepass "XXXX"
3) Modification de la requête (code java dans une procedure de type java sous windev mobile)

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
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
public static String httpRequestPostAR(String URLDestination,String XmlSoap,String RepKeyStore,String FicKeystore) //throws KeyStoreException, NoSuchAlgorithmException
{	
Log.d("TIRAT",XmlSoap);
Log.d("TIRAT","******************************************************************************************");
	String strResponse = null;
	try {
		DefaultHttpClient httpclient = new DefaultHttpClient();
		//HttpClient client = new DefaultHttpClient();
		HttpPost post = new HttpPost(URLDestination);
		StringEntity se = new StringEntity(XmlSoap);
		se.setContentEncoding("application/soap+xml");	
		post.setEntity(se);
 
		post.addHeader("Content-type", "application/soap+xml; charset=utf-8"); 
		post.addHeader("SOAPAction", "urn:servicepecb2:4.0.1:calculer");
		post.addHeader("Accept-Charset", "utf-8");
		post.addHeader("Accept", "text/xml,application/text+xml,application/soap+xml");
 
		//rajout code keystore
 
		KeyStore trustStore= null;
 
		trustStore  = KeyStore.getInstance(KeyStore.getDefaultType());
 
		FileInputStream instream = new FileInputStream(new File(".Keystore"));
		try {
 
			trustStore.load(instream, "XXXXXXX".toCharArray());
		} finally {
			instream.close();
		}
 
		SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore);
		Scheme sch = new Scheme("https", socketFactory, 443);
		httpclient.getConnectionManager().getSchemeRegistry().register(sch);
 
		//client.getConnectionManager().getSchemeRegistry().register(new Scheme("SSLSocketFactory", SSLSocketFactory.getSocketFactory(), 443));
 
		//HttpResponse response = client.execute(post);
		HttpResponse response = httpclient.execute(post);
		HttpEntity entity = response.getEntity();
		StringBuffer sb1 = new StringBuffer();
		BufferedReader br1 = new BufferedReader(new InputStreamReader(entity.getContent()));
		String in1 = "";
		while ((in1 = br1.readLine()) != null) 
		{
			sb1.append(in1 + "\n");
		}
		br1.close();
		Log.d("TIRAT","sbuilder"+sb1.toString());
		strResponse=sb1.toString();
	}
	catch (IOException e) 
	{
		Log.d("TIRAT","Erreur"+e.getMessage().toString());
		Log.d("TIRAT","Erreur"+e.getLocalizedMessage());
	}
	catch (  KeyStoreException e) {
		Log.d("TIRAT","SSLKeyStoreException startup problem."+e.getLocalizedMessage());
	}
	catch (  NoSuchAlgorithmException e) {
		Log.d("TIRAT","SSLNoSuchAlgorithmException startup problem."+e.getLocalizedMessage());
	}
	catch (  CertificateException e) {
		Log.d("TIRAT","SSLCertificateException startup problem."+e.getLocalizedMessage());
	}
	catch (  KeyManagementException e) {
		Log.d("TIRAT","SSLKeyManagementException startup problem."+e.getLocalizedMessage());
	}
	catch (  UnrecoverableKeyException e) {
		Log.d("TIRAT","SSLUnrecoverableKeyException startup problem."+e.getLocalizedMessage());
	}
	return strResponse;
}

Erreur sur le simulateur : Erreur/.Keystore: open failed: ENOENT (No such file or directory)




4) J’ai rajouté l’emplacement du .keystore avec

Code : Sélectionner tout - Visualiser dans une fenêtre à part
System.setProperty("javax.net.ssl.trustStore",RepKeyStore);
Avec RepKeyStore= ComplèteRep(SysRepCarteStockage())

Erreur sur le simulateur : Erreur/.Keystore: open failed: ENOENT (No such file or directory)



5) J’ai rajouté le repertoire du .keystore

Code : Sélectionner tout - Visualiser dans une fenêtre à part
FileInputStream instream = new FileInputStream(new File(FicKeystore));
Avec FicKeystore= ComplèteRep(SysRepCarteStockage())+".Keystore"

Erreur sur le simulateur : ErreurWrong version of Key store
Et la je ne vois pas ce que je dois faire ?


Question 1 : je ne sais pas si c'est possible?
Question 2 : si c'est possible qu'est ce que je fait de mal?

Cordialement law56100