samedi 20 juin 2015

Comment signer un “JAR” avec une carte à puce

Pour permettre à vos développeurs de signer le code qu'ils générent, vous pouvez utiliser le certificat de signature de code stocké dans une carte à puce. Cette approche responsabilise le développeur qui signe en son nom propre et donc s'engage auprès du client, et elle évite l'apparition de code non-officiel dans vos livraisons.
Imaginons que vous souhaitez livrer des "jar" à vos clients. Pour permettre à votre client d'avoir confiance dans votre livraison, il est possible de signer le "jar"; la signature étant faite par le certificat de signature de votre développeur. Ce certificat a été émis par une autorité de certification en qui vos clients ont entière confiance.
Voici les étapes pour réaliser la signature de "jar".
Créer un fichier appelé "C:/EclipseLuna/test/pkcs11.cfg"
Ce fichier contient une référence à la librairie PKCS#11 qui correspond à la carte que vous utilisez
Capture
Note: attention à bien pointer sur la librairie PKCS#11 correspondant à votre carte. Il peut être prudent de vérifier l'accès à la carte via PKCS#11 en utilisant Firefox par exemple.
Modifier le contenu du fichier "C:\Program Files (x86)\Java\jre7\lib\security\java.security" de votre "jre" Java
Ajouter la ligne pointant sur votre fichier de configuration précédemment créé
security.provider.11=sun.security.pkcs11.SunPKCS11 C:/EclipseLuna/test/pkcs11.cfg
Capture1
Créer et importer le certificat de signature dans votre carte (voir article Créer votre propre certificat avec Openssl)
Obtenez le nom de l'alias de votre certificat de signature
> keytool -keystore NONE -storetype PKCS11 -list -v
Capture2
Dans notre cas l'alias est: "Users admin"
Ensuite allez dans le répertoire
> cd C:\Program Files (x86)\Java\jdk1.7.0_51\bin
Et lancer l'outil "jarsigner" en donnant le nom du fichier "jar" que vous souhaitez signer:
> ./jarsigner.exe -keystore NONE -storetype pkcs11 -providerClass sun.security.pkcs11.SunPKCS11 -providerArg "C:\EclipseLuna\test\pkcs11.cfg" c:\EclipseLuna\test\tools.jar "Users admin"Enter Passphrase for keystore: PIN code value
The jar file is signed.
Capture3
Vous pouvez avoir les messages d'avertissement suivants:
- The signer's certificate chain is not validated.
- No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not be able to validate
this jar after the signer certificate's expiration date (2016-01-17) or after any future revocation date.

Pour le premier il est nécessaire d'explicitement faire confiance à la CA qui a générée le certificat de signature. Cela peut être fait en important le certificat de signature et les certificats de la chaîne de certification dans la carte à puce
Pour le deuxième point il est nécessaire d'ajouter dans la ligne de commande de "jarsigner" l'option "-tsa" suivi de l'URL de l'autorité d'horodatage
Pour vérifier que le fichier "jar" a bien été signé, vous pouvez ouvrir le "jar" et regarder les fichiers ajoutés:
Capture4

Aucun commentaire:

Publier un commentaire

Partager avec...