Java Maven签名的jar发出警告;未签署的申请;

Java Maven签名的jar发出警告;未签署的申请;,java,maven,jar,jarsigner,signed-applet,Java,Maven,Jar,Jarsigner,Signed Applet,我正在使用Maven进行一个项目,该项目创建了一个嵌入到我的web应用程序中的JAR,以便使用智能卡签署PDF文档 在我的pom.xml中,我使用maven jarsigner插件,如下所示: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jarsigner-plugin</artifactId> <versio

我正在使用Maven进行一个项目,该项目创建了一个嵌入到我的web应用程序中的JAR,以便使用智能卡签署PDF文档

在我的pom.xml中,我使用maven jarsigner插件,如下所示:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jarsigner-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <id>sign</id>
            <goals>
                <goal>sign</goal>
            </goals>
        </execution>
        <execution>
            <id>verify</id>
            <goals>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <keystore>/path/to/my/keystore.jks</keystore>
        <alias>my-key-alias</alias>
        <storepass>********</storepass>
        <keypass>********</keypass>
        <verbose>true</verbose>
        <certs>true</certs>
        <arguments>
            <argument>-tsa</argument>
            <argument>https://timestamp.geotrust.com/tsa</argument>
        </arguments>
    </configuration>                
</plugin>
当我使用CLI jarsigner手动检查生成的jar时,一切正常:

Niels-MBP:target niels$ jarsigner -verify my-applet.jar 
jar verified.
jar还可以在其他计算机上进行验证,不会出现问题。但是,当我在web应用程序中包含jar时,用户会收到消息:“安全警告:是否要运行此应用程序?来自上面位置的未签名应用程序正在请求运行权限。”

更新:当我使用-verbose选项运行jarsigner时,所有.class文件都标记为
sm
(签名已验证,条目列在清单中),并且缺少
k
选项(在密钥库中至少找到一个证书)。这可能是错误的原因结束更新

该页面通过HTTPS提供服务。jar与HTML页面位于同一个域(甚至是同一个文件夹)中,包括如下内容:

<script src="https://www.java.com/js/deployJava.js"></script>
<script>

    var attributes = {
        id: 'myApplet',
        code: 'nl.company.project.applet.MyAppletApplet',
        archive: 'my-applet.jar',
        width: 200,
        height: 200
    };

    deployJava.runApplet(attributes, '1.7');

<script>

变量属性={
id:“myApplet”,
代码:“nl.company.project.applet.MyAppleTApp”,
存档:“my applet.jar”,
宽度:200,
身高:200
};
runApplet(属性“1.7”);
在此方面的任何帮助都将不胜感激


Niels

我购买代码签名证书的公司——Xolphin——为我找到了问题所在。这与密钥库中添加的证书/别名不正确有关。我重新创建了密钥库,问题就解决了


对于面临相同警告的其他人:确保在Java设置(系统首选项->Java->Internet临时文件->设置)中取消选中“在我的计算机上保留临时文件”。这导致我在问题解决后进一步搜索,尽管我对不同版本的JAR文件使用了不同的文件名。

Hm…可能我误解了一件事,但你应该小心maven shade插件的警告:
[warning]maven shade插件检测到一些.class文件[warning]存在于两个或多个罐子中。发生这种情况时,uberjar中只复制了[警告]一个单一版本的类。
…并检查哪些类位于不同的jar中?谢谢。警告都指向生成的两个JAR中存在的类文件。一个是“独立”测试版本,另一个是嵌入网站的小程序。
<script src="https://www.java.com/js/deployJava.js"></script>
<script>

    var attributes = {
        id: 'myApplet',
        code: 'nl.company.project.applet.MyAppletApplet',
        archive: 'my-applet.jar',
        width: 200,
        height: 200
    };

    deployJava.runApplet(attributes, '1.7');

<script>