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

Android Discussion :

Installer un certificat automatiquement


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 325
    Par défaut Installer un certificat automatiquement
    Bonjour

    J'ai une petite application sur android qui a besoin que 3 certificats soient installés pour fonctionner.

    Lors de l'installation de l'applis, je copie dans la sdcart les 3 fichiers (certificat.crt, gips1.crt et gips2.crt)
    Pour les installer manuellement il suffit d'aller dans paramètres->sécurité->Installer depuis stock. périph.

    Je voudrais lors du premier lancement de mon application un procédure qui puisse les installer.
    Mon application a été crée sous windev mobile. Dans windev mobile je peux réaliser des procédures en java.

    Je crois qu'il faut que j'utilise Keystore mais là je ne comprends pas trop comment cela fonctionne.

    cordialement Law56100

    Ps je ne sais pas si je suis au bon endroit

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

    Informations forums :
    Inscription : Mars 2008
    Messages : 325
    Par défaut
    Bonjour

    Il y a beaucoup de chose qui m'échappe mais j'ai trouvé des exemples sur le net.
    Voici le code que j'ai réalisé mais je n'y comprends pas tout et bien sur cela 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
    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
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.security.Key;
    import java.security.KeyStore;
    import java.security.cert.Certificate;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.DataInputStream;
    import java.io.ByteArrayInputStream;
    import java.security.spec.*;
    import java.security.cert.Certificate;
    import java.security.cert.CertificateFactory;
    import java.util.Collection;
     
    public static void main() 
    {
    	try {
    		String certfile = "/storage/sdcard0/certificat.crt"; 
     
    		FileInputStream is = new FileInputStream("mon.keystore");
     
    		KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
    		keystore.load(is, "password".toCharArray());
     
    		String alias = "monalias";
    		char[] password = "password".toCharArray();
     
    		//////
     
    		CertificateFactory cf = CertificateFactory.getInstance("X.509");
    		FileInputStream certstream = new FileInputStream(certfile);
    		Certificate certs =  cf.generateCertificate(certstream);
     
    		///
    		File keystoreFile = new File("mon.keystore");
    		// Load the keystore contents
    		FileInputStream in = new FileInputStream(keystoreFile);
    		keystore.load(in, password);
    		in.close();
     
    		// Add the certificate
    		keystore.setCertificateEntry(alias, certs);
     
    		// Save the new keystore contents
    		FileOutputStream out = new FileOutputStream(keystoreFile);
    		keystore.store(out, password);
    		out.close();
     
    	} 
    	catch (Exception e) 
    	{
    		e.printStackTrace();
    	}
    }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 325
    Par défaut
    Je continu mes recherches. Voici ou j'en suis

    J'ai installé eclipse et j'ai suis un tuto pour pourvoir utilisé la partie android sur eclipse.
    J'ai crée un projet "Certificat" ou j'utilise le MainActivity pour créer le projet. Là j'ai mis un bouton pour installer le certificat dans Paramètres->Personnel->sécurité->Stockage des infos d'identification->infos d'idet. sécurisées.

    Voici le code de mon activity-main.xml
    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
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.etib.certificat.MainActivity" >
     
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
     
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/textView1"
            android:layout_below="@+id/textView1"
            android:layout_marginLeft="45dp"
            android:layout_marginTop="33dp"
     
       		android:onClick="clickFunc"
     
     
        	android:text="Button" />
     
    </RelativeLayout>
    code du MainActivity.java
    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
     
    package com.etib.certificat;
     
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.app.Activity;
    import android.view.View;
    import android.widget.Toast;
    import android.view.View.OnClickListener;
    import android.widget.Button;
     
    public class MainActivity extends ActionBarActivity {
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    	}
     
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		// Inflate the menu; this adds items to the action bar if it is present.
    		getMenuInflater().inflate(R.menu.main, menu);
    		return true;
    	}
     
    	@Override
    	public boolean onOptionsItemSelected(MenuItem item) {
    		// Handle action bar item clicks here. The action bar will
    		// automatically handle clicks on the Home/Up button, so long
    		// as you specify a parent activity in AndroidManifest.xml.
    		int id = item.getItemId();
    		if (id == R.id.action_settings) {
    			return true;
    		}
    		return super.onOptionsItemSelected(item);
    	}
     
    	public void clickFunc(View view) throws Exception{
    		String sInfo = null; 
    		// Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show();
    		ImportCa.main();
    		//AddCertificat.main();
    		//sInfo=ChargeCertificat.main();
    		//Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
    	//	finish();
        //    System.exit(0);
    	}
     
    }
    le code de ma class ImportCa
    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
    package com.etib.certificat;
     
    import java.io.ByteArrayInputStream;
    import java.io.DataInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.security.KeyStore;
    import java.security.cert.Certificate;
    import java.security.cert.CertificateFactory;
     
    public class ImportCa {
     
    	public static void main() throws Exception {
     
    		String certfile = "/storage/sdcard0/certificat.cer"; /*your cert path*/
    		FileInputStream is = new FileInputStream("yourKeyStore.keystore");
     
    		KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
    		keystore.load(is, "yourKeyStorePass".toCharArray());
     
    		String alias = "youralias";
    		char[] password = "yourKeyStorePass".toCharArray();
     
    		//////
     
    		CertificateFactory cf = CertificateFactory.getInstance("X.509");
    		//InputStream certstream = fullStream (certfile);
    		InputStream certstream = new FileInputStream(certfile);
    		Certificate certs =  cf.generateCertificate(certstream);
    		certstream.close();
     
    		///
    		File keystoreFile = new File("yourKeyStorePass.keystore");
    		// Load the keystore contents
    		FileInputStream in = new FileInputStream(keystoreFile);
    		keystore.load(in, password);
    		in.close();
     
    		// Add the certificate
    		keystore.setCertificateEntry(alias, certs);
     
    		// Save the new keystore contents
    		FileOutputStream out = new FileOutputStream(keystoreFile);
    		keystore.store(out, password);
    		out.close();
     
    	}
     
    	static private InputStream fullStream ( String fname ) throws IOException {
    		FileInputStream fis = new FileInputStream(fname);
    		DataInputStream dis = new DataInputStream(fis);
    		byte[] bytes = new byte[dis.available()];
    		dis.readFully(bytes);
    		ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    		return bais;
    	}
     
     
    }
    Lorsque je lance le Run as sur ma tablette, j'ai bien le projet qui s'ouvre la je clique sur le boutton, le boutton reste sur l'état bloqué pendant plusieurs seconde puis l'application ce ferme et après j'ai un message sur ma tablette "Certificat s'est arrêté" avec un boutton Ok en dessous.

    Voici les message que j'ai dans le logCat
    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
    09-12 14:30:40.934: D/libEGL(2328): loaded /system/lib/egl/libGLESv2_mali.so
    09-12 14:30:40.939: D/(2328): Device driver API match
    09-12 14:30:40.939: D/(2328): Device driver API version: 10
    09-12 14:30:40.939: D/(2328): User space API version: 10 
    09-12 14:30:40.939: D/(2328): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Tue Oct 16 15:37:13 KST 2012 
    09-12 14:30:40.969: D/OpenGLRenderer(2328): Enabling debug mode 0
    09-12 14:30:47.234: D/AndroidRuntime(2328): Shutting down VM
    09-12 14:30:47.234: W/dalvikvm(2328): threadid=1: thread exiting with uncaught exception (group=0x418322a0)
    09-12 14:30:47.244: E/AndroidRuntime(2328): FATAL EXCEPTION: main
    09-12 14:30:47.244: E/AndroidRuntime(2328): java.lang.IllegalStateException: Could not execute method of the activity
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at android.view.View$1.onClick(View.java:3704)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at android.view.View.performClick(View.java:4232)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at android.view.View$PerformClick.run(View.java:17318)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at android.os.Handler.handleCallback(Handler.java:615)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at android.os.Handler.dispatchMessage(Handler.java:92)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at android.os.Looper.loop(Looper.java:137)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at android.app.ActivityThread.main(ActivityThread.java:4921)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at java.lang.reflect.Method.invokeNative(Native Method)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at java.lang.reflect.Method.invoke(Method.java:511)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at dalvik.system.NativeStart.main(Native Method)
    09-12 14:30:47.244: E/AndroidRuntime(2328): Caused by: java.lang.reflect.InvocationTargetException
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at java.lang.reflect.Method.invokeNative(Native Method)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at java.lang.reflect.Method.invoke(Method.java:511)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at android.view.View$1.onClick(View.java:3699)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	... 11 more
    09-12 14:30:47.244: E/AndroidRuntime(2328): Caused by: java.io.FileNotFoundException: /yourKeyStore.keystore: open failed: ENOENT (No such file or directory)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at libcore.io.IoBridge.open(IoBridge.java:416)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at java.io.FileInputStream.<init>(FileInputStream.java:78)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at java.io.FileInputStream.<init>(FileInputStream.java:105)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at com.etib.certificat.ImportCa.main(ImportCa.java:19)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at com.etib.certificat.MainActivity.clickFunc(MainActivity.java:43)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	... 14 more
    09-12 14:30:47.244: E/AndroidRuntime(2328): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at libcore.io.Posix.open(Native Method)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	at libcore.io.IoBridge.open(IoBridge.java:400)
    09-12 14:30:47.244: E/AndroidRuntime(2328): 	... 18 more
    Je ne comprends pas trop ce que cela veut dire.

    Je suis un programmeur windev, je n'y connais rien en java. Cela fait 15 jours que je viens de commencer un nouveau taff, j'ai pour mission d'installer les 3 certificat .cer automatiquement et je n'y arrive pas.
    Est ce que j'utilise le bon code et les bonne fonction je ne sais pas.

    Cordialement Law56100

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 325
    Par défaut
    Mon soucis je pense c'est que je ne comprends pas comment l'instruction "FileInputStream" fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileInputStream is = new FileInputStream("yourKeyStore.keystore");
    Qu'est ce que je dois mettre à la place de YourKeyStore.Keystore?

    sinon pour l'alias je peux mettre ce que je veux ou une information du .cer?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 325
    Par défaut
    Je continu mes recherches

    Dans ma tablette=>paramètres=>sécurité=>periph. =>Système ou utilisateurs
    Système correspond à un keystore car j'ai la liste des certificat installer
    Utilisateur est un autre Keystore. Comment je peux connaitre l'emplacement et le nom du fichier?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 325
    Par défaut
    C'est important pour mon travail donc je relance

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

Discussions similaires

  1. [IIS 6 - SSL] Installation de certificat
    Par bartoumi dans le forum IIS
    Réponses: 2
    Dernier message: 13/06/2008, 12h18
  2. Installer un driver automatiquement
    Par kollyv dans le forum Windows XP
    Réponses: 1
    Dernier message: 19/09/2007, 12h04
  3. [SSO] installer un certificat
    Par spoutyoyo dans le forum Sécurité
    Réponses: 1
    Dernier message: 10/01/2007, 16h51
  4. Installer Win 2k3 automatiquement
    Par chasse dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 09/05/2006, 08h49

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