122 votes

Services d'horodatage alternatifs pour Authenticode

Nous effectuons la signature du code et l'horodatage pour toutes nos constructions de production. Occasionnellement (généralement lorsque nous sommes sur le point d'effectuer la RTM ( !)) le serveur d'horodatage de Verisign (" http://timestamp.verisign.com/scripts/timstamp.dll ") décide de se mettre hors ligne 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 ? Suggestions d'autres serveurs d'horodatage hautement disponibles et gratuit les alternatives sont les bienvenues :)

93voto

flobadob Points 799

J'utilise le fichier batch suivant qui boucle un maximum de 300 fois. Il y a deux arguments, %1 est le chemin d'un dossier contenant le fichier batch, le fichier pfx et signtool.exe. %2 est le chemin complet du fichier à signer. Vous pouvez l'appeler dans votre événement post-construction Visual Studio avec quelque chose comme call "$(SolutionDir)thirdparty \signing\sign.bat " " $(SolutionDir)troisième partie \signing " "$(TargetPath)" J'ai modifié ce fichier batch pour utiliser différents serveurs d'horodatage à chaque itération. Actuellement, il utilise Comodo, Verisign, GlobalSign et Starfield. J'espère qu'il s'agit de l'ultime script de signature ;)

@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 aussi 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.

0 votes

"choix" a un problème de langue, donc j'utilise : choix /C yn /n /t 2 /d y >NUL

0 votes

En utilisant un script similaire que j'avais écrit, j'ai découvert un problème dans le fait que si TOUTE commande retournait une valeur non nulle, MSBuild considérait une telle erreur, et déclarait donc le projet comme échoué. Mon script a d'abord tenté de voir si la signature était même nécessaire. Je travaille toujours dessus. Avez-vous eu de tels problèmes ? Un deuxième niveau d'abstraction peut le résoudre, je suppose.

3 votes

J'interviens juste ici. Je sais que c'est une vieille réponse. Mais ce script est "presque" parfait et donc j'aimerais juste apporter mon changement. Lorsque le script est exécuté comme un événement post-build. Si un timestamp échoue mais qu'un timestamp suivant est réussi, la construction échoue toujours parce que MSBuild espionne les événements de signtool.exe et voit un échec, donc pense que c'est un échec. Cela s'est produit dans VS2012 et depuis une machine de construction. Ma solution est de changer l'horodatage pour l'abstraire dans une autre cmd afin que MSBuild ne puisse pas espionner comme tel : start /wait "Sign Tool" /D "%1" "signtool.exe" timestamp /t %%s %2

18voto

gregmac Points 12813

Je ne suis pas sûr que le serveur d'horodatage doive appartenir à l'AC racine ou non.

Nous utilisons http://timestamp.comodoca.com/authenticode (et ont un certificat Comodo authenticode) mais ont en fait un problème similaire, dans la mesure où leur serveur semble donner une erreur ou un temps d'arrêt occasionnel. Nous procédons à la signature dans le cadre d'une construction nocturne (ou à la demande) sur notre serveur d'intégration continue pour les constructions de versions uniquement (pas pour les constructions de débogage).

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

  • Si l'appel à signtool.exe échoue, il réessaie (immédiatement) deux fois de plus.
  • Le build script avait l'habitude de signer tous les exe en une seule étape (et nous en avons plusieurs dans le cadre de notre produit), et maintenant il le fait un par un - cela prend un peu plus de temps, mais il y a moins de risques d'échec.

Entre-temps, 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 ceci (ainsi que lit le mot de passe d'un certificat stocké en dehors du référentiel ) à https://gist.github.com/gregmac/4cfacea5aaf702365724

12voto

David Points 566

Cela fonctionne bien en remplaçant l'url de l'horodatage de Verisign par l'une des suivantes :

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

2 votes

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 Support téléphonique 24/7 Téléphone : +1-800-579-2848 ou +1-520-477-3104"

8voto

BruceCran Points 1164

N'importe quel serveur d'horodatage peut être utilisé : J'ai récemment abandonné le serveur d'horodatage de mon émetteur au profit de Verisign, car je trouvais que le serveur de GlobalSign n'était pas fiable. De plus, Thawte n'utilise pas son propre serveur d'horodatage. recommander les gens à utiliser celui de Verisign.

1 votes

Eh bien, Thawte est Verisign, donc

3voto

Vince Points 572

J'ai eu le même problème. Le serveur verisign n'était pas joignable pour certains fichiers que j'ai essayé de signer (mais d'autres fichiers dans le même build ont été correctement signés).

D'habitude, je réessaie et ça marche, mais aujourd'hui, pas question.

Après quelques recherches inhabituelles sur Internet, j'ai essayé de mettre http://\*.verisign.com dans la zone de confiance des sites et cela fonctionne... Finalement je ne sais pas si le serveur avait un problème et fonctionne maintenant ou si j'ai fait la bonne chose, nous verrons dans les prochains jours je pense. J'espère que cela pourra aider d'autres personnes qui sont bloquées.

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

0 votes

C'est probablement une coïncidence, car je trouve que ce site est simplement submergé et tombe en panne. On le voit souvent pendant les heures de pointe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X