gpt4 book ai didi

java - 如何使用 Java Webstart 应用程序管理证书更新

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:04 26 4
gpt4 key购买 nike

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

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

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

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

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

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

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

我的 JNLP 更新选项是

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

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

想法?

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

最佳答案

我发现从 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 客户端就会接受申请,即使我的签名证书已过期。 (我使用私有(private) CA 证书和过期的签名证书进行了测试)

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

关于java - 如何使用 Java Webstart 应用程序管理证书更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29084155/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com