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

avec Java Discussion :

Verification de signature


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Par défaut Verification de signature
    Bonjour à tous,

    je débute en java, et j'ai besoin de vérifier une signature dans un message de réponse que je reçois. Cela fait un bon moment que je consulte le web sur le sujet, mais je n'arrive pas à valider ce message.

    Pour signer ma requête, je dispose d'un certificat avec clé privée intégrée, et pour vérifier la réponse, je dispose d'un autre certificat et de la clé publique associée.

    la structure du message est la suivante :
    <DATA>clearData</DATA><SIGNATURE>signature</SIGNATURE>

    signature a sans doute été généré à partir de clearData avec le code suivant :


    generator.addSigner(privateKey, certif, "1.3.14.3.2.26");
    CMSSignedData csd = generator.generate( new
    CMSProcessableByteArray(clearData.getBytes()), false, "BC");
    signature= csd.getEncoded();


    (c'est l'algo que nous utilisons pour envoyer notre requête et qui est accepté par le serveur qui nous renvoie sa réponse).


    J'ai essayé 2 algo :
    CMSSignedData signature = new CMSSignedData(signature);
    SignerInformation signer = (SignerInformation) signature
    .getSignerInfos().getSigners().iterator().next();

    System.out.println(signer.verify(certificate2.getPublicKey(), "BC"));

    Ce code échoue avec l'exception :
    Error constructing implementation (algorithm: MD5WithRSAEncryption, provider: BC, class: org.bouncycastle.jce.provider.JDKDigestSignature$MD5WithRSAEncryption)


    et j'ai également essayé :
    Signature sig = Signature.getInstance("SHA1WITHRSA");
    sig.initVerify(certificate2.getPublicKey());
    boolean verifies = sig.verify(signature);


    où boolean ressort à false (mais j'avoue avoir des doutes sur cet algo).

    Si quelqu'un avait une petite idée pour me décoincer

    Merci d'avance !

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Alors déjà je note que tes deux codes n'utilisent pas le même algorithme de signature, il faudrait que tu sois sûr de l'aglorithme de signature car il faut vérifier avec le même algo qu'on a utilisé pour signer.
    Error constructing implementation (algorithm: MD5WithRSAEncryption, provider: BC, class: org.bouncycastle.jce.provider.JDKDigestSignature$MD5WithRSAEncryption)
    et j'ai également essayé :
    Signature sig = Signature.getInstance("SHA1WITHRSA");
    EDIT: message trop vite fait, j'améliore

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Par défaut
    Citation Envoyé par therwald Voir le message
    Alors déjà je note que tes deux codes n'utilisent pas le même algorithme de signature, il faudrait que tu sois sûr de l'aglorithme de signature car il faut vérifier avec le même algo qu'on a utilisé pour signer.
    Dans la génération, j'utilise DIGEST_SHA1 ("1.3.14.3.2.26"), mais dans la vérification de signature, je ne précise pas d'algo :
    CMSSignedData signature = new CMSSignedData(signature);
    SignerInformation signer = (SignerInformation) signature
    .getSignerInfos().getSigners().iterator().next();

    System.out.println(signer.verify(certificate2.getPublicKey(), "BC"));


    c'est l'exception qui mentionne le MD5WithRSAEncryption

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Eh bien, il essaie de créer sur un autre algorithme de signature...c'est un signe que la création du composant de signature ne se passe pas comme elle devrait.
    Alors soit ton code de signature ne signe pas dans le bon algo (il faudrait vérifier par un moyen indépendant que la signature est bien correcte), soit dans le contexte où se trouve ton code de vérification de signature il n'a pas accès aux bonnes données de configuration. Je ne connais pas ces composants, par contre. Quelqu'un d'autre?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Par défaut
    Citation Envoyé par therwald Voir le message
    (il faudrait vérifier par un moyen indépendant que la signature est bien correcte)
    Ca, c'est fait : j'ai un algo en .NET qui fonctionne et qui m'a validé la signature. Donc la signature devrait être validé aussi en java.
    Mais je n'arrive pas à trouver l'équivalent en java

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Je ne manipule pas quotidiennement ces bêtes là, donc pour la configuration pure et dure je ne sais pas...
    Par contre, pourrais-tu préciser quel est le type de la variable signature, et comment tu la récupères? Les signatures opèrent sur des bytes bruts, sans notion d'encodage, et je me demande si un problème d'encodage ne t'altère pas la signature...

Discussions similaires

  1. Réponses: 10
    Dernier message: 15/10/2011, 22h21
  2. Réponses: 0
    Dernier message: 25/02/2011, 00h14
  3. Sécurité : Verification signature
    Par qeja dans le forum Services Web
    Réponses: 1
    Dernier message: 12/03/2007, 21h25
  4. Réponses: 2
    Dernier message: 16/06/2003, 15h15
  5. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21

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