0 votes

Validation de la signature numérique XML

J'essayais de valider une signature XML.

La validation selon ce tutoriel fonctionne bien.

Mais j'ai aussi essayé une deuxième approche. Pour le vérifier avec le méthode de vérification de la classe Signature J'ai extrait la signature et le certificat du fichier xml, et j'ai fait ce qui suit :

    public static boolean checkSignedFile(byte[] data, byte[] sigToVerify,
        byte[] cert, String algorithm) throws CertificateException,
        NoSuchAlgorithmException, InvalidKeyException, SignatureException {
    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    Certificate c = (Certificate) cf
            .generateCertificate(new ByteArrayInputStream(cert));
    PublicKey pk = c.getPublicKey();
    Signature sig;
    boolean verifies = false;
    sig = Signature.getInstance(algorithm);
    sig.initVerify(pk);
    sig.update(data);
    verifies = sig.verify(sigToVerify);
    return verifies;
}

le résultat était faux. La signature n'a pas été vérifiée. Quelle pourrait être la raison de cela ?

2voto

ZZ Coder Points 36990

Vous ne pouvez pas vérifier XMLDsig comme ça. Cela ne fonctionnerait pas. La signature n'est pas calculée sur le XML brut. Elle doit passer par la canonicalisation, le digest, etc.

Qu'utilisez-vous pour data[] ? Pour y arriver, il faut presque réécrire la bibliothèque XMLDsig.

0voto

wierob Points 2395

Si data[] est le contenu du fichier XML signé, que représente sigToVerify ?

XMLSig crée un élément de signature (SignedInfo) qui contient le condensé de chaque élément à signer et des méta-informations comme les algorithmes de canonicalisation/transformation utilisés. Ensuite, le condensé de cet élément SignedInfo est calculé et signé.

Par conséquent, si sigToVerify est la signature créée par une implémentation de XMLSignature, elle ne doit pas être égale à la signature du fichier XML complet.

Ici est une explication plus complète. Et si vous êtes intéressé, jetez un coup d'oeil à la spécification .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X