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.
%%a
variable n'est jamais utilisée. Y a-t-il une faute de frappe dans la boucle for ou dans le commentaire?/p
est le mot de passe * .pfx.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:
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
la source
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
la source
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).
la source
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.
la source
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
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
la source
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.
la source
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:
Vous pouvez également configurer le nombre de tentatives (avec
--tsretries
) et le délai entre les tentatives (avec--tsretrywait
).la source