【问题标题】:How to manage certificate renewal with Java Webstart application如何使用 Java Webstart 应用程序管理证书更新
【发布时间】:2015-05-18 23:59:58
【问题描述】:

我正在使用 Java Webstart 技术开发一个 Java 桌面应用程序。 我使用有效证书签署我的应用程序并使用 JnlpDownloadServlet 部署它。 我使用 maven-webstart-plugin 准备所有这些基础架构。

但是当我的证书过期并且我必须辞职并重新部署我的应用程序时,我无法让 webstart 完全重新下载我的应用程序。

据我所知,根据我从 Internet 收集到的信息(Webstart 官方文档很糟糕),默认情况下 webstart 根据文件服务器时间(Last-Modified HTTP 标头)检查版本并更新库

如果是这样,webstart 客户端应该完全下载我的应用程序的新版本。

但是 webstart 只是在 JNLP 文件中下载具有较新版本号的库,因为 maven webstart 插件会生成它们。

应用程序无法启动,抱怨不同的签名 JAR,当我查看 tomcat 访问日志时,服务器中唯一检查和下载的文件是 JNLP 文件、具有真正较新版本的 JAR 和另一个 JAR (我假设这是一个被下载、签名检查并导致客户端失败的请求)所有请求都是 GET,没有 HEAD

在 JNLP 中使用基于版本的协议(由 jnlp.versionEnabled 属性激活),但 webstart 客户端的行为就像它已打开一样。

我的 JNLP 更新选项是

<update check="always" policy="always" />

我看到的唯一解决方案是更新所有 JAR 的版本号,在版本号上附加一些内容,但 JNLP“渲染”是由 webstart-plugin 自动完成的,我更喜欢更简单、更健壮的方法。

想法?

编辑: 似乎正在触发基于版本的下载协议,因为 JNLP 文件中的 jar 元素具有 version 属性。这是由 webstart 插件自动添加的。在管理依赖版本时,这是一个很棒的功能。但是,如果您只想更新签名,那就很痛苦了。

【问题讨论】:

  • 我经常使用 webstart 并更新 jar 文件而不重命名它们。 Webstart 总是注意到更改并下载修改后的 jar 文件。尝试一个简单的测试用例。重新签名或修改其中一个 jar 文件并将其上传到您的服务器,然后查看您的本地 webstart 是否注意到更改并下载重新签名的 jar。

标签: java java-web-start jnlp


【解决方案1】:

我发现从 1.5 开始,Java 支持验证过期的签名是否带有时间戳:

http://docs.oracle.com/javase/tutorial/deployment/jar/signing.html

这里也有很好的解释:https://stackoverflow.com/a/24178906/134898

幸运的是,maven-webstart-plugin 从 1.0-beta5 版本开始支持此功能:

    <sign>
        <storetype>pkcs12</storetype>
        ...
        <tsaLocation>https://timestamp.geotrust.com/tsa</tsaLocation>
    </sign>

现在,只要时间戳有效,即使我的签名证书过期,webstart 客户端也会接受该应用程序。 (我用私有 CA 证书和过期的签名证书进行了测试)

我将继续使用基于 webstart 版本的协议对我的库进行真正的更改,这将触发独立的 JAR 下载,一切都很好,世界很美好。

【讨论】:

猜你喜欢
  • 2011-09-10
  • 1970-01-01
  • 2015-09-20
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
相关资源
最近更新 更多