Alternative timestamping services for Authenticode

我们为所有的生产构建执行代码签名和时间戳。偶尔(通常是在我们快要 RTM 的时候)Verisign 上的时间戳服务器(“ http://timestamp.verisign.com/scripts/timstamp.dll”)决定间歇性地脱机。

这种情况下我们该怎么办?

  • 时间戳服务器是否必须由 你的根认证机构?
  • 是否有其他网络托管的时间戳服务器,我们可以使用 如果他们的服务器关闭,如何替代 Verisign? 欢迎提供其他高可用性和 自由替代品的建议:)
78409 次浏览

我不确定时间戳服务器是否必须属于根 CA。

我们使用 http://timestamp.comodoca.com/authenticode(并且有一个 Comodo Authenticode 证书) ,但实际上也有类似的问题,因为他们的服务器似乎偶尔会出错或超时。我们在持续集成服务器上每晚(或按需)只为发布版本(不为调试版本)进行签名。

我通过两种方式(大多数情况下)解决了这个问题:

  • 如果对 signtool.exe 的调用失败,它将(立即)再次尝试两次
  • The build script used to sign every exe in one step (and we have several as part of our product), and now it does one-by-one - takes slightly longer, but is less likely to fail

在这两者之间,由时间戳服务器问题引起的构建失败已经从每周一次或两次几乎从未发生过。

编辑: 我有一个 MSBuild 任务,它在 https://gist.github.com/gregmac/4cfacea5aaf702365724上完成这个任务(以及 读取存储库外部存储的证书密码)

任何时间戳服务器都可以使用: 我最近从发行者的时间戳服务器切换到 Verisign,因为我发现 GlobalSign 的服务器不可靠。此外,Thawte 不运行他们自己的时间戳服务器,但 推荐的人使用 Verisign 的。

我也有同样的问题。Verisign 服务器有时无法访问我试图签名的一些文件(但同一构建中的其他文件已经正确签名)。

我通常会重试,但今天不行。

So after some unusefull research on internet I tried to put http://*.verisign.com in trusted zone sites and it works... 最后,我不知道是否服务器有问题,现在工作或如果我做了正确的事情,将在未来几天看到我认为。 希望对其他被封锁的人有所帮助。

服务器配置: Windows Server 2003 sp2,IE8,在。

通过将 verisign 时间戳 url 替换为以下内容之一,它可以很好地工作:

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

我使用下面的批处理文件,最多循环300次。有两个参数,% 1是包含批处理文件、 pfx 文件和 signtool.exe 的文件夹的路径。% 2是正在签名的文件的完整路径。您可以在您的可视化工作室的 post build 事件中使用类似于调用“ $(SolutionDir)第三方签名 sign.bat”“ $(SolutionDir)第三方签名”“ $(TargetPath)”这样的命令来调用它 I have modified this batch file to use different timestamp servers in each iteration. Currently it uses Comodo, Verisign, GlobalSign and Starfield. Hopefully this is The Ultimate Signing Script ;)

@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

我也把 http://timestamp.comodoca.com放到可信站点(感谢文斯)。我觉得这是很重要的一步。我也更新了 PC 上的根证书。

VeriSign 时间戳服务是免费的。这可能就是为什么它的可靠性不够的原因; 他们没有给它一个维护预算!

这绝对是 很大的问题。由于代码时间戳失败而导致的构建失败浪费时间是整个软件开发行业日益严重的问题。当然,您可以编写一个复杂的脚本来进行轮换,直到找到一个可以工作的时间戳服务器为止。.但是,真的吗?

我们应该要求更好的。我们为这些证书付了很多钱。

请注意,我后来发现,在 Verisign 和 Comodo 关闭的时候(通常发生在工作日的工作时间) ,几乎没有人听说过可以使用替代的时间戳服务器。

您可以使用 签名代替 signtool 对构建进行签名和时间戳,它支持故障转移到其他时间戳服务。

命令行语法如下:

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

您还可以配置尝试次数(使用 --tsretries)和尝试之间的延迟(使用 --tsretrywait)。

You can usually use any time stamping service you want. Although most CA's will provide a time stamping service. Examples

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 在2019年末正式成为了 EOL,更多信息请看我对下面问题的回答。

Http-time戳-verisign-com-script-tim戳-dll-not-able