0

我使用 Morena API 来使用 Java 扫描仪。然而,Morena jar 使用与我项目的其余部分不同的密钥进行了签名。当我尝试运行我的小程序并给出以下运行时异常时,这会导致问题:

"Jar resources in JNLP file are not signed by the same certificate"

我在我的项目中使用 netbeans,那么我怎样才能强制 Morena 使用我的签名而不是它附带的签名呢?

由 netbeans 自动生成的 JNLP 文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jnlp href="launch.jnlp" spec="1.0+">
<information>
    <title>ArFile</title>
    <vendor>Matthew Pigram</vendor>
    <homepage href="http://www.allcarecomputerservices.com"/>
    <description>ArFile is designed to allow users to effectively manage documents through a convenient cloud storage facility</description>
    <description kind="short">ArFile</description>

</information>
<update check="always"/>
<security>
    <all-permissions/>
</security>
<resources>
`<j2se java-vm-args="-Djava.security.policy=applet.policy" version="1.6+"/>
<jar href="ArFile.jar" main="true"/>    
<jar href="lib/commons-codec-1.4.jar"/>
<jar href="lib/jdom.jar"/>
<jar href="lib/security-1.1.jar"/>
<jar href="lib/emcesu.jar"/>
<jar href="lib/commons-io-2.3-javadoc.jar"/>
<jar href="lib/commons-io-2.3-sources.jar"/>
<jar href="lib/commons-io-2.3-test-sources.jar"/>
<jar href="lib/commons-io-2.3-tests.jar"/>
<jar href="lib/commons-io-2.3.jar"/>
<jar href="lib/jodconverter-core-3.0-beta-4.jar"/>
<jar href="lib/juh-3.2.1.jar"/>
<jar href="lib/jurt-3.2.1.jar"/>
<jar href="lib/ridl-3.2.1.jar"/>
<jar href="lib/unoil-3.2.1.jar"/>
<jar href="lib/mail.jar"/>
<jar href="lib/log4j-1.2.16.jar"/>
<jar href="lib/morena.jar"/>
<jar href="lib/morena_windows.jar"/>
</resources>
    <applet-desc height="604" main-class="com.allcare.arfile.ArFileJApplet" name="ArFile" width="756">     
    </applet-desc>
</jnlp>`

还有这个:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="${jnlp.codebase.value}">
    <information>
        <title>jnlpcomponent1</title>
        <vendor>JARSIGNI</vendor>
    </information>
    <security>
        <all-permissions/>
    </security>
    <resources>
        <jar href="lib/morena.jar" download="eager"/>
        <jar href="lib/morena_windows.jar" download="eager"/>
    </resources>
    <component-desc/>
</jnlp>
4

2 回答 2

1

这是 Java Web Start 确保客户端下载的 jar 不受损害的方式。这是一项安全功能。

您可以做的是尝试使用您的证书而不是默认证书对 Morena jar 进行签名。

使用keytool并且jarsigner您可以在罐子上签名。

编辑:从 Java Web Start 1.5.0 开始,您可以对 jar 进行多重签名,在另一个现有证书链上添加代码签名证书

http://docs.oracle.com/javase/1.5.0/docs/guide/javaws/developersguide/faq.html#221

所以你可以用你的签名在 Morena jar 上签名,这将解决问题。

于 2012-08-08T05:57:15.000 回答
1

这里有两种方法可以解决这个问题:

  1. 将 Morena API Jars 移动到 JWS 扩展中。这将是最好的方法,因为它可以声明自己的权限级别,并在其他应用程序中重复使用。
  2. 从 Morena 罐子中剥离数字签名并使用您自己的证书对其进行签名。
于 2012-08-08T06:11:09.577 回答