代码签名时间戳仍然使用时间戳服务器过期

Kra*_*ime 5 code-signing certificate

不知道为什么,但是当使用赛门铁克的时间戳服务器使用代码签名时,它会设置 2020 年的到期时间。如果我的程序仍将到期,这违背了使用时间戳服务器的目的。

以下是使用 signtool.exe 验证时间戳应用程序时的输出:

Signature Index: 0 (Primary Signature)
Hash of file (sha1): A6F0CEC09F02900D7977C60A87567031D0D96C7A

    Signing Certificate Chain:
        Issued to: thawte Primary Root CA
        Issued by: thawte Primary Root CA
        Expires:   Wed Jul 16 19:59:59 2036
        SHA1 hash: 91C6D6EE3E8AC86384E548C299295C756C817B81

            Issued to: Thawte Code Signing CA - G2
            Issued by: thawte Primary Root CA
            Expires:   Fri Feb 07 19:59:59 2020
            SHA1 hash: 808D62642B7D1C4A9A83FD667F7A2A9D243FB1C7

                Issued to: My Company
                Issued by: Thawte Code Signing CA - G2
                Expires:   Tue Aug 11 19:59:59 2015
                SHA1 hash: E45B4CBFBA095DB9465F2371C161EF500201561B

    The signature is timestamped: Wed Oct 22 12:15:44 2014
    Timestamp Verified by:
        Issued to: Thawte Timestamping CA
        Issued by: Thawte Timestamping CA
        Expires:   Thu Dec 31 19:59:59 2020
        SHA1 hash: BE36A4562FB2EE05DBB3D32323ADF445084ED656

            Issued to: Symantec Time Stamping Services CA - G2
            Issued by: Thawte Timestamping CA
            Expires:   Wed Dec 30 19:59:59 2020
            SHA1 hash: 6C07453FFDDA08B83707C09B82FB3D15F35336B1

                Issued to: Symantec Time Stamping Services Signer - G4
                Issued by: Symantec Time Stamping Services CA - G2
                Expires:   Tue Dec 29 19:59:59 2020
                SHA1 hash: 65439929B67973EB192D6FF243E6767ADF0834E4


    Successfully verified: SetupGoVivoConsole.exe

    Number of files successfully Verified: 1
    Number of warnings: 0
    Number of errors: 0
Run Code Online (Sandbox Code Playgroud)

请注意,此证书的有效期设置为 1 年,因此它使用赛门铁克提供的服务器的时间戳。根据有关此主题的(有限的)文档,在签署应用程序时使用时间戳服务器应该可以避免应用程序在证书过期后过期。根据我上面看到的信息,情况并非如此,因为我的应用程序将在Tue Dec 29 19:59:59 2020.

我用于 signtool 的命令如下:

signtool.exe sign /f "certificate.pfx" /ac "thawte.crt" /p "mypassword" /t http://timestamp.verisign.com/scripts/timstamp.dll "ExecutableToSign.exe"

小智 6

使用时间戳的目的不是让您的签名永远有效。其目的是延长签名的使用寿命,从通常的 1 到 3 年代码签名证书的有效期延长到 10 年。这对于大多数需求来说已经足够长了——谁真的认为他们的代码将在不安全的网络中传输(因此需要代码签名)并在 10 年后执行。

时间戳服务所做的只是签署您自己的数字签名的散​​列,加上当前时间(由时间戳服务提供)与时间戳服务的证书,他们(希望)比大多数用户更好地保护数字证书,因此具有更长的保质期。尽管它们很长,但它们仍然只是数字证书,为了基本安全,它们中的每一个最终都必须过期。鉴于计算机越来越强大,即使当今支持的最安全的算法和最长的签名密钥最终也会变得不安全。

请注意,到期日期只不过是证书(您的代码签名或时间戳)可能有效的最长时间。即使在今天,一些时间戳服务器也使用 SHA-1 进行签名(例如,这就是您的时间戳示例正在使用的)。当该算法不再受信任时(现在应该不会太久),所有这些 SHA-1 时间戳将不再受信任。即使未到到期日期,也会发生这种情况。

您应该查看其他时间戳服务。有一些会在更远的地方过期并使用 SHA256

如果有人提出了一种即使计算机变得更好也永远不会被破解的加密,那么最终有人会创建您要求的“永远”时间戳。不要屏住呼吸。

干杯!


Eri*_*les 5

我可以从我今天痛苦的经历中验证:过期的时间戳证书(在我的例子中是 Comodo 的时间戳证书)将导致 Windows (7) 无法通过错误 0x80096005 的整体代码签名检查。

所以是的,与我看过的所有证书提供者所说的相反,时间戳并不能保证您的签名可执行文件永久有效。

使用证书查找时间戳服务。未来的到期日期很长。

  • 例如,错误不是来自 Windows 的对话框。运行带有 verify 参数的 signtool 会踢出我上面列出的错误代码。使用现已过期的时间戳证书签名的可执行文件的“属性”对话框上的数字签名信息显示“其中一个副签名无效。文件可能已被更改。” 查看时间戳签名的详细信息时,您会看到“时间戳签名和/或证书无法验证或格式错误”。这些可执行文件在最初构建时*被*验证为具有有效签名,并且证书不在 CRL 上。 (2认同)