Aller au contenu principal

Références

Cette page répertorie les informations de référence communes aux différentes méthodes d’intégration du service de signature de code à distance sslTrus, notamment :

  • Règles de calcul du nombre de signatures de code.
  • Protocole d’horodatage Authenticode et RFC 3161.
  • Serveurs d’horodatage de signature de code couramment utilisés.
  • Points à prendre en compte lors du choix d’un service d’horodatage dans un environnement de production.

Calcul du nombre de signatures​

Le nombre de signatures est calculé en fonction des actions de signature réellement effectuées.

Compréhension simple :

一个文件成功完成一次签名 = 一次签名次数

Le nombre de signatures n'est pas calculé en fonction du nombre de fichiers de code source, ni en fonction d'une seule compilation, d'un seul empaquetage ou d'un seul pipeline CI/CD.

Par exemple :

100 个源代码文件
↓
编译生成 1 个 app.exe
↓
app.exe 成功签名一次
↓
1 次签名

Si une construction produit :

app.exe
helper.dll
installer.msi

et les trois fichiers sont signés séparément, alors :

签名次数 = 3 次

Règles de base​

Nombre de signatures principalement dépend de :

  1. Quels fichiers ou objets ont finalement été signés.
  2. Combien de signatures ont réellement été effectuées sur chaque objet.
  3. S’il s’agit d’une signature client ordinaire ou d’appels de signature de bas niveau tels que KSP, Jarsigner, etc.
  4. Si l’outil de build a automatiquement signé des EXE, DLL, programmes de désinstallation ou packages d’installation supplémentaires.

Objets de signature courants :

  • .exe
  • .dll
  • .msi
  • .msp
  • .sys
  • .cat
  • .jar
  • Désinstaller le programme, par exemple uninstall.exe

Dès qu’un objet réussit effectivement une signature, celle-ci est comptabilisée selon la règle de décompte correspondante.

Comptabilisé uniquement en cas de succès​

Les frais de signature ne sont facturés que lorsque le service de signature de code à distance a effectué la signature avec succès.

Les situations suivantes ne sont généralement pas comptabilisées :

  • Échec de l'authentification.
  • Erreur de paramètre.
  • Certificat indisponible.
  • Échec de la requête réseau.
  • Le serveur n'a pas renvoyé le résultat de signature avec succès.
  • Interroger le certificat.
  • Interroger l'historique des signatures.
  • Vérifier la signature.
  • Supprimer la signature existante.
  • Générer le fichier de vérification.

Si le service distant a déjà renvoyé avec succès le résultat de la signature, mais que le client échoue ensuite lors de l’écriture locale du fichier, de l’ajout de l’horodatage ou de l’exécution du traitement ultérieur, la signature distante déjà effectuée est toujours comptabilisée comme une signature réussie.

L'horodatage ne compte pas séparément​

L'horodatage sert à prouver que la signature existait déjà à un moment donné ; il ne s'agit pas d'une nouvelle opération de signature de code.

Par conséquent :

Signature de code → génère des signatures
Horodatage → ne génère pas de signatures supplémentaires
Vérification de signature → ne génère pas de signatures

La réussite du service d’horodatage n’affecte que le résultat de l’horodatage du fichier de signature final ; cela ne signifie pas qu’une signature de code supplémentaire a été exécutée.

SignTool CLI​

Utilisez sslTrus SignTool CLI :

signtool sign \
--cert-code CERT_CODE \
--file app.exe

Si la signature réussit :

1 个文件 × 1 次成功签名 = 1 次

Par exemple :

signtool sign --cert-code CERT_CODE --file app.exe
signtool sign --cert-code CERT_CODE --file helper.dll
signtool sign --cert-code CERT_CODE --file installer.msi

Les trois fichiers ont tous réussi :

合计 = 3 次

Double signature avec SignTool CLI​

Si vous utilisez la CLI standard de SignTool avec SHA-1 et SHA-2 activés en même temps :

signtool sign \
--cert-code CERT_CODE \
--file app.exe \
--sha1=true \
--sha2=true

Signature CLI double ordinaire est calculée comme une tâche de signature client unique :

GUI / SignTool CLI 双签 = 1 次

C'est l'endroit le plus facile à confondre entre le processus de signature client ordinaire et l'appel de signature sous-jacent de KSP.

Windows KSP​

KSP est le mode d'intégration du fournisseur CNG Windows.

Lorsque Microsoft SignTool, MSBuild, Visual Studio, les outils de packaging Electron ou d'autres logiciels Windows appellent la signature de code à distance via KSP, le décompte est plus proche de :

底层远程私钥签名调用次数

Par exemple :

OpérationNombre de signatures
Effectuer une signature SHA256 sur app.exe1 fois
Effectuer d’abord SHA256, puis ajouter SHA12 fois
Signer respectivement app.exe, helper.dll, uninstall.exe3 fois

Par conséquent :

SignTool CLI 双签 = 1 次
KSP 双签 = 2 次

Si l’outil effectue plusieurs opérations de signature sous-jacentes sur le même fichier, chaque signature à distance réussie est comptée séparément.

CSP​

CSP est le fournisseur CryptoAPI Windows traditionnel.

Le CSP est également appelé par Microsoft SignTool ou d’autres applications Windows via le fournisseur pour le service de signature à distance.

Pour déterminer le nombre de signatures, il convient de se baser sur les opérations de signature à clé privée à distance réellement effectuées.

Si l'outil signe plusieurs fichiers séparément ou signe plusieurs fois le même fichier, chaque opération doit être calculée séparément.

Jarsigner​

Lors de l’utilisation du fournisseur sslTrusJarsigner, la norme jarsigner appelle le service distant de signature de code pendant le processus de signature.

Généralement :

OpérationNombre de signatures
Signature de app.jar1 fois
Signature de 3 JAR séparément3 fois
Exécuter une nouvelle signature sur le même JARAjouter 1 fois de plus
jarsigner -verify0 fois
Génération du keystore de validation0 fois

Par conséquent :

每个 JAR 每次成功完成签名 = 1 次

Paquet d’installation​

Le package d’installation doit être distingué selon :

  1. Les fichiers exécutables contenus dans le paquet d’installation.
  2. Le paquet d’installation lui-même.

Par exemple :

app.exe       → signature 1 fois
installer.msi → signature 1 fois

Alors :

合计 = 2 次

S’il existe d’autres fichiers :

FichierSignéNombre de signatures
app.exeOui1
helper.dllOui1
driver.sysOui1
installer.msiOui1
Total4

Le nombre de codes sources, de fichiers de ressources, d’images ou de fichiers de configuration contenus dans le paquet d’installation n’affecte pas directement le nombre de signatures.

Le point clé est :

最终到底有哪些产物被实际签名

Electron​

Les outils de construction d’applications de bureau tels qu’Electron Builder et Electron Forge peuvent signer automatiquement plusieurs fichiers au cours d’un seul processus d’empaquetage.

Les objets courants incluent :

  • Programme principal .exe
  • DLL
  • Programme de mise à jour
  • Programme de désinstallation
  • Package d'installation .exe
  • MSI
  • Autres fichiers exécutables auxiliaires

Par exemple :

ProduitNombre de signatures
MyApp.exe1
ffmpeg.dll1
update.exe1
uninstall.exe1
MyApp Setup.exe1
Total5

Par conséquent :

一次 Electron Build ≠ 一次签名

Il convient de calculer en fonction du nombre réel de produits signés et du nombre de signatures exécutées pour chaque produit.

Si Electron utilise KSP et effectue une double signature sur le même fichier, celui-ci peut également générer deux signatures à distance.

Diagnostic rapide​

Lorsque vous ne savez pas combien de signatures une seule construction va générer, vous pouvez vérifier dans l'ordre suivant :

1. 最终有哪些文件被签名?
2. 每个文件签了几次?
3. 使用的是 SignTool CLI 还是 KSP / Jarsigner?
4. 构建工具有没有自动签额外文件?

Cela peut être simplement compris comme suit :

签名次数 = 成功完成的签名动作数量之和

Attention particulière :

GUI / SignTool CLI 双签                = 1 次
KSP 对同一个文件执行两次底层签名 = 2 次
Jarsigner 每个 JAR 每次成功签名 = 1 次
时间戳 = 0 次
验证签名 = 0 次

Serveur d'horodatage​

Le signature de code utilise généralement aussi un service d’horodatage.

L’horodatage peut prouver qu’une signature numérique existait déjà à un moment donné, ce qui permet au vérificateur de juger la validité de la signature en combinant le certificat de signature, le certificat d’horodatage, l’état de révocation et la politique de validation.

Les deux protocoles d’horodatage couramment utilisés pour la signature de code :

ProtocoleDescription
AuthenticodeProtocole d’horodatage hérité de Microsoft, principalement utilisé pour la compatibilité avec les anciens flux de signature de code Windows
RFC 3161Protocole d’horodatage universel, adapté aux scénarios modernes de signature de code

Les scénarios modernes de signature de code privilégient généralement RFC 3161.

RFC 3161​

La demande de certificat d'horodatage RFC 3161 envoie le condensé des données à horodater, et non le fichier original.

Flux de base :

代码签名
↓
计算待时间戳数据摘要
↓
发送摘要到 TSA
↓
TSA 返回时间戳令牌
↓
写入最终签名

Le jeton d’horodatage comprend généralement :

  • Résumé des données.
  • Horodatage de l’émission.
  • Politique TSA.
  • Signature numérique TSA.

Le serveur d'horodatage ne consomme pas de nombre de signatures de code sslTrus supplémentaire en raison de l'ajout d'un horodatage.

Serveurs d'horodatage couramment utilisés​

Les points de terminaison suivants s’appliquent aux scénarios courants de signature de code.

Avant la mise en production, il convient de revérifier la documentation officielle la plus récente, les politiques de service et la disponibilité du fournisseur correspondant.

Microsoft​

http://timestamp.acs.microsoft.com

Principalement utilisé pour l'horodatage RFC 3161.

Convient comme candidat d’horodatage pour les scénarios modernes de signature de code Windows.

Voici un exemple de configuration Apache pour SSL.

--timestamp-rfc3161=http://timestamp.acs.microsoft.com

Microsoft SignTool :

/tr http://timestamp.acs.microsoft.com
/td SHA256

Sectigo​

http://timestamp.sectigo.com

Prise en charge :

  • Authenticode
  • RFC 3161

Peut être utilisé pour Windows et d’autres outils de signature de code prenant en charge les protocoles correspondants.

Sectigo impose des exigences d’utilisation côté service pour les appels par lots. Les systèmes de production doivent contrôler la fréquence des appels conformément à leur politique officielle actuelle.

DigiCert​

http://timestamp.digicert.com

Prend en charge RFC 3161, peut être utilisé dans des scénarios de signature de code tels que Microsoft Authenticode.

Certum​

http://time.certum.pl

Prise en charge :

  • Authenticode
  • RFC 3161

Les documents officiels de signature de code Certum couvrent les scénarios de signature Windows et Java JAR.

GlobalSign​

http://timestamp.globalsign.com/tsa/r45standard

Le profil de signature de code GlobalSign actuel utilise cette adresse d’horodatage RFC 3161.

Il est déconseillé de continuer à utiliser les anciennes adresses GlobalSign qui ne figurent plus dans la documentation officielle actuelle de signature de code.

SSL.com​

http://ts.ssl.com

Prise en charge de RFC 3161, pas de prise en charge du protocole d'horodatage Authenticode traditionnel.

Si l’outil de signature cible ou le système existant présente des restrictions de compatibilité avec l’algorithme de clé utilisé par la TSA, une validation réelle doit être effectuée avant la mise en production.

Comparaison des serveurs d'horodatage​

FournisseurAdresseAuthenticodeRFC 3161
Microsofthttp://timestamp.acs.microsoft.comNon confirméPris en charge
Sectigohttp://timestamp.sectigo.comPris en chargePris en charge
DigiCerthttp://timestamp.digicert.comNon confirméPris en charge
Certumhttp://time.certum.plPris en chargePris en charge
GlobalSignhttp://timestamp.globalsign.com/tsa/r45standardNon confirméPris en charge
SSL.comhttp://ts.ssl.comNon pris en chargePris en charge

Le « Support » dans le tableau décrit les capacités de protocole confirmées par les informations publiques du fournisseur correspondant.

Les politiques des services d'horodatage peuvent évoluer ; avant toute configuration en production, il convient de vérifier à nouveau la documentation officielle actuelle du fournisseur.

Service d'horodatage restreint​

Certains serveurs d’horodatage fournissent bien un service RFC 3161, mais ils ne peuvent pas être utilisés directement comme TSA publique anonyme.

QuoVadis​

Les adresses RFC 3161 publiques incluent :

http://ts.quovadisglobal.com/eu
http://ts.quovadisglobal.com/ch

Ce service exige un enregistrement préalable de l’adresse IP de sortie de l’appelant ; l’autorisation correspondante doit donc être effectuée avant l’intégration.

Apple​

http://timestamp.apple.com/ts01

Service d'horodatage utilisé dans l'écosystème de signature de code Apple.

Il ne doit pas être utilisé directement comme serveur d’horodatage universel pour Windows Authenticode.

Service d’horodatage de type test​

Certains services publics RFC 3161 sont plus adaptés aux tests de protocole qu’à une utilisation directe comme TSA pour la signature de code en production.

Par exemple :

https://freetsa.org/tsr

Ces services peuvent utiliser leurs propres certificats CA et TSA.

Par conséquent, il ne faut pas présumer :

Windows
macOS
Java
其他代码签名验证器

Par défaut, sa chaîne de certificats est toujours approuvée.

L'environnement de production doit utiliser la plateforme cible pour valider réellement les artefacts signés.

Vérification de l’environnement de production​

Avant d’ajouter un serveur d’horodatage à la configuration de production, il est recommandé de confirmer au minimum :

  1. La documentation officielle du fournisseur de services publie clairement ce point de terminaison.
  2. Le fournisseur de services prend explicitement en charge le protocole d'horodatage requis.
  3. Utilisez SHA-256 ou un algorithme de résumé d'horodatage plus fort.
  4. Le système cible peut vérifier la chaîne de certificats complète de la TSA.
  5. Le DNS, le proxy, le pare-feu et le réseau de sortie peuvent accéder de manière stable à la TSA.
  6. Le mode d'authentification, les limites de débit, les restrictions régionales et les conditions de service ont été confirmés.
  7. Utilisez les artefacts de signature réels pour terminer le test de vérification de signature.

Ne vous fiez pas uniquement à :

浏览器可以打开
HTTP 返回 200

Déterminer si le serveur d’horodatage est adapté à la signature de code.

Vous devez utiliser un véritable outil de signature pour envoyer la requête d’horodatage, puis effectuer une validation sur le produit final.

Conseils pour le choix de l’horodatage​

Pour la signature de code SHA-2 sous Windows moderne, les services d’horodatage compatibles RFC 3161 sont généralement privilégiés.

Par exemple :

Microsoft
Sectigo
DigiCert
Certum
GlobalSign

Le choix final doit être considéré de manière globale :

  • Système d’exploitation cible.
  • Outil de signature.
  • Chaîne de certificats TSA.
  • Accessibilité réseau.
  • Restrictions régionales.
  • Limite de fréquence d’appel.
  • Conditions de service.
  • Accord de niveau de service.
  • Résultat de vérification réel du produit signé.

Si le fournisseur de certificats a des exigences explicites concernant le service d'horodatage, vous devez suivre en priorité la politique de certificat correspondante et les exigences du fournisseur de services.

Modes d’intégration associés​

Les différentes méthodes d'intégration utilisent les règles de nombre de signatures et d'horodatage présentées sur cette page :

Scénario d’utilisationDocument
SignTool CLIOutil client
Windows KSP / CSPWindows Provider
JarsignerIntégration Java
GitHub Actions, Electron Builder, Advanced InstallerCI/CD et outils de build
Appel direct de l’interface de signature à distanceIntégration API