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-файла.

Другие вопросы по тегам