我正在使用Maven创建一个项目,该项目创建了一个嵌入我的Web应用程序的JAR,用于使用智能卡对PDF文档进行签名。
在我的pom.xml中,我使用maven-jarsigner-plugin,如下所示:
<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>
项目构建良好,没有任何错误。对于99%,它们只是[INFO]消息,除了来自Maven Shade插件的一些[WARNING]消息:
[WARNING] maven-shade-plugin has detected that some .class files
[WARNING] are present in two or more JARs. When this happens, only
[WARNING] one single version of the class is copied in the uberjar.
[WARNING] Usually this is not harmful and you can skeep these
[WARNING] warnings, otherwise try to manually exclude artifacts
[WARNING] based on mvn dependency:tree -Ddetail=true and the above
[WARNING] output
当我使用CLI jarsigner手动检查生成的jar时,没关系:
Niels-MBP:target niels$ jarsigner -verify my-applet.jar
jar verified.
jar也可以在其他计算机上验证没有问题。但是,当我在我的Web应用程序中包含jar时,用户会收到消息:“安全警告:您是否要运行此应用程序?上述位置的未签名应用程序正在请求运行权限。”
更新: 当我使用-verbose选项运行jarsigner时,所有.class文件都标记为sm
(签名已验证,条目列在显示)并且缺少k
选项(在密钥库中找到至少一个证书)。此可能是导致错误的原因。 END UPDATE
该页面通过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>
对此有任何帮助将不胜感激!
尼尔斯
答案 0 :(得分:0)
我购买代码签名证书的公司 - Xolphin - 为我追踪了这个问题。它与密钥库中添加的证书/别名不正确有关。我重新创建了密钥库,问题就消失了。
对于遇到相同警告的其他人:请确保在Java设置中取消选中“在我的计算机上保留临时文件”(系统偏好设置 - &gt; Java - &gt;临时互联网文件 - &gt;设置)。它导致我在问题解决后进一步搜索,即使我为不同版本的JAR文件使用了不同的文件名。