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

Format d'échange (XML, JSON...) Java Discussion :

Récupération Certificat d'un document XML


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 27
    Par défaut Récupération Certificat d'un document XML
    Bonjour,

    j'ai un document XML signé. La signature que j'utilise est une signature enveloppé. A l'interieur de mon document xml, j'ai donc mon certificat stocké dans la balise <X509Date><X509Certificate>.
    Comment puis-je faire pour récupérer mon certificat sous forme d'objet X509Certificate?

    J'utilise JDOM pour parser mon document xml, et je récupère donc mon certificat sous forme de string ou d'élément. Mais je ne vois pas comment faire pour avoir mon objet X509Certificate.

    merci pour vos réponse

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

    Le certificat doit surement être encodé en PEM ou DER en Base64. Tu peux nous donner un exemple de ce qui est affiché ?
    Sinon regarde du côté de CertificateFactory, et notamment la méthode generateCertificate : http://java.sun.com/javase/6/docs/ap...io.InputStream)

    Bon courage

  3. #3
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Ben déjà il faut savoir comment sont stockées les données du certificat à l'intérieur de ta balise. Je pencherais pour un encodage en Base64 mais ça pourrait être autre chose que je ne connais pas.

    Donc supposons qu'il soit encodé, ben tu le décodes.

    Ensuite un ByteArrayInputStream avec comme source de données le résultat du décodage sous forme de tableau de byte.
    Ensuite tu utilises la classe CertificateFactory.

    Ca pourrait donner un truc dans ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ByteArrayInputStream bais = new ByteArrayInputStream(LeTableauDeByte);
    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    X509Certificate x509 = (X509Certificate)cf.generateCertificate(bais);
    bais.close();
    Et tu te retrouves donc avec une instance de l'interface X509Certificate contenant ton certificat.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Marco46 Voir le message
    Ben déjà il faut savoir comment sont stockées les données du certificat à l'intérieur de ta balise. Je pencherais pour un encodage en Base64 mais ça pourrait être autre chose que je ne connais pas.

    Donc supposons qu'il soit encodé, ben tu le décodes.

    Ensuite un ByteArrayInputStream avec comme source de données le résultat du décodage sous forme de tableau de byte.
    Il doit eme pas y avoir besoin de le décoder car apparemment la méthode supporte un certificat encodé en Base64 si les balises de début et de fin sont présentes (du DER en base64 quoi ). On épargne ainsi une lib permettant de décoder la base64
    Mais sinon ouais c'est ce que tu as dit.

    Citation Envoyé par javadoc
    In the case of a certificate factory for X.509 certificates, the certificate provided in inStream must be DER-encoded and may be supplied in binary or printable (Base64) encoding. If the certificate is provided in Base64 encoding, it must be bounded at the beginning by -----BEGIN CERTIFICATE-----, and must be bounded at the end by -----END CERTIFICATE-----.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 27
    Par défaut
    Déjà merci a vous pour vos réponse.
    Effectivement j'avais vu la méthode generateCertificate de la classe CertificateFactory mais je tombais toujours sur une erreur.
    En fait je n'avais pas pensé à faire le décodage base64.

    J'ai donc cette fois-ci utilisais le décodage comme me la précisé Marco46.

    voici donc ce que j'ai fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    byte[] certDecode = Base64.decode(certStr.getBytes());
    ByteArrayInputStream certIs = new ByteArrayInputStream(certDecode);
    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    X509Certificate certificate = (X509Certificate) cf.generateCertificate(certIs);
    certIs.close();
    Je pense que je ne dois pas être loin de la solution mais cela ne marche pas encore totalement. En fait si je met "cf.generateCertificate(certIs)" dans mon debugger je vois bien mon certificat. Mais si j'exécute ma ligne :
    X509Certificate certificate = (X509Certificate) cf.generateCertificate(certIs);
    j'ai l'erreur suivante :
    An exception occurred: java.security.cert.CertificateException
    Je ne comprend pas bien ce qu'il se passe. J'ai l'impression que c'est au moment du cast que l'erreur intervient.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 27
    Par défaut
    En fait je récupère un objet X509CertImpl et non un objet Certificate. Or je travaille avec un jdk/jre 1.5 et j'ai l'impression que cette classe est uniquement avec une jre 1.6 (dans le jar rt.jar)
    Je ne vois pas trop comment faire....

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 27
    Par défaut
    ah non rien a voir étant donné que l'objet X509CertImpl hérite de l'objet X509Certificat.

    En fait j'avais pas vu mais l'erreur exact que j'ai est celle la :

    Could not parse certificate: java.io.IOException: DerInputStream.getLength(): lengthTag=127, too big.

  8. #8
    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
    si tu récupère bien ton certificat contenu dans une String

    je en pense pas que ce soit la meilleur solution mais tu peut toujours essayer d'écrire ton string dans un fichier (avec les bufferedWriter et tout ce qui va avec) tu enregistre le tout dans un .cer par exemple (ou autre extension de certificat que tu préfère ^^)

    ensuite tu instancie ton certificat au format X509 comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    InputStream inStream = new FileInputStream("chemin/ver/certificat");
    			CertificateFactory cf = CertificateFactory.getInstance("X.509");
    			X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream);
    Je ferai quelque chose de ce genre même si il doit y avoir moyen de faire moins bidouille à mon avis (attendons que george7 et/ou Marco46 passe par là ^^)

    edit : grillé par les deux en même temps !!

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

Discussions similaires

  1. [JDOM] Récupération des feuilles dans un document XML
    Par imenblue dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 01/05/2011, 00h48
  2. Récupération de document XML partiel
    Par Lorenzaccio dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 21/03/2011, 22h04
  3. Document xml incorrect, récupération du keyref fautif
    Par coco62 dans le forum XML/XSL et SOAP
    Réponses: 0
    Dernier message: 29/10/2010, 14h34
  4. Stocker du texte mis en forme dans un document XML
    Par ovh dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 13/02/2003, 10h23
  5. pb formatage document XML généré par un dom tree
    Par lionel69 dans le forum APIs
    Réponses: 11
    Dernier message: 17/10/2002, 09h53

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