IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    mars 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : mars 2008
    Messages : 324
    Points : 150
    Points
    150
    Par défaut Requêtes HTTPS à l'aide de SSLSocketFactory avec deux certificats
    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

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    mars 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : mars 2008
    Messages : 324
    Points : 150
    Points
    150
    Par défaut
    Le problème était mon keystore.
    IL fallait un keystore de type BKS

    je me suis inspirer de lien : http://tiku.io/questions/784052/andr...n-of-key-store
    et http://keystore-explorer.sourceforge.net/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête avec deux JOIN
    Par Tintou dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 26/09/2007, 18h03
  2. Requête avec deux tables m:m
    Par Seb981 dans le forum Langage SQL
    Réponses: 23
    Dernier message: 10/09/2007, 14h15
  3. Réponses: 21
    Dernier message: 03/08/2007, 12h19
  4. résultats requête avec deux tables
    Par ideal23 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/03/2007, 10h10
  5. Requête SELECT avec deux champs dans une colonne ??
    Par fredhali2000 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 08/06/2006, 10h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo