7

我想用我自己的 Authenticode 时间戳服务给我的 DLL 文件加上时间戳。这可能吗?我怎么能做到这一点?

4

5 回答 5

6

您可以开发自己的时间戳服务。您可以编写 TSP (RFC 3161) 服务器,但 Authenticode 不使用 RFC 3161,而是使用MSDN 文章中描述的 PKCS#7/PKCS#9 格式(您也可以实现)。我们的SecureBlackbox组件包括支持这两种格式的时间戳服务器组件。更新:最近对 Authenticode 的更新使用标准 RFC 3161 时间戳。

但问题是要获得用于签署时间戳的证书。该证书必须由其中一个 CA 颁发,据我了解,对于运行时间戳服务器的管理和基础架构方面存在严格的要求。特别是您需要有一个安全的时间戳硬件。我没有深入研究这个问题,但是这些方面比编写一段代码要复杂得多。

尽管如此,如果您运行自己的 PKI 基础设施(拥有自己的可信根证书和 CA 证书),那么拥有可信时间戳证书的问题就会自动解决——您可以生成自己的证书。

于 2013-05-22T15:45:34.533 回答
6

您需要编写一个自定义 HTTP 时间戳服务器。它应该遵循RFC 3161时间戳协议 (TSP) 规则。

当您使用Windows SDK 中的Signtool.exe等工具对 DLL 进行身份验证时,您可以指定时间戳服务器的 url(使用 /t 开关。另请参见 /tr 和 /td)。然后,您将指向您的服务器。

有关相关问题,请参见此处的 SO:Trusted Timestamps - Understanding the format (rfc3161)

以及:Authenticode 的替代时间戳服务

于 2012-07-03T13:46:04.957 回答
4

您可以使用 SignServer 设置您自己的支持 Authenticode 时间戳(和/或 RFC#3161)的时间戳授权 (TSA)。

有关下载和安装说明,请参见https://www.signserver.org。总之,重要的步骤是:

  1. 确保您具有先决条件:

    • 爪哇
    • 应用服务器(即 WildFly)
    • 用于部署的 Apache Ant
  2. 从https://signserver.orghttps://sourceforge.net/projects/signserver/files/signserver/4.0/下载 4.0 版本。

  3. 配置应用服务器

    • 对于 HTTPS(可选)
    • 使 Web 服务正常工作
    • 使用最新的安全修复补丁
  4. 配置 SignServer 部署

    • 在 conf/signserver_deploy.properties 中设置 database.name=nodb 和 database.nodb.location=/an/empty/folder/as/db
  5. 部署 SignServer

    • 导出 APPSRV_HOME=/opt/wildfly-9/
    • bin/ant 部署
    • 启动应用服务器 /opt/wildfly-9/bin/standalone.sh
  6. 检查服务器是否已启动

    • bin/signserver getstatus 简介
  7. 设置加密令牌

    • bin/signserver setproperties doc/sample-configs/keystore-crypto-configuration.properties
    • bin/signserver 重新加载 1
    • bin/signserver getstatus 简介
  8. 设置示例时间戳签名者

    • bin/signserver setproperties doc/sample-configs/qs_timestamp_configuration.properties
    • bin/signserver 重新加载 2
    • bin/signserver getstatus 简介
  9. 测试时间戳签名者

于 2016-04-15T15:11:04.427 回答
1

假设您希望将其用于测试,如果您乐于使用带有 /tr 开关的 signtool.exe,则不必查看 RFC,因为 openssl 为您实现了足够多的功能。只需用您喜欢的语言编写一个 HTTP POST 处理程序,将发布的数据逐字传递到“openssl ts -reply”中,然后发回 openssl TS 响应数据。这足以欺骗“signtool.exe verify /pa”,即使它没有严格遵循 RFC。

编辑:似乎开源 Java Signserver 项目为您提供了一个处理 MSauthenticode (/t) 和 rfc3161 (/tr) 时间戳的服务器。对我来说,Signserver 的配置涉及太多依赖项,因此我改用了它的 MSAuthenticode 时间戳单元测试,将一个小型 HTTP 服务器固定在测试用例上,并且几乎没有工作 - 我的 Java 技能充其量是平庸的 - 有一个正在运行的验证码时间戳服务器供开发使用,并已验证由此创建的时间戳不受此问题的影响。我不能发布源代码,但是按照这个技巧应该可以让你很快地工作。

于 2015-11-13T11:30:48.753 回答
0

https://PKIaaS.io提供符合 RFC 3161 和 Microsoft Authenticode 的时间戳服务器。在站点上创建证书颁发机构后,它将在“CA 服务 URL”列表中显示一个时间戳 URL,时间戳请求可以发送到该 URL 以进行签名。

于 2021-01-09T16:42:13.180 回答