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
- Téléchargez-le depuis la page de téléchargement :
libssign_pkcs11.sosous Linux,libssign_pkcs11.dylibsous macOS,ssign_pkcs11.dllsous Windows. - Ou compilez-le depuis un clone du dépôt :
cargo build -p ssign-pkcs11 --release.
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
- SHA-256 avec RSA PKCS#1 v1.5 uniquement : passez
-h sha256. - Le module signe ; il ne génère pas de clés et ne vérifie pas les signatures.