如果您使用Comodo代码签名证书来签名Java代码,请仔细阅读本文。(如果您不使用证书对Java代码进行签名,则可以忽略本文。)
在2019年5月8日,星期三,我们收到了Sectigo(以前为Comodo CA)的通知,其与代码签名证书一起使用的时间戳证书将于2019年7月9日到期。用Comodo / Sectigo签名的Java代码如果使用在2019年7月9日到期的时间戳证书进行签名,timestamp.comodo.com上的时间戳服务可能会受到影响。
该过期是正常的,预期的发生,并且本文概述了为避免服务中断而需要采取的步骤。
并非所有签署代码的软件发行商都选择对其加时间戳记,因此,此证书的有效期只会影响已对其签名代码加盖时间戳的人。
带时间戳的代码签名与之建立了一个时间点,在该时间点中存在一个对象(例如软件可执行文件),该对象由当时有效的证书签名,并且自那时以来未更改。
在Java中,应用程序会检查的有效性两个代码签名和时间戳证书。只要两者之一仍然有效,则已签名的应用程序将被信任。带时间戳的代码将在用于签名的代码签名证书过期后很长时间保持信任,因为带时间戳的证书的寿命比代码签名证书的寿命长得多。但是带有时间戳记的证书仍然会过期,这就是这里发生的情况。
将于2019年7月9日到期的时间戳记证书与timestamp.comodoca.com相关联。自2019年3月4日起,它已被新证书timestamp.sectigo.com取代。在2019年3月4日之后加上时间戳的任何代码都将具有此新证书,并且无需对其采取任何措施。
Java是唯一受此证书有效期影响的平台。如果您使用Windows或其他应用程序对代码进行签名,则不受此到期时间的影响。如果在Java环境中使用Sectigo(Comodo)在2019年3月4日之前发布的任何代码签名证书(包括EV证书),则可能会受到此过期时间的影响。
您可以参考下面的流程图,以轻松确定需要在到期前采取任何措施。
您可以通过运行以下命令来检查两个证书的状态(时间戳和代码签名):C:\>"\Program Files\Java\jdk-12.0.1\bin\jarsigner.exe" -verify my_file.jar
该命令的输出应类似于以下内容:jar verified.
Warning:
The timestamp will expire within one year on 2019-07-09. However, the JAR will be valid until the signer certificate expires on 2020-05-30.
Re-run with the -verbose and -certs options for more details.
只要输出消息中包含“已通过jar验证”,该应用程序当前就可以正常运行。
在上面的示例中,使用的时间戳即将过期(2019-07-09),但代码签名证书本身直到2020年5月30日才到期。在上述情况下,此代码仍将可信,并且只需要在实际代码签名证书到期之前的任何时间重新签名即可。
问:为什么会这样?
答:与Sectigo(Comodo)代码签名证书一起使用的带有时间戳记的证书将于2019年7月9日到期。这是正常的预期情况,因为时间戳记证书的寿命比代码签名证书的寿命更长,但是它们的使用寿命仍然终止日期。
问:如何知道我是否受到影响?
答:请参阅上面的便捷流程图。仅符合以下条件的已签名应用程序会受到影响:
该应用程序已使用Java签名。
该应用程序已签名并加盖时间戳。
该应用程序具有来自timestamp.comodoca.com的时间戳。
时间戳由证书到期,该证书将于2019年7月9日到期。
问:好的,我受到了影响,该怎么办?
答:如果您的代码签名证书尚未到期,请在代码到期之前随时对其重新签名。如果您的代码签名证书已经过期,请更新或替换它,然后重新签名您的代码。
问:如果我不及时重新签署代码会怎样?
答:2019年7月9日之后,使用您的应用程序的用户或流程可能会遇到问题