Maven подписал банку с предупреждением "неподписанное заявление"
Я использую Maven для проекта, который создает 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>
Проект строится нормально, без ошибок. На 99% это просто сообщения [INFO], за исключением некоторых сообщений [WARNING] от плагина Maven Shade:
[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
Когда я вручную проверяю полученный jar с помощью jarsigner CLI, это нормально:
Niels-MBP:target niels$ jarsigner -verify my-applet.jar
jar verified.
Баночка также проверяется без проблем на других компьютерах. Тем не менее, когда я включаю jar в свое веб-приложение, пользователи получают сообщение: "предупреждение системы безопасности: вы хотите запустить это приложение? Un unsigned application from the вышеуказанное расположение запрашивает разрешение на запуск".
ОБНОВЛЕНИЕ: Когда я запускаю jarsigner с опцией -verbose, все файлы.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>
Любая помощь с этим будет оценена!
Нильс
1 ответ
Компания, где я купил сертификат подписи кода - Xolphin, - разыскала для меня проблему. Это было связано с неправильным добавлением сертификата / псевдонима в хранилище ключей. Я воссоздал хранилище ключей, и проблема исчезла.
Для тех, кто сталкивается с таким же предупреждением: убедитесь, что вы сняли флажок "Хранить временные файлы на моем компьютере" в настройках Java (Системные настройки -> Java -> Временные файлы Интернета -> Настройки). Это заставило меня искать дальше после того, как проблема была исправлена, хотя я использовал разные имена файлов для разных версий моего JAR-файла.