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 :

Signature electronique d'un fichier XML


Sujet :

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

Mode arborescent

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 Signature electronique d'un fichier XML
    Bonjour,

    je suis actuellement en train de travailler sur de la signature xml. Ma fonction de signature fonctionne correctement sur mon environnement de développement mais pas sur mon environnement de test.

    En effet j'arrive à vérifier le document signé que je produits sur mon environnement de dev contrairement au document signé que je produits sur mon environnement de test.

    Environnement de dev : WIN XP - JDK 1.5.0.10

    Environnement test : Linux RED HAT AS4 32 bits - JDK 1.5.0.10

    J'ai constaté que pour 1 même document de départ, la valeur de ma signature était différente suivant si je signais sur mon environnement de dev ou de test. Au contraire mon digest est identique.

    Je ne comprend vraiment pas ce qu'il se passe. La différence d'OS peut-il expliquer que la signature ne fonctionne plus? Pouvez vous m'aider à trouver le problème?

    merci

    voici le code que j'utilise :

    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    public String signer(String fluxASignerString) throws ServiceTechniqueException {
            LOGGER.debug("entree dans la methode");
    		try {
    			/** La plupart des objets créés correspondent à des élements XML de la signature */
     
    			// création d'une factory pour créer des signatures basées sur le méchanisme DOM et avec le système d'algo DSIG
    	    	XMLSignatureFactory signatureFactory = XMLSignatureFactory.getInstance(
    	    			ConstantesMetierBackProdDocs.TYPE_MECHANISME_GESTION_XML,
    	    			(Provider) ConstantesMetierBackProdDocs.TYPE_ORGANISATION_SIGNATURE_XML.clone());
     
    	    	Reference reference = signatureFactory.newReference("", signatureFactory.newDigestMethod(DigestMethod.SHA1, null), Collections.singletonList(signatureFactory.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null)), null, null);
     
    	        LOGGER.debug("creation du signedInfo avec les methodes de traitement");
    	    	// regroupement des "vrais" algos et des algo pour affichage dans le XML
    	    	SignedInfo signedInfo = signatureFactory.newSignedInfo(signatureFactory.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS, (C14NMethodParameterSpec) null), signatureFactory.newSignatureMethod(SignatureMethod.RSA_SHA1, null), Collections.singletonList(reference));
     
    	        LOGGER.debug("creation du document builder");
    	    	// lecture du XML et récupération du premier élement
    	    	DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    	    	documentBuilderFactory.setNamespaceAware(true);
     
    	        LOGGER.debug("parsing du contenu du fichier et convertion en DOM");
    	    	Document document = documentBuilderFactory.newDocumentBuilder().parse(new InputSource(new StringReader(fluxASignerString)));
     
    	        LOGGER.debug("creation des eventuelles balises manquantes pour insérer la signature");
    			signatureHelper.creerBalisesSignature(document);
     
    	        LOGGER.debug("recuperation de la cle privée");
    	    	// récupération de la clé privée
    	    	Key key = signatureHelper.getPrivateKey(ConstantesMetierBackProdDocs.PATH_PRIVATE_KEY);
     
    	    	// définition du contexte de signature avec la clé privée et l'élement à signer
    	    	DOMSignContext signContext = new DOMSignContext(key, document.getDocumentElement());
    	    	//signContext.setURIDereferencer(XMLSignatureFactory.getInstance().getURIDereferencer());
     
    	    	// création de la factory basé sur la méthode DOM avec l'algo DSIG
    	    	KeyInfoFactory keyFactory = KeyInfoFactory.getInstance(
    	    			ConstantesMetierBackProdDocs.TYPE_MECHANISME_GESTION_XML,
    	    			(Provider) ConstantesMetierBackProdDocs.TYPE_ORGANISATION_SIGNATURE_XML.clone());
     
    	        LOGGER.debug("recuperation du certificat");
    	    	// Récupération du certificat
    	    	X509Certificate certificate = signatureHelper.getCertificate(ConstantesMetierBackProdDocs.PATH_CERTIFICAT);
     
    	        LOGGER.debug("creation du keyinfo");
    	    	// futur élement du keyinfo
    	    	KeyInfo keyInfo = signatureHelper.getKeyInfo(certificate, keyFactory);
     
    	    	// création de la signature
    	    	XMLSignature signature = signatureFactory.newXMLSignature(signedInfo, keyInfo);
     
    	        LOGGER.debug("SIGNATURE");
    	    	// signature du contexte
    	    	signature.sign(signContext);
     
    	        LOGGER.debug("deplacement de la signature");
     
    	    	// on extrait le noeud de signature car il n'est pas placé au bon endroit
    	    	Element signatureElement = signatureHelper.enleverSignatureElement(document);
     
    	    	// on ajoute le noeud de signature au bon endroit
    	    	signatureHelper.ajouterSignatureElement(document, signatureElement);
     
    	        LOGGER.debug("convertion du document OBJET => String");
    	    	String fluxSigneString = signatureHelper.getStringPourDocument(document);
     
    	    	LOGGER.debug("sortie de la methode");
     
    	    	return fluxSigneString;
    		} catch (NoSuchAlgorithmException e) {
    			LOGGER.error(e.getMessage(), e);
    			throw new ServiceTechniqueException(e.getMessage(), e);
    		} catch (InvalidAlgorithmParameterException e) {
    			LOGGER.error(e.getMessage(), e);
    			throw new ServiceTechniqueException(e.getMessage(), e);
    		} catch (IOException e) {
    			LOGGER.error(e.getMessage(), e);
    			throw new ServiceTechniqueException(e.getMessage(), e);
    		} catch (SAXException e) {
    			LOGGER.error(e.getMessage(), e);
    			throw new ServiceTechniqueException(e.getMessage(), e);
    		} catch (ParserConfigurationException e) {
    			LOGGER.error(e.getMessage(), e);
    			throw new ServiceTechniqueException(e.getMessage(), e);
    		} catch (XMLSignatureException e) {
    			LOGGER.error(e.getMessage(), e);
    			throw new ServiceTechniqueException(e.getMessage(), e);
    		} catch (MarshalException e) {
    			LOGGER.error(e.getMessage(), e);
    			throw new ServiceTechniqueException(e.getMessage(), e);
    		}
        }
    J'ai joints l'exemple de 2 fichiers signé à partir du même fichier de départ où l'on constate bien que le signatureValue est bien différent
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [XPATH 1.0] Signature d'un fichier XML et ajout préfixe
    Par Invité dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/06/2014, 10h52
  2. Signature de fichier xml
    Par Invité dans le forum VB.NET
    Réponses: 20
    Dernier message: 05/03/2014, 11h20
  3. Problème (Exception) lors de la vérification de signature sur fichier XML
    Par khwira dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 14/07/2012, 23h56
  4. [System.Security.Cryptography.Xml] Signature de fichiers XML
    Par melleb dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 15/04/2008, 10h04
  5. Signature de fichiers xml
    Par melleb dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 15/04/2008, 09h58

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