首页 文章

如何使用Java Webstart应用程序管理证书续订

提问于
浏览
3

我正在使用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

我是 NOT 使用JNLP中的基于版本的协议(由 jnlp.versionEnabled 属性激活),但webstart客户端的行为就像它已启动一样 .

我的JNLP更新选项是

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

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

想法?

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

1 回答

  • 2

    我发现,由于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下载,一切都很好,世界很美 .

相关问题