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

Sécurité Java Discussion :

Problème avec keystore non initialisé


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut Problème avec keystore non initialisé
    Bonjour à tous,

    Toujours dans ma quête de gestion des différents keystore, je suis entrain de réaliser quelque test pour charger le Keystore du client de messagerie "Evolution" (qui était à la base sous Linux mais qui est disponible sous windows)

    Mon premier but est donc de charger le keyStore et de lister les certificat présent. Je vais vous exposer mon raisonnement par étape pour me faire comprendre le mieux possible !

    Pour ceux qui ne connaissent pas Evolution sous Windows, les répertoires utilisés sont :

    ----> C:\Document and Settings\user\.evolution
    dans ce répertoire on retrouve les key3.db, secmod.db et cert8.db

    ----> c:\program file\DIP Consultant\Evolution
    avec dans ce répertoire un autre répertoire bin, dans lequel on retrouve les dll de type nss3.dll ect...

    déjà premier étape, Evolution ne semble plus subir "d'évolution" sous wundows ... j'ai donc du remplacer le nss3.dll par un plus récent car les fonction utilisé n'était pas présente dans l'ancienne version

    Passons au code :

    Pour charger mon Keystore j'utilise ceci

    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
     
    public KeyStore chargerKeystore2(String Pass){
    		KeyStore ks = null;
    		try{
     
    	        String configName = f.getAbsolutePath();
    	        sun.security.pkcs11.SunPKCS11 p = new sun.security.pkcs11.SunPKCS11(configName);
    	        Security.addProvider(p);
     
    	        try {
    	            KeyStore.PasswordProtection  pwd = new KeyStore.PasswordProtection(Pass.toCharArray());
    	            ks = KeyStore.getInstance("PKCS11", p); 
    	            ks.load(null, pwd.getPassword());
    	        } catch (Exception e) {
    	            e.printStackTrace();
    	            System.out.println("Wrong password");
    	        }
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    		return ks;
    	}
    avec un fichier de configuration de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    name=IASNSS
    nssLibraryDirectory=C:/Program Files/DIP Consultants/Evolution/bin
    nssSecmodDirectory ="C:/Documents and Settings/user/.evolution"
    Alors voila mon analyse :

    Lorsque l'on importe manuellement un certificat (en allant dans les préférence d'évolution et en choisissant un format PKCS12), lors du premier Import, Evolution demande un mot de passe pour protéger le keystore et ensuite le mot de passe du fichier PKCS12

    Imaginons que je met comme mot de passe pour le keystore "0000"

    Lorsque je lance mon application Java avec le mot de pass "0000" tout fonctionne très bien.

    Voila la fin de partie "Traitement réussi"

    Maintenant Passons au traitement qui ne réussit pas

    Si la personne vient d'installer Evolution, au lancement du soft, les cert8.db et compagnie sont créer

    Par contre si je lance directement mon application par la suite, je me prend une première erreur

    au niveau de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ks.load(null, pwd.getPassword());
    Exception de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sun.security.pkcs11.wrapper.PKCS11Exception: CKR_USER_TYPE_INVALID
    après recherche cela vient du fait que le mot de passe du keystore n'a pas été initialisé.

    Ce qui est normal puisque aucun certificat n'a été importé, le keystore n'a jamais eu sont mot de passe principal d'initialisé.

    Donc après tout ce long discour, je me retrouve avec ce problème de mot de passe de keystore non initialisé.

    J'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ks.load(null, null);
    mais je me prend l'exception suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    javax.security.auth.login.LoginException: no password provided, and no callback handler available for retrieving password
    si je comprend bien,il ne trouve pas de mot de passe à passer en paramètre et il ne trouve rien qui puisse être exécuter pour demander le mot de passe à l'utilisateur

    je me suis dit que je pourrai réaliser cette demande de mot de passe moi même par contre je ne voit pas du tout comment le transmettre au keystore ?

    Voila mon problème, j'espère que le discours n'a pas été trop long et que j'ai réussi à vous exposer clairement ce qui cloche !

    merci pour toute l'aide apportée.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Je vais répodnre par une question : PKCS#11 ?????
    C'est pour parler avec une carte à puce ça, or si j'ai bien compris tu n'as pas de carte à puce dans ton cas. Es tu sûr du type de keystore ? Pour l'exception vient de JAAS qui est sûrement utilisé par le wrapper PKCS#11 de Sun pour récupérer le mot de passe à partir d'un lecteur de carte par exemple. Bref pourquoi PKCS#11 pour ton keystore ?

    A plus

  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut
    peut être que je me perd dans les différentes sorte d'extension avec tout ces pkcs

    mais au final PKCS11 fourni un ensemble de library qui permet de discuter avec un support physique ca ok ?

    par exemple je possède un eToken, qui est fourni avec une lib eTPKCS11.dll

    cette library permet de comuniquer avec le token donc

    Par la suite j'ai voulu créer une application qui pouvait lister (je simplifie) les certificats contenu dans le magasin de thunderbird

    Pour réaliser cela, j'ai instancié mon provider avec un fichier de config quasi semblable à celui utilisé avec Evolution. il utilise (si je ne dit pas de bétise) la dll nss3.dll pour discuter avec le keystore de thunderbird.


    Donc au final un support physique n'est qu'un KeyStore portable comme pourrai l'être celui de thunderbird non ?

    donc au final charger le keystore de mon etoken et charger celui de thunderbird revient à avoir plusieur fonction qui permettent de discuter avec le keystore

    donc dans mon cas eTpkcs11.dll pour l'etoken
    et nss3.dll pour thunderbird

    corrgier moi si je suis completement à coter de la plaque (ce qui peut être fort possible)

    car sinon comment est ce possible que j'arrive a discuter avec le keystore de thunderbird de cette manière si ce n'est pas la bonne ?

    merci d'avance.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Alors de ce que je sais de PKCS11, ça ne sert qu'à parler avec une carte, c'est une manière de standardiser la chose. Là tu as un keystore qui est pas physique du tout si je ne me trompe. Ton eToken (c'est aladdin ça non ?) a une carte à puce dessus, c'est pour ça que tu lui parles via PKCS#11.
    Là tu as un bon vieux fichier de BDD
    Ensuite de deux choses l'une :
    • il existe une implémentation de KeyStore pour thunderbird/evolution et tu peux utliser la bibliothèque la contenant
    • Ca n'existe pas et dans ce cas, à toi de la créer

    NSS semble supporter tout plein de standards dont PKCS#11 et PKCS#12 par exemple, regarde si tu trouves quelque chose pour NSS (je crois que Java6 supporte NSS) sinon regarde ici peut-être : http://www.mozilla.org/projects/security/pki/jss/

    Bon courage

  5. #5
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut
    Je croit que finalement j'ai du m'égarer dans mes recherche et qu'effectivement je me retrouve dans une impasse

    PKCS11 = support physique donc je lâche cette piste.

    Par contre une chose me semble tout de même bizarre :

    Par exemple quand on importe manuellement un certificat pour la première fois que ce soit pour thunderbird ou pour Evolution

    la première chose qu'il demande c'est de rentrer un mot de passe pour le magasin de certificat et ensuite il demande le mot de passe du certificat.

    avec le code décrit au premier poste, si je n'ai jamais importer de certificat, j'ai ces erreur la, par contre

    si j'importe un certificat à la main, que je rentre un mot de passe donc pour protéger ce magasin, au final lorsque je lance mon traitement je n'est plus d'erreur et mes certificat sont bien listé

    de ce fait, avec les remarque données, cela me semble bizarre que cela fonctionne
    enfin bref j'avai déjà fouillé un peu chez mozilla mais je n'avais jamais eu ce lien avec jss

    je vais me documenter la dessus

    merci pour tout

Discussions similaires

  1. Problème avec regex non trouvé
    Par Damien69 dans le forum Langage
    Réponses: 3
    Dernier message: 31/08/2008, 13h32
  2. [Tables Access] Problème avec AUTO_INCREMENT non reconnu
    Par GuixInDaMixx dans le forum VB.NET
    Réponses: 4
    Dernier message: 15/05/2008, 18h01
  3. Problème avec serveur non bloquant
    Par Walm dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 18/11/2007, 04h17
  4. Problème de mutex avec Waitforsingleobject non-bloquant
    Par rvzip64 dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 03/11/2005, 11h02
  5. Problème avec des composants non déclarés
    Par vbcasimir dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/01/2005, 11h17

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