Services d'horodatage alternatifs pour Authenticode

115

Nous effectuons la signature de code et l'horodatage pour toutes nos versions de production. Occasionnellement (généralement lorsque nous sommes sur le point de RTM (!)), Le serveur d'horodatage de Verisign (" http://timestamp.verisign.com/scripts/timstamp.dll ") décide de se déconnecter par intermittence.

Que devons-nous faire dans ce cas?

  • Le serveur d'horodatage doit-il être hébergé par votre autorité de certification racine?
  • Y a-t-il d'autres serveurs d'horodatage hébergés sur le réseau que nous pourrions utiliser à la place de Verisign si leur serveur est en panne? Les suggestions d'autres alternatives hautement disponibles et gratuites sont les bienvenues :)
Stephen Connolly
la source

Réponses:

91

J'utilise le fichier de commandes suivant qui boucle un maximum de 300 fois. Il existe deux arguments,% 1 est le chemin d'accès à un dossier contenant le fichier de commandes, le fichier pfx et signtool.exe. % 2 est le chemin d'accès complet au fichier en cours de signature. Vous pouvez appeler cela dans votre événement post build de Visual Studio avec quelque chose comme call "$ (SolutionDir) thirdparty \ signature \ sign.bat" "$ (SolutionDir) thirdparty \ signature" "$ (TargetPath)" J'ai modifié ce fichier batch en utilisez des serveurs d'horodatage différents à chaque itération. Actuellement, il utilise Comodo, Verisign, GlobalSign et Starfield. J'espère que c'est le script de signature ultime;)

@echo off    

REM create an array of timestamp servers...
set SERVERLIST=(http://timestamp.comodoca.com/authenticode http://timestamp.verisign.com/scripts/timestamp.dll http://timestamp.globalsign.com/scripts/timestamp.dll http://tsa.starfieldtech.com)

REM sign the file...
%1\signtool.exe sign /f %1\comodo.pfx /p videodigital %2

set timestampErrors=0

for /L %%a in (1,1,300) do (

    for %%s in %SERVERLIST% do (

        REM try to timestamp the file. This operation is unreliable and may need to be repeated...
        %1\signtool.exe timestamp /t %%s %2

        REM check the return value of the timestamping operation and retry a max of ten times...
        if ERRORLEVEL 0 if not ERRORLEVEL 1 GOTO succeeded

        echo Signing failed. Probably cannot find the timestamp server at %%s
        set /a timestampErrors+=1
    )

    REM wait 2 seconds...
    choice /N /T:2 /D:Y >NUL
)

REM return an error code...
echo sign.bat exit code is 1. There were %timestampErrors% timestamping errors.
exit /b 1

:succeeded
REM return a successful code...
echo sign.bat exit code is 0. There were %timestampErrors% timestamping errors.
exit /b 0

J'ai également mis http://timestamp.comodoca.com dans les sites de confiance (merci Vince). Je pense que cela peut être une étape importante. J'ai également mis à jour les certificats racine sur le PC.

flobadob
la source
3
Je suis juste ici. Je sais que c'est une vieille réponse. Mais ce script est "presque" parfait et je voudrais donc simplement ajouter mon changement. Lorsque le script est exécuté en tant qu'événement post-build. Si un horodatage échoue mais qu'un horodatage suivant réussit, la construction échoue toujours car MSBuild espionne les événements de signtool.exe et voit un échec, pense donc que c'est un échec. Cela s'est produit dans VS2012 et à partir d'une machine de construction. Mon correctif consiste à modifier l'horodatage pour l'abréger dans un autre cmd afin que MSBuild ne puisse pas espionner en tant que tel: démarrer / attendre "Sign Tool" / D "% 1" "signtool.exe" timestamp / t %% s% 2
Skintkingle
1
Je ne comprends pas la partie "et réessayer au maximum dix fois ..." . La %%avariable n'est jamais utilisée. Y a-t-il une faute de frappe dans la boucle for ou dans le commentaire?
l33t
1
Note supplémentaire à l'excellente réponse de flobadob. Si vous comptez l'utiliser dans une étape de post-construction dans Visual Studio, vous devrez utiliser l'instruction "Call". Voir cet article: Visual Studio Multiple Post Build Commands
GadgetNC
1
Pour sha256, vous devez utiliser / tr " sha256timestamp.ws.symantec.com/sha256/timestamp " maintenant, ce qui est assez rapide d'ailleurs
Vince
1
Pour tout le monde qui se demande. Oui, cette valeur après /pest le mot de passe * .pfx.
JensG
16

Je ne sais pas si le serveur d'horodatage doit appartenir à l'autorité de certification racine ou non.

Nous utilisons http://timestamp.comodoca.com/authenticode (et avons un certificat d'authenticité Comodo) mais avons en fait un problème similaire, en ce que leur serveur semble donner une erreur ou expirer de temps en temps. Nous signons dans le cadre d'une compilation nocturne (ou à la demande) sur notre serveur d'intégration continue pour les versions Release uniquement (pas pour les versions Debug).

J'ai contourné ce problème (principalement) de deux manières:

  • Si l'appel à signtool.exe échoue, il essaie à nouveau (immédiatement) deux fois de plus
  • Le script de construction utilisé pour signer chaque exe en une seule étape (et nous en avons plusieurs dans notre produit), et maintenant il le fait un par un - prend un peu plus de temps, mais est moins susceptible d'échouer

Entre ces derniers, les échecs de construction causés par des problèmes de serveur d'horodatage sont passés d'une ou deux fois par semaine à pratiquement jamais.

EDIT: J'ai une tâche MSBuild qui fait cela (ainsi que lit un mot de passe de certificat stocké en dehors du référentiel ) à https://gist.github.com/gregmac/4cfacea5aaf702365724

Gregmac
la source
12

Cela fonctionne bien en remplaçant l'URL d'horodatage verisign par l'un de ceux-ci:

http://timestamp.comodoca.com/authenticode
http://www.trustcenter.de/codesigning/timestamp

David
la source
2
Il semble que l'horodatage ne soit plus disponible sur trustcenter.de: "Symantec Tous les produits et services fournis par TC TrustCenter GmbH ne sont plus disponibles. Toute question à ce sujet doit être adressée à: Symantec TC TrustCenter Assistance téléphonique 24/7 Téléphone: +1 -800-579-2848 ou + 1-520-477-3104 "
Valdimar
8

Le service d'horodatage VeriSign est gratuit. C'est peut-être pourquoi sa fiabilité est loin d'être adéquate; ils ne lui donnent pas un budget d'entretien!

C'est certainement un gros problème. La perte de temps due à des builds échoués suite à des échecs d'horodatage de code est un problème croissant dans l'industrie du développement logiciel. Bien sûr, vous pouvez écrire un script complexe à parcourir, jusqu'à ce que vous trouviez un serveur d'horodatage fonctionnel ... mais, vraiment?

Nous devrions exiger mieux. Nous payons BEAUCOUP pour ces certificats.

Notez que plus tard, j'ai trouvé des serveurs d'horodatage alternatifs dont peu de gens ont entendu parler étaient bons à utiliser dans les périodes où Verisign et Comodo sont en panne (cela se produit généralement pendant les heures de travail les jours ouvrables).

Dyasta
la source
7

N'importe quel serveur d'horodatage peut être utilisé: j'ai récemment basculé du serveur d'horodatage de mon émetteur vers Verisign car j'ai trouvé que le serveur de GlobalSign n'était pas fiable. De plus, Thawte n'exécute pas son propre serveur d'horodatage mais recommande aux gens d'utiliser celui de Verisign.

BCran
la source
1
Eh bien, Thawte est Verisign, donc.
Utilisateur StackExchange
4

Vous pouvez généralement utiliser le service d'horodatage de votre choix. Bien que la plupart des CA offrent un service d'horodatage. Exemples

http://timestamp.globalsign.com/scripts/timstamp.dll
http://timestamp.comodoca.com/authenticode
http://www.startssl.com/timestamp
http://timestamp.digicert.com?alg=sha1
http://timestamp.digicert.com?alg=sha256

timestamp.verisign.com était officiellement EOL au backend de 2019 pour plus d'informations, elle ma réponse à la question ci-dessous.

http-timestamp-verisign-com-scripts-timstamp-dll-not-available

RickWeb
la source
recherché la spécification digicert alg! Où est-ce documenté?
yano le
1
knowledge.digicert.com/alerts/... espérons que cela vous aidera
RickWeb
3

J'ai eu le même problème. Le serveur verisign n'était parfois pas accessible pour certains fichiers que j'ai essayé de signer (mais d'autres fichiers de la même version étaient correctement signés).

J'ai l'habitude de réessayer et cela fonctionne mais aujourd'hui, pas moyen.

Donc, après quelques recherches inutiles sur Internet, j'ai essayé de mettre http: //*.verisign.com dans des sites de zone de confiance et cela fonctionne ... Enfin, je ne sais pas si le serveur avait un problème et fonctionne maintenant ou si j'ai fait le bonne chose, verra dans les prochains jours, je pense. J'espère que cela peut aider d'autres qui sont bloqués.

La configuration du serveur: Windows Server 2003 sp2, IE8, sécurité renforcée activée.

Vince
la source
Probablement par hasard car je trouve que ce site est tout simplement débordé et tombe en panne. Vous pouvez le voir souvent pendant les heures de pointe.
dyasta
1

Vous pouvez utiliser Jsign au lieu de signtool pour signer et horodater vos builds, il prend en charge le basculement vers des services d'horodatage alternatifs.

La syntaxe de la ligne de commande ressemble à ceci:

jsign --keystore keystore.p12 --alias test --storepass password \
      --tsaurl http://timestamp.comodoca.com/authenticode,http://timestamp.globalsign.com/scripts/timestamp.dll \
      application.exe

Vous pouvez également configurer le nombre de tentatives (avec --tsretries) et le délai entre les tentatives (avec --tsretrywait).

Emmanuel Bourg
la source
avec un nom comme celui-là, vous penseriez qu'il pourrait gérer les JAR
caduceus