hamburger icon
  • language
back icon Précédent
Choisissez votre langue
Type de contenu

Base de Connaissances

Signer des fichiers Java .jar avec un certificat de signature de code basé sur un jeton matériel sous Windows

Solution ID : TL660
Last Modified : 09/05/2026

Signature de fichiers Java .jar à l’aide de la commande CLI (Command Line Interface) Jarsigner

Ces instructions concernent la signature de fichiers Java .jar à l’aide d’un certificat de signature de code ou de signature de code EV installé sur un jeton matériel.

Lorsque vous utilisez votre certificat pour signer du code, une signature numérique est appliquée à votre code. Cette signature numérique renforce la confiance des clients dans le code qu’ils sont sur le point de télécharger et contribue à améliorer l’adoption de vos applications Java. De nombreux utilisateurs finaux annulent les téléchargements ou les installations lorsqu’ils reçoivent un avertissement indiquant que le code a été signé par un éditeur inconnu.

Signer des fichiers .jar à l’aide de la commande CLI Jarsigner

  1. Créez un fichier nommé eToken.cfg contenant les lignes suivantes, puis enregistrez-le dans votre dossier JDK bin (C:\Program Files (x86)\Java\jdk1.7.0_05\bin). 

    name=eToken
    library=c:\WINDOWS\system32\eTPKCS11.dll

  2. Dans Windows Explorer, accédez au dossier JDK.
  3. Dans le dossier JDK, maintenez la touche Shift enfoncée, cliquez avec le bouton droit sur le dossier bin, puis sélectionnez Open command window here. 




  4. Pour afficher votre certificat de signature de code ou de signature de code EV ainsi que l’alias du certificat sur le jeton: 
    • Branchez votre jeton.
    • Exécutez la commande suivante à partir de l’invite de commandes:
      Keytool -list -keystore NONE -storetype PKCS11 -providerclass
      sun.security.pkcs11.SunPKCS11 -providerArg ./eToken.cfg
      enter keystore password: [enter password]
    • Exemple de sortie:
      Dans cet exemple, 7800FA4C81523ACA est l’alias du certificat que vous utilisez pour signer les fichiers .jar.

      Keystore type: PKCS11
      Keystore provider: SunPKCS11-eToken
      Your keystore contains 1 entry
      7800FA4C81523ACA, PrivateKeyEntry,
      Certificate fingerprint (SHA2):
      XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX

    Remarque: avec les versions plus récentes du pilote SafeNet Authentication Client (SAC), la “Certificate Alias Value” correspondra au nom de l’organisation.

    Voici un exemple de sortie d’un jeton de signature de code utilisant les nouveaux pilotes SAC (capture d’écran 1):

    Solution:

    La “Certificate Alias Value” peut ne pas être une chaîne aléatoire de caractères alphanumériques. Il peut s’agir du nom de l’organisation indiqué dans la sortie de la commande Keytool. Il s’agit de la chaîne située avant la virgule de “PrivateKeyEntry”. Dans notre cas, il s’agit de “Win the Customer, LLC” au lieu d’une valeur aléatoire.

    SOLUTIONS ALTERNATIVES:

     Il est tout à fait possible qu’aucune valeur ne soit associée à l’alias du certificat: ni nom d’organisation ni autre valeur. Dans ce cas, le client doit essayer d’exécuter la commande Keytool sur un autre réseau/ordinateur, car des paramètres de stratégie de groupe ou d’autres éléments peuvent empêcher Keytool de communiquer avec le jeton et d’accéder à la valeur nécessaire à la signature.

    Si un alias de certificat incorrect est spécifié, le message d’erreur suivant s’affiche: java.security.KeyStoreException: PKCS11 not found.

    Pour corriger l’erreur ci-dessus, vous devez ajouter slot=0. Pour identifier le slot correct utilisé par le jeton, définissez le numéro de slot sur zéro dans votre fichier eToken.cfg (slot=0).

    Essayez d’exécuter à nouveau la commande list, en augmentant le numéro de slot de 1 à chaque nouvelle occurrence de l’erreur.

    Vous devriez finalement recevoir l’invite Enter KeyStore Password, qui acceptera votre phrase secrète SafeNet Token.

    etoken.cfg:
    ”name=eToken
    library=c:\WINDOWS\system32\eTPKCS11.dll
    slot=0”

    5. Pour utiliser le certificat de signature de code présent sur le jeton afin de signer file.jar, exécutez la commande suivante depuis l’invite de commandes:

    jarsigner -tsa http://timestamp.digicert.com -verbose -keystore NONE -
    storetype PKCS11 -providerClass sun.security.pkcs11.SunPKCS11 -
    providerArg ./eToken.cfg "C:\path\to\file.jar" "7800FA4C81523ACA"

     

    6. Si la commande s’exécute correctement, une sortie semblable à l’exemple suivant doit s’afficher:

    Enter Passphrase for keystore:

      adding: META-INF/7800FA4C.SF

    requesting a signature timestamp

    TSA location: http://timestamp.digicert.com

      adding: META-INF/7800FA4C.RSA

      signing: DigiCertTest.class

    jar signed.

     

    Dépannage

    • Le programme se met en pause et ne vous invite pas à saisir votre mot de passe.
      Si vous exécutez la commande keytool ou jarsigner et que le programme se met en pause sans vous demander de mot de passe, débranchez l’appareil (jeton), puis rebranchez-le. Exécutez à nouveau la commande. Cette fois, elle devrait fonctionner.

    • "jarsigner error: java.lang.ClassNotFoundException: sun.security.pkcs11.SunPKCS11"
      Cette erreur se produit lors de l’utilisation d’une version 64 bits du JDK. Pour éliminer cette erreur, téléchargez et utilisez une version 32 bits du JDK.

    • "jarsigner error: java.lang.RuntimeException: keystore load: load failed"
      Cette erreur peut se produire si vous saisissez un mot de passe incorrect.
    • "keytool error: java.security.KeyStoreException: PKCS11 not found"
      Cette erreur se produit si votre fichier de configuration ne se charge pas correctement ou s’il pointe vers un fichier qui n’existe pas (par exemple, library=c:\WINDOWS\system32\eTPKCS11.dll).

      Une autre solution consiste à ajouter la ligne suivante au fichier eToken.cfg "Slot=0"
      Pour identifier le numéro de slot correct, définissez le numéro de slot sur zéro et essayez d’exécuter à nouveau la commande de signature, en augmentant le numéro de slot de 1 à chaque nouvelle occurrence de l’erreur.

      Cette erreur indique parfois que les pilotes de périphérique du jeton ne sont pas installés sur votre ordinateur. Pour plus d’informations sur l’installation des pilotes, consultez les articles suivants de la base de connaissances: