证书过期后,Java Web Start应用程序(无时间戳签名)会发生什么?

时间:2015-10-09 08:08:04

标签: java code-signing sign trusted-timestamp thawte

我们有一个使用CA(Thawte)证书签名的Java Web Start应用程序。该应用程序分发给数百名客户。他们在服务器上托管它,在客户端计算机上通过互联网或内联网运行。现在它完美无缺。问题是应用程序是在没有时间戳的情况下签名的。证书到期后客户会怎样?他们应该能够启动应用程序吗?如果没有,我们如何帮助他们?将他们的服务器URL添加到例外站点列表是否有帮助?

我们尝试更改本地时间以假装证书过期。然后,由于安全性,应用程序被阻止将URL添加到例外站点列表没有帮助:

java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Response is unreliable: its validity interval is out-of-date
at com.sun.deploy.security.RevocationChecker.checkOCSP(Unknown Source)
at com.sun.deploy.security.RevocationChecker.check(Unknown Source)
at com.sun.deploy.security.TrustDecider.checkRevocationStatus(Unknown Source)
at com.sun.deploy.security.TrustDecider.getValidationState(Unknown Source)
at com.sun.deploy.security.TrustDecider.validateChain(Unknown Source)
at com.sun.deploy.security.TrustDecider.isAllPermissionGrantedInt(Unknown Source)
at com.sun.deploy.security.TrustDecider.isAllPermissionGranted(Unknown Source)
at com.sun.javaws.security.AppPolicy.grantUnrestrictedAccess(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResourcesHelper(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResources(Unknown Source)
at com.sun.javaws.Launcher.prepareResources(Unknown Source)
at com.sun.javaws.Launcher.prepareAllResources(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.launch(Unknown Source)
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main.access$000(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Suppressed: com.sun.deploy.security.RevocationChecker$StatusUnknownException
    at com.sun.deploy.security.RevocationChecker.checkCRLs(Unknown Source)
    ... 19 more
Caused by: java.security.cert.CertPathValidatorException: Response is unreliable: its validity interval is out-of-date
at sun.security.provider.certpath.OCSPResponse.verify(Unknown Source)
at sun.security.provider.certpath.OCSP.check(Unknown Source)
at sun.security.provider.certpath.OCSP.check(Unknown Source)
at sun.security.provider.certpath.OCSP.check(Unknown Source)
at com.sun.deploy.security.RevocationChecker$2.run(Unknown Source)
at com.sun.deploy.security.RevocationChecker$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.deploy.security.RevocationChecker.doPrivilegedOCSPCheck(Unknown Source)
... 20 more

我们能做什么?当然,我们要求Thawte续签我们的证书并要求我们的客户升级到辞职申请。但我们无法涵盖所有​​这些。当他们问我们时,我们需要为他们提供一些快速建议。到期时间即将到来,欢迎任何评论。

1 个答案:

答案 0 :(得分:6)

会发生什么?

WebStart的行为在很大程度上取决于它所属的JRE版本。

这些是我们的测试结果,其中一个应用程序使用来自官方证书autority的有效证书进行签名,但在证书过期后没有时间戳。通过在不同版本中直接执行javaws.exe并更改系统时钟进行模拟,在Windows 7上使用x64 JRE进行测试:

  • < = 7u21:警告消息(可以使用复选框隐藏)
  • 7u25 - 7u40:WebStart以不同方式被破坏,在每个更新版本中改变行为,不要使用
  • 7u45到7u51:应用程序在安全设置时被阻止"非常高",在设置"高"时发出警告消息(可以用复选框隐藏)
  • > = 7u55:应用程序被阻止
  • > = 8u0:应用程序被阻止

我们注意到WebStart尝试使用从浏览器启动时系统上当前安装的最新版本。在浏览器中更改JNLP文件的应用程序是不够的(Firefox)。使用Programm Files\Java文件夹中安装的JRE和JDK的查找策略。从命令行或Windows链接调用javaws.exe确实执行要测试的版本。您可以在Java控制台(成功启动)或任务管理器命令行列(委派给另一版本的jp2launcher.exe)中查看该版本。

解决方法

  • 对我们来说,异常站点列表确实有效(使用j8u66测试)。但是,输入正确的URL似乎很棘手。我们认为它必须与JNLP文件URL中使用的URL完全相同。当JNLP网址为http://myhost:12345/my/app/test.jnlp时,例外网站http://myhost:12345/确实有效。使用myhostmyhost.in-my-domain.com的IP地址将不匹配。见http://java.com/de/download/faq/exception_sitelist.xml
  • 根据您的应用程序类型,创建指向j7u21的...\javaws.exe <jnlp-url>的Windows桌面链接可能是一条出路。

使用时间戳和警告签名

甲骨文表示,使用官方时间戳(TSA)的时间戳签名将阻止签名过期。这使您可以在将来的版本中防止出现问题并提供更新版本。

请注意此警告:即使签名证书到期,WebStart也会对带有时间戳的签名感到满意。但是,它会阻止应用程序和状态证书已过期或尚未生效[&34;当您的TSA证书到期时。在我们的测试中,这是在2020-03-16使用TSA http://tsa.starfieldtech.com/。您可以在Timestamp:的输出中keytool -printcert -jarfile <your-signed.jar>后面看到这个到期日期。

时间戳只会让你在这枚定时炸弹的时钟上多出几年。根据您的应用程序类型,这可能不是问题,但对于必须在未来10年运行的封闭环境中的嵌入式应用程序来说,这是一个杀手。 (用j8u66测试)

2016-01-07更新:Oracle Support对此问题的最终答案是&#34;没有错误。这种行为是预期的和有意的。肯定没有变化。&#34;。这意味着有没有办法在没有过期的情况下签署申请。