Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当证书过期时,JavaWebStart应用程序(无时间戳签名)会发生什么情况?_Java_Code Signing_Sign_Trusted Timestamp_Thawte - Fatal编程技术网

当证书过期时,JavaWebStart应用程序(无时间戳签名)会发生什么情况?

当证书过期时,JavaWebStart应用程序(无时间戳签名)会发生什么情况?,java,code-signing,sign,trusted-timestamp,thawte,Java,Code Signing,Sign,Trusted Timestamp,Thawte,我们有一个使用CA(Thawte)证书签名的JavaWebStart应用程序。该应用程序被分发给数百名客户。他们将其托管在服务器上,并在客户端计算机上通过internet或intranet运行。现在它工作得很好。问题是应用程序的签名没有时间戳。当证书过期时,客户会发生什么情况?他们应该能够启动应用程序吗?如果没有,我们如何帮助他们?将他们的服务器URL添加到异常站点列表是否有帮助 我们试图更改本地时间以假装证书过期。然后,由于安全原因,应用程序被阻止。将URL添加到异常网站列表没有帮助: jav

我们有一个使用CA(Thawte)证书签名的JavaWebStart应用程序。该应用程序被分发给数百名客户。他们将其托管在服务器上,并在客户端计算机上通过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更新我们的证书,并要求我们的客户升级到我们的应用程序。但我们不能涵盖所有这些问题。当他们问我们的时候,我们需要给他们一些快速的建议。到期时间即将到来,欢迎发表任何意见

发生了什么事?

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

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

  • =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/
    确实有效。改用
    myhost
    myhost.in my domain.com
    的IP地址将不匹配。看
  • 根据您的应用程序类型,创建指向j7u21
    …\javaws.exe
    的Windows桌面链接可能是一种解决方法
带时间戳和警告的签名

甲骨文声明,使用官方时间戳管理局(TSA)的时间戳签名将防止签名过期。这允许您在将来的版本中防止该问题,并提供更新版本

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

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


2016-01-07更新:Oracle支持部门对此问题的最终回答是“没有bug。这种行为是预期的和有意的。肯定不会有任何改变。”。这意味着没有过期的应用程序就无法进行签名。

再次签名,这次要带上时间戳,并在原始签名过期之前向客户提供更新的应用程序。@jariq我们将这样做,但无法联系所有客户。我们不知道我们的应用程序运行在谁和哪里。这是软件包。我们开发它,卖给系统集成商,他们在最终用户站点安装它。。。