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

Sécurité Java Discussion :

Extraire la partie Data à partir d'un certificat


Sujet :

Sécurité Java

  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2009
    Messages
    220
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 220
    Par défaut Extraire la partie Data à partir d'un certificat
    Bonjour et merci pour vos aides futur,

    On sait tous qu'un certificat est constitué de 2 partie: Data et un signature.
    Alors mon probleme est comment je peux extraire la partie Data à partir de ce certificat, en utilisant un code java.
    J'ai essyé de trouver des commandes openssl et j'ai utilisé la methode getTBSCertificate()pour achever cette tache mais j'ai rien obtenu.

    Je suis trés reconnaissante si quelqu'un pourra m'aider.
    Merci encore.

  2. #2
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2009
    Messages
    220
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 220
    Par défaut
    Salut,

    Bon, j'ai utilisé la fonction getTBSCetificate() pour extraire la partie Data de mon certificat et j'ai cru que j'ai résolu mon pb mais apparamment c'est: , car je l'ai obtenu codé.
    Donc comment je peux la décoder pour l'obtenir au farmat ASN1?

    Merci pour vous.

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2009
    Messages
    220
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 220
    Par défaut
    Voila, j'ai trouver ce lien: http://ftp.gva.es/mirror/bouncycastl...SN1Object.html qui apparament, peut m'aider.

    Mais j'ai pas compris c'est quoi: Bouncy Castle Crypto CSharp, donc s'il vous plais si cette methode peut m'aider j'ai besoin de savoir comment je peux l'exploiter.
    Et s'il y a d'autre methode plus facile merci bien de me l'indiquer.

    Merci encore.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Salut,
    Bouncy castle est une bibliothèque cryptographique Java et C# permettant de travailler avec certificats et tous les algorithmes répandus ou non.
    Donc il te suffit de télécharger cette bibliothèque sur le site, de l'importer dans ton projet et de l'utiliser. Elle comble les lacunes de la bibliothèque standard de SUN.
    Je t'avais donné des liens notamment vers Bouncy Castle dans ce post
    Tschau

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2009
    Messages
    220
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 220
    Par défaut
    Bonjour,

    Est ce que vous pouvez me préciser de plus le lien d'ou je peux télécharger la bibliotheque Bouncy castel.
    Donc, j'ai trouvé ce lien: http://www.bouncycastle.org/latest_releases.html, mais encore une autre fois j'ai rien obtenu, car il y a plusieurs liens.
    Donc d'ou je peux télécharger cette biblitheque directement.Mon tete est cassé et je n'ai rien obtenu. Alors, j'ai besoin d'un reponse dircte.

    Merci d'avance.

  6. #6
    Invité
    Invité(e)
    Par défaut
    ...
    Ben tu prends le provider correspondant à ton JDK, là je peux plus t'aider si tu peux pas savoir quoi télécharger...

  7. #7
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2009
    Messages
    220
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 220
    Par défaut
    Alors biensure je sais que je dois télécharger celle qui correspond à mon jdk mais je ne sais pas quelles sont les packages que je dois les télécharger.
    C'est bon j'ai trouver la solution de mon probleme ici: http://nyal.developpez.com/tutoriel/...cycastle/#L2.1

  8. #8
    Invité
    Invité(e)
    Par défaut
    Ceci dit, tout est expliqué sur la page de téléchargements
    Tu n'as surement pas besoin non plus de bcmail.jar si tu ne fais pas de choses avec des emails. Donc comme je l'ai dit au dessus, le provider pour ton jdk...

  9. #9
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2009
    Messages
    220
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 220
    Par défaut
    Donc, apres des heures de recherches sur Net j'ai pu arriver à ce bou de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ASN1InputStream asn1inputstream = new ASN1InputStream(new ByteArrayInputStream (x509certificate.getTBSCertificate()));
    TBSCertificateStructure tbscertificatestructure = TBSCertificateStructure.getInstance(asn1inputstream.readObject());
    //extraire les elements au format ASN1
    AlgorithmIdentifier algorithmidentifier = tbscertificatestructure.getSubjectPublicKeyInfo().getAlgorithmId();
    IssuerAndSerialNumber issuerandserialnumber = new IssuerAndSerialNumber(tbscertificatestructure.getIssuer(),tbscertificatestructure.getSerialNumber().getValue());
    En fait, il me permet d'afficher quelques elements de la partie DATA dans le format ASN1 et je dois citer les element que j'en ai besoin.
    Mais j'ai besoin d'obtenir toute la partie c'est à dire comme suit:
    TBSCertificate ::= SEQUENCE {
    version [ 0 ] Version DEFAULT v1(0),
    serialNumber CertificateSerialNumber,
    signature AlgorithmIdentifier,
    issuer Name,
    validity Validity,
    subject Name,
    subjectPublicKeyInfo SubjectPublicKeyInfo,
    issuerUniqueID [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL,
    subjectUniqueID [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL,
    extensions [ 3 ] Extensions OPTIONAL
    }
    Est ce que c'est possible en utilisant une seule instruction?

    Merci d'avance.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Pourquoi as tu besoin d'avoir la représentation sous forme de chaine de ton certificat codé ASN.1 ? Si tu récupères la structure TBS avec cette classe c'est pour accéder aux différents membre. la structure entière tu l'as dans l'instance tbscertificatestructure chez toi...
    Je ne comprends pas ce que tu veux faire de cette chaine ?

  11. #11
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2009
    Messages
    220
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 220
    Par défaut
    Bon je sais que TBScertificate contient la partie data, mais je n'arrive pas à l'afficher.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Cette classe n'est pas faite pour faire de l'affcihage mais pour travailler avec les éléments, donc la méthode toString ne semble pas avoir été surchargée et je le comprends. As tu vraiment besoin d'afficher la structure ASN.1 ou dois tu travailler avec ? La méthode toString de la classe X509Certificate donne une forme beaucoup plus compréhensible de ton certiificat. Si tu veux absolument afficher la structure ASN.1, il te faudra chercher une autre bibliothèque Java pour ASN.1, car le but de Bouncy Castle n'est vraiment pas de faire de l'affichage (ca serait le réduire...)

  13. #13
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2009
    Messages
    220
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 220
    Par défaut
    Je vais appliquer la fonction de hashage sha1 sur cette partie pour obtnir un digest,et la class TBSCertificate donne le resultat coder donc je dois la décoder.
    J'esper que c'est claire maintenant.

    Et a propos de l'affichage j'en ai besoin pour faire une verification, tout simplement.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Pourquoi n'appliques tu pas la fonction de hashage sur le tableau d'octets renvoyé dès le début ?

    PS : au risque de me répéter : pourquoi vérifier la signature à la main alors que tout ceci peut se faire avec des bibliothèques, genre Bouncy Castle par exemple ?

  15. #15
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2009
    Messages
    220
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 220
    Par défaut
    1.Oui j'ai appliqué la fonction de hashage sur le tableau d'octets, en premier essai, mais il m'a donné un resultat fausse.

    2.Je sais qu'il existe la fonction verify()qui prend les arguments: TBSCertificate, signature et la clé publique et elle peut faire toute la vérification, mais c'est une tache demandé dans mon projet et il m'a indiqué de ne pas utiliser les fonctions prets.

  16. #16
    Invité
    Invité(e)
    Par défaut
    Un doute m'assaille sauvagement : tu as appliqué SJHA-1 au tableau d'octets et tu as dit que c'était différent de la signature : encore heureux !!!!!
    Si la signature d'un certificat n'était que le hash des données, ca serait un peu simple à falsifier.
    Dans l'algorithme de signature du certificat tu dois avoir un truc genre SHA1WithRSA
    Pour assurer l'originalité du certificat c'est ce hash qui est signé par la clef privée de la CA. Donc avec la signature du certificat, il "décoder" avec la clef publique de la CA, et ensuite comparer avec ta valeur de hash. Ca devrait beaucoup mieux marcher.
    Et tu as pas besoin d'interpréter ce que ce tableau d'octets représente, tu le hash juste et tu compares avec la signature "décryptée".
    Enfin bref, une fois de plus et snas méchanceté : tout ca tu le sais si tu te renseignes sur le domaine avant de te lancer dans la programmation

  17. #17
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2009
    Messages
    220
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 220
    Par défaut
    Donc, j'ai pas compris bien ce vous avez dit, mais voila je peux vous expliquer mieux qu'est ce que j'ai comme un bagage d'idées sur ce domaine et ensuite je vous explique mon programme.
    1. Un certificat est constitué de deux parties: Data+signature. Alors pour vérifier la signature je dois appliqué la fonction de hashage sur la partie data, donc j'obtient un digest, c'est bon . Ensuite, je dois déchiffrer la signature avec la clé publique, j'obtient alors un digest. Enfin je compare, c'est 2 digests. OK
    2. Pour mon programme:
    a. Extraire la partie data
    b. Appliquer la fonction de hashage
    c. Extraire la clé publique
    d. Extraire l'algorithme de dechiffremnt
    e. Exraire la signature
    f. dechiffrer la signature avec la clé pub et l'algo
    g. Comparer les 2 resultats
    OK

    J'espere que c'est claire
    Voila, c'est ce que j'ai comme informations de ce domaine.
    Donc, est ce qu'il y a d'autre remarques???????????

    Notez:
    une fois de plus et snas méchanceté : tout ca tu le sais si tu te renseignes sur le domaine avant de te lancer dans la programmation
    Biensure, avant de se lancer dans la programmation, je me renseignes sur le domaine, pour savoir le principe, mais voila personne n'est complete .

  18. #18
    Invité
    Invité(e)
    Par défaut
    La clef publique dont tu as besoin c'est celle de la CA pas celle du certificat (sauf s'il est auto-signé, car dans ce cas c'est la même...)
    Donc oui tu extraies le certificat, tu hashes le résultat.
    Ensuite tu extraies la signature, tu utilises la clef publique de la CA et l'algorithme de signature, et en théorie le résultat doit être égal à ton hash précédemment calculé.
    a fonction de hashage est aussi indiquée dans le certificat, car ca peut être MD5, SHA1 SHA256 ou autre...

  19. #19
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2009
    Messages
    220
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 220
    Par défaut
    je vais vous ajoutez qqs remarques, donc les voila:
    1.meme si avec un certificat autosigné donc le pb est le meme, et je ne crois pas que le pb est dans la clé publique.
    2.Pour l'algorithme de la signature, que j'ai l'obtenu avec la fonction getSigAlgName() c'est: MD5withRSA, ça veut dire que la signature est chiffrer/dechiffrer en RSA et hasher en MD5. Et pour la fonction de hashage qui est indiquée dans mon certificat c'est le sha1, alors j'ai haché la partie TBS par les deux, chaqu'un me donné un resultat, mais j'ai rien obtenu.
    J'ai encore un autre pb: je suis obligé de dechiffrer mon signature en "RSA" seulement car losque j'ai utlisé the signature algorithm "MD5withRSA", l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cannot find any provider supporting MD5withRSA
    est lancé, donc qu'est ce que je dois faire?
    Je suis vraiment perdue .

    Merci trop much pour ce qui peut m'aider, ....

  20. #20
    Invité
    Invité(e)
    Par défaut
    Bon alors,
    Si c'est écrit MD5WithRSA, ca veut dire que le hash est fait par MD5, que ensuite l'algorithme RSA est utilisé par dessus.
    Donc tu hashes avec MD5, et tu utilises RSA sur la signature avec la clef publique de la CA...
    Malgré le fait que ma boule de cristal soit restée au placard, je suppose que tu obtiens cette erreur car tu veux instancier un objet avec la chaine "MD5WithRSA", ce qui n'a aucun sens. Tu veux appliquer RSA comme tu dis. Alors pourquoi tu donnes "MD5WithRSA" ?
    Là tu t'embrouilles vraiment dans tous les sens, et je ne sais pas comment t'aider plus, vraiment.
    Pourquoi dis tu que la fonction dans ton certificat est sha1 si c'est écrit md5withrsa ?
    Bref là tu t'emmêles les pinceaux. Relis tout
    L'ordre pour calculer la signature c'est MD5 puis RSA avec la clef privée, donc pour vérifier tu fais RSA avec la clef publique, puis tu compares ce résultat avec le hash MD5 du certifcat.
    Bref je peux pas t'en dire plus, tout ce que je te dis n'est pas du java, donc n'aurait pas sa place ici en théorie...
    Donc relis toute les discussions qu'on a eues, relis de la docuementation sur le sujet, regarde des tutos pour utiliser MD5 et RSA en Java et reviens avec une question précise sur Java si tu as un problème, là je pourrai t'aider plus, plutôt que répéter toujours la même chose
    Bonne soirée

Discussions similaires

  1. extraire partie Data d'un wave
    Par bakman dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 13/05/2012, 14h08
  2. [C#] Comment extraire les parties d'une string ?
    Par mrpowerboy dans le forum C#
    Réponses: 3
    Dernier message: 21/02/2006, 09h10
  3. extraire une partie d'image d'une image source
    Par Zen_Fou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/01/2006, 11h20
  4. extraire une partie d'un document rtf
    Par yac dans le forum Oracle
    Réponses: 12
    Dernier message: 08/01/2006, 10h44
  5. [Tomcat][Role] définir des roles a partir d'un certificat
    Par pmartin8 dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 27/09/2005, 20h25

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