首页 文章

使用JNLP版本控制的Java Webstart证书问题

提问于
浏览
5

嗨我有Java Webstart的问题 . 我们有一个JNLP配置,其中启用了版本控制,即:

<property name="jnlp.versionEnabled" value="true"/>

我们正在使用每个jar的版本号,例如:

<jar href="project.jar" version="2.5.7.0"/> .

我们也正在使用Maven Jar签名者插件签署我们的应用程序jar .

你说到目前为止一切都很好 .

那么每次我们执行应用程序的新版本时,我们都会使用每个jar的新版本号更改JNLP文件(并非所有jar更改版本),但与上面的project.jar示例一样,我们说这个版本号从2.5增加 . 7.0至2.5.7.1 . 例如

<jar href="project.jar" version="2.5.7.1"/> .

当我们的用户通过JNLP文件下载新应用程序时,他们会收到以下错误:

#### Java Web Start Error:
#### JAR resources in JNLP file are not signed by same certificate

我已经向Webstart添加了额外的DEBUG,并在Java Concole中发现了以下错误:

security: Validating cached jar url=http://servername/lib/project_V2.5.7.1.jar ffile=C:\Documents and Settings\username\Application Data\Sun\Java\Deployment\cache\6.0\10\57344cca-719709af-2.5.7.1- com.sun.deploy.cache.CachedJarFile@11e1bbf
security: Have 0 common certificates after processing http://servername/lib/project.jar
network: Remove cache entry: http:///lib/project__V2.5.7.1.jar

似乎Webstart正在尝试检查名为project_V2.5.7.1.jar(不存在)的jar的本地缓存,因为它是新版本/下载的一部分 .

因为它找不到JAR,所以它假定证书不匹配 - 因此错误:

JAR resources in JNLP file are not signed by same certificate.

我假设这是Webstart错误!这让我们感到非常痛苦,因为我们必须在每次发布之前手动清除webstart缓存 - 对于每个用户 .

有人有类似的问题吗?

3 回答

  • 1

    根据您的问题“每次我们执行应用程序的新版本时,我们都会使用每个jar的新版本号更改JNLP文件(并非所有jar更改版本)”

    那么你也改变了其他 jar 的版本号吗?

    当您使用新证书对jar文件进行签名时,您必须更改所有jar文件的版本号,否则将不会下载具有相同版本号但由新证书签名的jar文件并导致问题 .

  • 0

    我认为根据我的经验,可能会发生的情况是,一旦将版本号从2.5.7.0增加到2.5.7.1并且您再次签署jar而不删除旧的清单条目,那么webstart倾向于认为资源未签名由同一证书 . 你可以尝试的一件事可能会有所帮助:

    解压缩导致问题的jar,从中清除所有META-INF目录,然后将其挂起并再次签名 .

    如果这有帮助,请告诉我 .

  • 0

    我解决了我的jnlp文件中包含的两个jar文件的问题,我使用的jar证书也是相同的 .

    这是我的jnlp文件:

    <?xml version="1.0" encoding="utf-8"?>
    <jnlp spec="1.0+" codebase="http://10.37.177.100:8085/AFM/resources/client/" href="AFMTray.jnlp">
    <information>
        <title>AFMTray</title>
        <vendor>andreagirardi.it</vendor>
    </information>
    
    <security>
        <all-permissions />
    </security>
    
    <resources>
        <j2se version="1.4+" />
        <jar href="AFMTray.jar" />
        <property name="jnlp.versionEnabled" value="true"/>
    </resources>
    
    <resources os="Windows" arch="x86">
        <jar href="swt-windows.jar" />
    </resources>
    
    <resources os="Mac\ OS\ X" arch="x86_64">  
        <jar href="swt-osx.jar" />
    </resources>  
    
    <resources os="Mac\ OS\ X" arch="i386 x86">  
        <jar href="swt-osx.jar" />
    </resources>  
    
    <application-desc main-class="com.afm.TryLuncher" />
    
    <shortcut online="true">
        <desktop/>
        <menu submenu="Esecuzione automatica"/>
    </shortcut>
    

    所以,我签署 swt-osx.jarswt-windows.jarAFMTray.jar 使用相同的证书

相关问题