2015-10-09 111 views
2

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

我们尝试更改本地时间以假装证书到期。然后由于安全性应用程序被阻止。将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更新我们的证书,并要求我们的客户升级到离职申请。但我们无法涵盖所有​​这些。当他们问我们时,我们需要为他们提供一些快速建议。到期时间即将到来,欢迎任何评论。

+0

再次签名,这次带有时间戳,并在您的原始签名到期之前向您的客户提供更新的应用程序。 – jariq

+0

@jariq我们打算这样做,但不可能联系所有客户。我们不知道我们的应用程序在哪里运行。它是软件包。我们开发它,将其出售给系统集成商,并将它安装在最终用户的网站上。 – stepand76

回答

5

会发生什么情况?

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

这些是我们的测试结果,其中应用程序使用官方证书自动颁发的有效证书签名,但在证书过期后没有时间戳。 Webstart的: - :

  • < = 7u21:7u40警告消息(可以与复选框被隐藏)
  • 7u25直接执行在不同的版本javaws.exe和改变系统时钟为仿真测试Windows 7上使用x64的JRE在每个更新版本中都会发生变化,请不要使用
  • 7u45到7u51:应用程序在安全设置“非常高”时被阻止,警告消息设置为“高”(可以用复选框隐藏)
  • > = 7u55:应用程序被阻止
  • > = 8u0:阻止应用程序

我们注意到,在webstart尝试使用从浏览器启动时,目前安装在系统上的最先进的最新版本。在浏览器中更改JNLP文件的应用程序是不够的(Firefox)。有一个使用安装在Programm Files\Java文件夹中的JRE和JDK的查找策略。从命令行或Windows链接调用javaws.exe确实会执行要测试的版本。您可以在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
  • 根据您的应用类型创建Windows桌面链接到j7u21 ...\javaws.exe <jnlp-url>可能是一个出路。

与时间戳和警告

甲骨文签署指出,在签署同时间从官方时间戳冲压管理局(TSA)将阻止书帖到期。这使您可以在将来的版本中防止出现问题并发布更新版本。

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

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

2016-01-07更新:Oracle支持部门对此问题的最终答复是“没有错误,行为是预期的和故意的,一定没有变化。”。这意味着现在没有办法在没有到期的情况下签署申请。

相关问题