为什么代码签名需要添加时间戳?
发布日期:2023-06-05如果您是软件发行商或开发人员,那么您就会知道软件的成功通常取决于下载次数,这部分取决于用户对它的信任程度。因此,为了向用户保证并避免在下载或安装时出现不必要的警告消息,您采取了主动步骤,例如使用受信任的代码签名证书对代码进行签名。当您对代码进行签名时,如果您不使用时间戳选项,您可能会在几个月或几年后遇到一些大问题。
简而言之,时间戳是签名过程的可选部分,它允许用户和软件识别应用的代码签名签名是否有效,即使在代码签名证书过期后也是如此。
为什么时间戳很重要?
让我们看一个现实生活中的情况,以了解代码签名时间戳的重要性。假设您签名并发布了软件。一切都很好,直到您的代码签名证书在一年后过期。现在,您的安装程序显示有关不受信任签名的警告。当然,您可以重新辞职并重新发布安装程序包,但您将无法更新网络空间中已有的安装程序。
或者,让我们再举一个例子,其中使用代码签名来验证软件更新。如果推送更新,但客户端在证书过期之前不安装更新,会发生什么情况。您的软件是否会因代码签名证书过期而突然停止运行?想想它会对你的软件用户产生多大的影响,以及你将如何能够为它提供即时帮助。您是否可以更新软件,或者更新是否会因签名过期而中断?另外,开发和部署此紧急补丁的成本是多少?如果软件无法运行,用户的业务将受到多大影响?
您可能会想:这些都是由代码签名证书过期引起的问题。是的,时间戳是此类方案的解决方案。
时间戳还提供了另一个好处:如果您由于私钥丢失等情况而必须吊销代码签名证书,那么此时间戳将通过保持所有签名的可执行文件和软件包正常运行来节省您,只要它们在吊销日期之前签名。但是,在证书被吊销后完成的任何新签名都将被视为无效。
让我们介绍一下代码签名过程中时间戳的背景,并了解一些应遵循的最佳实践,以确保您不会因软件签名而遇到任何问题。
什么是时间戳?
时间戳是一项保留应用于软件包签名的功能。它允许操作系统和其他客户端软件接受您的软件(签名),即使在代码签名证书过期后也是如此。
每当执行已签名的软件时,都会验证其签名,例如由用户的操作系统进行验证。如果您已为软件添加时间戳,则用户的计算机将根据签名时间(而不是执行软件的当前时间)验证签名。
当然,如果软件没有时间戳,则根据当前时间评估其签名。您可能在几个月或几年前分发了已签名的软件,在这种情况下,用于对该软件包进行签名的代码签名证书可能已过期,并且签名可能不再被视为有效。例如,您用于签名的代码签名证书的有效期为整个 2019 年(2019 年 1 月 1 日至 2019 年 12 月 31 日),并且您在 2019 年 11 月对软件进行了签名并添加了时间戳。现在,用户下载了您签名的软件包并尝试立即运行它 - 如果没有时间戳,用户将收到错误警告。添加时间戳的情况下,操作系统将使用时间戳来评估代码签名证书在签名时是否有效,而不是接受签名时的今天日期。此外,时间戳由 CA 签名和保护,它可以阻止针对软件代码的篡改或任何其他恶意活动,同时保持安全性。
代码签名时间戳中使用的技术
时间戳由经过认证的时间戳颁发机构 (TSA) 提供,该机构使用一系列基于 PKI(公钥基础结构)技术的加密和解密技术来应用可验证的时间戳。在代码签名中,在对程序进行签名时使用时间戳来验证签名的日期和时间,时间戳是通过 URL 使用时间戳服务器完成的。购买沃通代码签名证书,可提供支持微软的Authenticode技术的时间戳服务网址,以及支持国际标准RFC3161的时间戳服务网址,由权威CA机构运行,提供给代码签名用户使用。