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

Java Discussion :

Signer un jar à partir d'une clé privée et d'un certificat


Sujet :

Java

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut Signer un jar à partir d'une clé privée et d'un certificat


    J'ai besoin de signer un jar pour une application Web. Je dispose du jar en question, du couple clé privée/clé publique et du certificat issu de la clé privée.

    J'ai essayé pas mal de choses, mais je n'arrive pas à signer ce jar. Cette méthode fonctionne : http://www.coderanch.com/t/437249/Ap...lf-sign-applet mais en générant une nouvelle clé, alors que je veux utiliser celle qui existe. Il semble impossible d'importer des clés privées dans un keystore avec keytool. Je suis donc bloqué et j'en appelle à vous. Je ne suis pas du tout un spécialiste de la cryptographie, merci pour votre aide !

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Tu dois exporter tes cles publicques et privées sous forme des fichiers pkcs12. Alors seulement tu pourra les importer dans le keystore.

    http://www.developpez.net/forums/d59...keystore-java/

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    Merci pour ta réponse. J'avais vu ce topic mais je n'arrive pas à exporter en PKCS12.
    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    openssl pkcs12 -export -in certificat.cer -inkey secretkey.asc -out export.p12
    j'ai une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Loading 'screen' into random state - done
    unable to load private key
    3800:error:0906D066:PEM routines:PEM_read_bio:bad end line:.\crypto\pem\pem_lib.c:797:
    Je pense que mes fichiers ne sont pas au format PEM (comment le vérifier ?).

    Donc j'essaie de convertir le certificat au format PEM :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    openssl pkcs12 -in certificat.cer -out certificat.pem –nodes
    j'ai l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    3436:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:.\crypto\asn1\tasn_dec.c:1320:
    3436:error:0D06C03A:asn1 encoding routines:ASN1_D2I_EX_PRIMITIVE:nested asn1 error:.\crypto\asn1\tasn_dec.c:832:
    3436:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:.\crypto\asn1\tasn_dec.c:752:Field
    version, Type=PKCS12
    Je suis sous Win XP, j'ai installé le package "redistribuable Microsoft Visual C++ 2008" et OpenSSL Light 1.0.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    rah, j'ai une liste de commande openssl aussi, mais au boulot, dès que possible je poste, j'avais galéré aussi de ce coté là

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    OK merci ! C'est quand même pas évident ce truc

  6. #6
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    C'est quoi ton fichier que tu passes en entrée d'openssl ?

    Je vois un certificat.cer.

    Un certificat ne contient qu'une clef publique, mais en aucun cas une clef privée. Seul un PKCS12, qui est un magasin, peut contenir une clef privée. Il sera alors protégé par un chiffrement symétrique déverrouillé par un mot de passe.

    Tu n'indiques pas dans ton post les formats. Je doute beaucoup qu'il soit possible d'avoir un format d'échange de clef privée sans protection.

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    C'est bien un certificat.

    Comme je l'ai dit, j'ai un fichier pour la clé publique (.asc), un autre pour la clé privée (.asc ou .sec, mais même format), les 2 sont générés avec WinPT et un certificat .cer binaire. Je n'ai pas de magasin PKCS12, ni le keystore d'origine contenant la clé privée. Est-il possible de signer un jar avec tout ça ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Salut,

    tu aurais pas oublié un "-export" quelque part ?
    Je ferais un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    openssl pkcs12 -export -inkey clef_privee.asc -incert cert.cer -out monKeystore.p12
    Si tu mets pas -export, il tente de parser un fichier pkcs#12 dans in, or lá tu veux en créer un. Le fichier donné à l'option -in doit contenir certificat ET clef privée, donc utilise -inkey et -incert, ça devrait aller
    voir ici : http://www.openssl.org/docs/apps/pkc...EATION_OPTIONS

  9. #9
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    La commande suivante ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    openssl pkcs12 -export -in certificat.cer -inkey secretkey.asc -out export.p12
    (voir posts précédents).

    La commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    openssl pkcs12 -export -inkey clef_privee.asc -incert cert.cer -out monKeystore.p12
    ne fait rien, je pense qu'il attend un paramètre -in. Et si je le mets, je retombe sur la commande d'avant...

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Shuret Voir le message
    La commande suivante ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    openssl pkcs12 -export -in certificat.cer -inkey secretkey.asc -out export.p12
    (voir posts précédents).

    La commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    openssl pkcs12 -export -inkey clef_privee.asc -incert cert.cer -out monKeystore.p12
    ne fait rien, je pense qu'il attend un paramètre -in. Et si je le mets, je retombe sur la commande d'avant...
    Ca fonctionne surement pas car d'après la doc -in attend un fichier PEM (base 64 donc, pas binaire) avec certificat ET clef privée dedans.
    Ce que tu as tenté pour convertir un certificat en base 64 n'est pas bon car tu as utilisé le module pkcs12 de openssl, alors que tu devrais utiliser x509 ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    openssl x509 -inform der -in certificate.cer -out certificate.pem
    Concatène le résulat avec ta clef privée encodée PEM dans un même fichier passe le en -in de ta première commande, et ça devrait le faire...

    PEM est un format texte encodé en base 64, donc tu peux éditer avec n'importe quel éditeur de texte. Les balises BEGIN CERTIFICATE et END CERTIFICATE sont aussi importantes et à ne pas supprimer. Le nombre de caractères par ligne doit aussi être respecté, et tout devrait bien se passer

  11. #11
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    J'ai convertit le certificat en PEM, j'obtient un fichier texte avec les balises -----BEGIN CERTIFICATE----- et -----END CERTIFICATE-----, encodé en base 64 avec des lignes de 64 caractères : il me semble donc correct.

    Par contre j'ai essayé la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    openssl pkcs12 -export -inkey secretkey.asc -in certificat.crt  -out export.p12
    et j'ai l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unable to load private key
    2608:error:0906D064:PEM routines:PEM_read_bio:bad base64 decode:.\crypto\pem\pem_lib.c:813:
    La clé privée semble aussi au format PEM (balises -----BEGIN PGP PRIVATE KEY BLOCK----- / -----END PGP PRIVATE KEY BLOCK-----, lignes sur 64 caractères). J'ai essayé en remplaçant les balises par -----BEGIN RSA PRIVATE KEY-----, j'ai essayé en mettant le certificat et la clé privée dans le même fichier avec la commande "openssl pkcs12 -export -in certificatetcle.pem -out export.p12" sans plus de succès.

    Quelqu'un a une idée ?

  12. #12
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    voilà les commande que j'avais utilisé à l'époque pour importer dans un keystore java.

    server.crt <--- le certificat signé par l'autorité qui m'a été renvoyé, format texte base64 (pem?)
    server.key <--- la clé privée générée au départ via genrsa
    certificat-chain.pem <-- la chaine de certification (format pem) de mon autorité de certification (= qui la certifie elle)
    passin <-- mot de passe de la clé
    passout <-- mot de passe pour protéger l'export
    destpass <-- mot de passe du keystore java


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    openssl pkcs12 -export -name fred -in server.crt -inkey server.key  -CAfile certificate-chain.pem -chain -out server.p12 -passin pass:passin -passout pass:passout
     
    keytool -importkeystore -destkeystore keystore.ks -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass passout -deststorepass destpass
    keytool -list -keystore keystore.ks -storepass pd143r

  13. #13
    Invité
    Invité(e)
    Par défaut
    Euh..... ta clef privée est au format PGP, donc pas celui attendu par openssl. Changer la balise de départ ne sert à rien, car le format d'encodage de la clef est différent... A ma connaissance openssl ne peut pas lire le format PGP. Je ne connais pas non plus d'outils pour le faire (je connais pas du tout le format utilisé par PGP) ?
    Tu ne peux pas directement reccréer une paire de clef avec openssl ou mieux keytool (vu que tu veux signer). D'où tiens tu ta clef PGP?

  14. #14
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    LEs certificats pkcs et les clés PGP sont des choses totalement différentes. Bien que les algorithmes soient identique, le principe de fonctionnement est complètement différent. Une clé PGP, tu lui fais confiance parce qu'elle est contresignée par des personnes à qui tu fais également confiance, il n'y a pas d'autorité centrale.

    Un certificat pkcs, tu lui fais confiance parce qu'il est émis par une autorité de certification, comme verisign, par exemple. Par conséquent, impossible de convertir d'un monde à l'autre. Au "mieux" à force de bidouilles, tu va obtenir un certificat pkcs correspondant à ta clé PGP, mais n'étant signé par aucune autorité donc inutilisable en pratique.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    LEs certificats pkcs et les clés PGP sont des choses totalement différentes. Bien que les algorithmes soient identique, le principe de fonctionnement est complètement différent. Une clé PGP, tu lui fais confiance parce qu'elle est contresignée par des personnes à qui tu fais également confiance, il n'y a pas d'autorité centrale.

    Un certificat pkcs, tu lui fais confiance parce qu'il est émis par une autorité de certification, comme verisign, par exemple. Par conséquent, impossible de convertir d'un monde à l'autre. Au "mieux" à force de bidouilles, tu va obtenir un certificat pkcs correspondant à ta clé PGP, mais n'étant signé par aucune autorité donc inutilisable en pratique.
    Apparemment tu peux faire une clef PGP à partir d'un p12 d'après mes recherches mais pas l'inverse.
    Si tu possèdes un certificat X.509 avec la clef publique associée, c'est que tu as eu (ou celui qui t'a donné les fichiers) la clef privée dans un conteneur pkcs#12 par exemple. Il faut que tu retrouves cette clef. Mais dois-tu vraiment utiliser cette paire de clef pour signer ton code ?

Discussions similaires

  1. [JavaService] Création d'un service a partir d'une application java en Jar)
    Par maxxper59 dans le forum EDI et Outils pour Java
    Réponses: 6
    Dernier message: 09/11/2010, 11h50
  2. Réponses: 9
    Dernier message: 01/07/2009, 15h56
  3. Réponses: 6
    Dernier message: 17/02/2009, 20h32
  4. execution d'un jar a partir d'une jsf
    Par krikete dans le forum JSF
    Réponses: 6
    Dernier message: 06/02/2007, 21h56
  5. exécuter une classe dans un jar a partir d'une methode java
    Par yann_p dans le forum API standards et tierces
    Réponses: 13
    Dernier message: 13/04/2006, 16h50

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