Maven 签名的 jar 给出警告 "unsigned application"
Maven signed jar gives warning "unsigned application"
我将 Maven 用于一个项目,该项目创建一个 JAR,该 JAR 嵌入到我的 Web 应用程序中以使用智能卡签署 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在其他电脑上验证也没有问题。但是,当我将 jar 包含在我的 Web 应用程序中时,用户会收到消息:"security warning: Do you want to run this application? Un unsigned application from the location above is requesting permission to run."
更新: 当我 运行 带有 -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>
如有任何帮助,我们将不胜感激!
尼尔斯
我购买代码签名证书的公司——Xolphin——帮我找到了问题所在。它与密钥库中错误添加的 certificate/alias 有关。我重新创建了密钥库,问题消失了。
对于面临相同警告的其他人:确保在 Java 设置中取消选中 'Keep temporary files on my computer'(系统偏好设置 -> Java -> Internet 临时文件 -> 设置)。这导致我在问题解决后进一步搜索,即使我为不同版本的 JAR 文件使用了不同的文件名。
我将 Maven 用于一个项目,该项目创建一个 JAR,该 JAR 嵌入到我的 Web 应用程序中以使用智能卡签署 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在其他电脑上验证也没有问题。但是,当我将 jar 包含在我的 Web 应用程序中时,用户会收到消息:"security warning: Do you want to run this application? Un unsigned application from the location above is requesting permission to run."
更新: 当我 运行 带有 -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>
如有任何帮助,我们将不胜感激!
尼尔斯
我购买代码签名证书的公司——Xolphin——帮我找到了问题所在。它与密钥库中错误添加的 certificate/alias 有关。我重新创建了密钥库,问题消失了。
对于面临相同警告的其他人:确保在 Java 设置中取消选中 'Keep temporary files on my computer'(系统偏好设置 -> Java -> Internet 临时文件 -> 设置)。这导致我在问题解决后进一步搜索,即使我为不同版本的 JAR 文件使用了不同的文件名。