4

我们有一个使用 CA (Thawte) 证书签名的 Java Web Start 应用程序。该应用程序分发给数百名客户。他们将它托管在他们的服务器上,然后在他们的客户端计算机上通过 Internet 或 Intranet 运行它。现在它完美无缺。问题是应用程序是在没有时间戳的情况下签名的。证书过期后客户会怎样?他们应该能够启动应用程序吗?如果没有,我们如何帮助他们?将他们的服务器 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 更新我们的证书,并要求我们的客户升级到已辞职的应用程序。但我们无法涵盖所有​​这些。当他们问我们时,我们需要为他们提供一些快速的建议。到期时间快到了,欢迎大家发表意见。

4

1 回答 1

7

怎么了?

WebStart 的行为高度依赖于它所属的 JRE 版本。

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

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

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

解决方法

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

带有时间戳和警告的签名

Oracle 声明使用来自官方时间戳授权 (TSA) 的时间戳进行签名将防止签名过期。这使您可以防止在未来版本中出现问题并提供更新版本。

请注意此警告:即使在签名证书到期后,WebStart 也对带有时间戳的签名感到满意。但是,它会阻止申请并在您的 TSA 证书过期时声明“证书已过期或尚未生效”。在我们的测试中,这是在 2020-03-16 使用 TSA 进行的http://tsa.starfieldtech.com/Timestamp:您可以在 的输出中看到此到期日期keytool -printcert -jarfile <your-signed.jar>

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

2016 年 1 月 7 日更新:Oracle 支持人员对此问题的最终回答是“没有错误。这种行为是预期的和故意的。肯定不会有任何变化。”。这意味着没有办法在没有到期的情况下签署申请,也不会签署。

于 2015-10-30T10:29:07.347 回答