ssign English version

Signer tous les formats : le module PKCS#11 pour osslsigncode

La commande ssign signe les fichiers PE (.exe, .dll, .sys…). Pour tous les autres formats Authenticode (MSI, CAB, catalogues, APPX, PowerShell), ssign fournit aussi un module PKCS#11, ssign-pkcs11, qui présente votre clé cloud Certum à osslsigncode, lequel sait déjà tous les hacher et les emballer. Toujours sans SimplySign Desktop, sans p11-kit, sans carte à puce : le module parle au cloud en HTTPS comme le reste de ssign.

1. Obtenir le module

2. Installer osslsigncode

osslsigncode a besoin soit du fournisseur (provider) PKCS#11 d'OpenSSL, soit du moteur (engine) libp11 : il charge pkcs11prov s'il est présent, et se rabat sinon sur le moteur. Les deux fonctionnent avec le module. Sous Debian ou Ubuntu :

apt-get install osslsigncode libengine-pkcs11-openssl

3. Récupérer le certificat intermédiaire Certum

L'option -ac intègre l'intermédiaire Certum « Code Signing 2021 CA » pour que la chaîne se vérifie. Le dépôt le fournit au format DER dans ssign-core/src/certs/ccsca2021.der ; convertissez-le en PEM avec OpenSSL :

openssl x509 -inform DER -in ccsca2021.der -out certum-code-signing-2021-ca.pem

4. Signer

cargo build -p ssign-pkcs11 --release   # → target/release/libssign_pkcs11.so

export CERTUM_EMAIL=vous@example.com CERTUM_OTP=GRAINE_BASE32
osslsigncode sign \
  -pkcs11module ./target/release/libssign_pkcs11.so \
  -pkcs11cert 'pkcs11:type=cert' -key 'pkcs11:type=private' \
  -ac certum-code-signing-2021-ca.pem \
  -h sha256 -t http://time.certum.pl/ \
  -in installeur.msi -out installeur-signe.msi

Indiquez le chemin du module téléchargé ou compilé. Le module lit les mêmes CERTUM_EMAIL et CERTUM_OTP (ou CERTUM_TOKEN, un code à 6 chiffres en cours de validité) que la commande.

Le module présente un seul certificat et une seule clé privée, tous deux nommés Certum SimplySign (ssign) : pkcs11:type=cert et pkcs11:type=private suffisent donc. Le script de test du dépôt les désigne par leur nom :

pkcs11:object=Certum%20SimplySign%20%28ssign%29;type=cert
pkcs11:object=Certum%20SimplySign%20%28ssign%29;type=private

Plusieurs fichiers, un seul code

osslsigncode recharge le module pour chaque fichier, et Certum n'accepte chaque code qu'une fois. Le module garde donc la session cloud en cache (le même cache que la commande ssign) : signer de nombreux fichiers d'affilée ne demande qu'un seul code. Vous pouvez signer vos fichiers PE avec ssign, puis votre MSI avec osslsigncode, avec une seule connexion. Voir le cache de session.

Testé de bout en bout

ssign-pkcs11/tests/sign-all-formats.sh signe et vérifie un fichier de chacun de ces formats via le module et osslsigncode : .exe, .dll, .msi et .ps1. CAB, CAT et APPX fonctionnent aussi dès qu'on lui fournit un fichier d'exemple, puisque osslsigncode les signe ; le script ne les génère simplement pas. Depuis un clone du dépôt, module compilé :

CERTUM_EMAIL=you@example.com CERTUM_OTP=SEED \
  ssign-pkcs11/tests/sign-all-formats.sh

Limites