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 :

Validation de signature XAdES-BES


Sujet :

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

  1. #1
    Membre à l'essai
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    23
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 23
    Points : 10
    Points
    10
    Par défaut Validation de signature XAdES-BES
    Bonjour à tous,

    je cherche à valider une signature enveloppante xades-bes en utilisant les méthodes de la bibliothèque javax.xml.crypto.

    Ces librairies permettant sans problème de valider une signature XMLDSIG standard, mais je ne parviens pas à valider une signature XAdES-BES. pourtant si j'ai bien compris le principe :

    L'utilisation de XAdES ajoute à l'élément KeyInfo le certificat du signataire. Si l'on remonte la chaîne de certificat, on peut retrouver la clé publique.

    Mais le contenu de KeyInfo n'est utilisé que pour la validation, pas pour la création de la signature.

    Or d'après ce que j'ai lu, KeyInfo est utilisé en entrée de validation pour récupérer essentiellement la clé publique. J'ai affiché cette clé publique dans mon traitement, comme vous pouvez le voir ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (!(o instanceof X509CertImpl))
                		continue;
     
                	final PublicKey key = ((X509CertImpl)o).getPublicKey();
                    //final PublicKey key = ((X509Certificate)o).getPublicKey();
                	System.out.println(("public key : " + key.toString());
    Le modulus de cette clé correspond exactement à la celui de la clé publique que je suis censé trouver, je pense donc que le problème ne vient pas de la clé.

    Du coup je ne vois pas pourquoi la signature n'est pas valide, étant donné que les éléments couverts par une signature XMLDSIG sont les même que ceux couvert par une signature XAdES-BES.

    Je ne sais pas si j'ai posé la question au bon endroit, ni même si j'ai été clair et si quelqu'un pourra me répondre, mais je préfère essayer quand même.

    Quelqu'un de plus éclairé que moi aurait-il un avis sur la question ?

    Amicalement,


  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Bonjour,

    Impossible de répondre juste en nous montrant 4 lignes de code.

    En général si une signature ne peut être vérifié c'est que l'algo n'est pas le bon, que la signature n'est pas bonne ou que la clé n'est pas bonne.

    Quel est le code qui plante ?

  3. #3
    Membre à l'essai
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    23
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    en fait l'algo ne plante pas, mais il me retourne false alors que cette signature est forcément valide.

    signature est de type DOMXMLSignature, j'ai trouvé le code de la fonction validate ici (si c'est bien celui-ci qui correspond) : http://www.koders.com/java/fid8BC289...FAEDFC0E0.aspx

    code de validation :

    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
    try {
    			boolean coreValidity  = signature.validate(valContext);
    			if (coreValidity == false) {
    			    System.err.println("Signature failed core validation");
    			    boolean sv = signature.getSignatureValue().validate(valContext);
    			    System.out.println("signature validation status: " + sv);
    			    if (sv == false) {
    			        // Check the validation status of each Reference.
    			        Iterator i = signature.getSignedInfo().getReferences().iterator();
    			        for (int j=0; i.hasNext(); j++) {
    			            boolean refValid = ((Reference) i.next()).validate(valContext);
    			            System.out.println("ref["+j+"] validity status: " + refValid);
    			        }
    			    }
    			} else {
    			    System.out.println("Signature passed core validation");
    			}
    			return coreValidity;

    la sortie :

    Signature failed core validation
    signature validation status: false
    ref[0] validity status: false
    ref[1] validity status: false
    la signature n'est pas valide

  4. #4
    Membre à l'essai
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    23
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    je n'ai pas mis tous l'algo de validation évidemment (il est long), mais j'ai suivi ce guide, qui semble être récurrent à chaque algorithme de validation d'une signature XMLDSIG que j'ai pu trouver sur le net

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Impossible de répondre sans plus de détail.

    Il y a quoi en entrée dans valContext et que fait validate ?

  6. #6
    Membre à l'essai
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    23
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    merci de t'y être intéressé jimmy, mais je pense que le problème est trop spécifique. j'espérais que quelqu'un passant par ici ait déjà été confronté à la question, mais bon chaque contexte est différent.

    valContext est un objet créé précédemment avec X509Certificate en paramètre et le nœud racine du document DOM

    quant à validate, apparemment c'est le validate d'une classe nommée DOMXMLSignature. j'ai trouvé son code ici --> http://java.sun.com/developer/techni...signature_api/

    et il me semble bien respecter le principe de validation d'un clé XMLDSIG.

    mais le problème peut se situer à différents endroits, ce que j'aurais aimé avoir c'était plus une confirmation de ce que j'ai expliqué dans le premier post, à savoir que les fonctions de validations standards (XMLSignature.validate) devraient fonctionner pour la validation d'une signature XAdES-BES.

    edit : j'ai résolu mon problème, cela venait effectivement de la manière dont était générée la signature

  7. #7
    Membre à l'essai
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    23
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Bonjour tout le monde, me revoila

    je galère un peu avec les classes du package security.

    J'ai validé les blocs Reference et je dois maintenant appliquer l’algorithme de la signature sur la forme canonique de <SignedInfo> (canonisation et hashage) , et comparer octet par octet le résultat avec le contenu de <SignatureValue> déchiffré grâce à la clé publique.

    J'ai récupéré la forme canonique de <SignedInfo> ainsi que la clé publique contenu dans la chaîne de certificat sous <KeyInfo>.

    Savez- vous quels objets je dois utiliser pour déchiffrer le contenu de <SignatureValue> ? Merci en tout cas de m'avoir lu

    edit : j'ai trouvé la classe Signature, mais le résultat du verify est faux. j'aimerais juste pouvoir récupérer le résultat du déchiffrement de signatureValue, Signature ne permet que de faire une vérification sans laisser accès à la valeur de signatureValue déchiffrée. quelqu'un sait-il comment faire ?

    edit2 : me suis débrouillé (cipher)

Discussions similaires

  1. xmlseclib - impossible de valider une signature
    Par Rhimo dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 22/09/2012, 23h59
  2. [WSS] Restore planté - signature not valid
    Par jff42 dans le forum Configuration
    Réponses: 1
    Dernier message: 22/06/2010, 18h11
  3. Valider un document Excel sans signature numérique
    Par koushkov dans le forum Conception
    Réponses: 0
    Dernier message: 18/06/2010, 03h33
  4. Réponses: 0
    Dernier message: 12/07/2008, 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