Подтвердить что ты не робот

Подписание файла jar с доверенным сертификатом для развертывания JWS

Я разработал программу с открытым исходным кодом WPCleaner, которая распространяется через Java Web Start. Текущая версия доступна на http://site4145.mutu.sivit.org/WikiCleaner/WikiCleaner.jnlp

При последних обновлениях на Java становится все труднее развертывать приложения Java через Java Web Start, когда вам нужно, чтобы приложение имело несколько разрешений (запись в настройках, доступ к другим веб-сайтам,...)

Мое приложение было самоподписано, что было нормально, но новые обновления требуют, чтобы пользователи принимали приложение каждый раз, когда запускали его, а не раз и навсегда, если они того пожелают. Поэтому я решил использовать доверенный сертификат для подписания моего приложения.

У меня есть один от Certum (видимо, они бесплатны для разработчиков с открытым исходным кодом), после этого обсуждения: Сертификат подписи кода для проектов с открытым исходным кодом?

Я создал новый файл jar, подписанный с этим сертификатом (файл jar доступен в http://site4145.mutu.sivit.org/WikiCleaner/WikipediaCleanerTest.jar), но у меня все еще есть Проблемы: когда я запускаю приложение через JWS, Java по-прежнему отображает окна с предупреждением, которые не позволяют мне доверять приложению раз и навсегда. Редактор по-прежнему отображается как UNKNOWN, но когда я смотрю в деталях сообщения, это мой новый сертификат из Centrum, который используется.

Есть ли у кого-нибудь идея о том, что я делаю неправильно? Я думал, что наличие сертификата из доверенного ЦС (как представляется, в Java-cacerts) позволит пользователям принимать сертификат раз и навсегда.

Спасибо

PS: Когда я запускаю jarsigner -verify, я получаю следующее предупреждение "В этом банке содержатся записи, цепочка сертификатов которых не проверена".

4b9b3361

Ответ 1

Думаю, мне удалось сделать это после этой процедуры:

  • Установлен сертификат, предоставленный Certum в Chrome через веб-интерфейс.
  • Экспортирует закрытый ключ как .pfx из Chrome (настройки, управление сертификатами, экспорт, экспорт закрытого ключа, PKCS # 12,...)
  • Используемый графический интерфейс KeyTool GUI (графический интерфейс Java для клавишных инструментов), чтобы создать полный корневой сертификат Cert. p12: импортированный сертификат Certum в качестве доверенного сертификата, импортированные промежуточные сертификаты в качестве доверенных сертификатов, импортировал мой .pfx в качестве пары ключей
  • Подписал банку с этим p12

Кажется, для меня работает, я жду отзывов других пользователей, чтобы убедиться, что они тоже работают для них.

Изменить: я снова попытался экспортировать сертификат из Chrome, и увидел, что есть опция включить цепочку сертификатов в экспорт. При этом мне даже не нужно использовать графический интерфейс KeyTool. Я переделал тестовую версию, подписанную с этим новым p12:

  • Установлен сертификат, предоставленный Certum в Chrome через веб-интерфейс.
  • Экспортирует закрытый ключ как .pfx из Chrome (настройки, управление сертификатами, экспорт, экспорт закрытого ключа, PKCS # 12 + включить цепочку сертификатов,...)
  • Подписал банку с этим p12

Ответ 2

[Обновление 2017] Подписание Open Source кода от Certum теперь использует криптографическую флеш-карту в качестве закрытого ключа и должно быть подключено для активации и установки сертификата, а также для подписи кода. Ключ стоит 125 $ (+ стоимость доставки), а годовой сертификат стоит 40 $. Вы можете попросить скидку.


Вот следующие шаги, чтобы подписать файл JAR с нуля.

инструкции

Инструкции на английском языке трудно найти и они не актуальны. Следующая процедура основана на этих 2 документах:

Создайте, активируйте и установите свой сертификат:

  1. Перейдите на веб-сайт Certum Certification в разделе "Подписание кода OpenSource" и закажите свой сертификат.
  2. После получения криптографической флеш-карты (у меня это заняло 15 дней), подключите ее, установите драйвер и программное обеспечение proCertum CardManager с карты.
  3. Перейдите в свою учетную запись Certum и выполните процесс активации только что заказанного вами сертификата.

Совет: Приложение CryptoAgent Java Web Start запускается только с JDK (не JRE) <9 (то есть JDK 7 или 8).

  1. Вы получите письмо с просьбой предоставить некоторые официальные документы (удостоверение личности, счет за аренду и т.д.) И процедуру проверки по электронной почте.
  2. Отправьте для активации необходимые документы и информацию. Вы получите еще одно письмо с просьбой установить сертификат (проверка была произведена в течение 1 часа).
  3. Установите сертификат на криптографическую карту, следуя процедуре "Хранение сертификата на карте" (см. Инструкцию на английском языке, часть 4).

Получить файл "bundle.pem"

Этот файл является обязательным для получения действительной цепочки сертификатов при подписании вашего заявления (см. Часть 7.1.2 в инструкциях на польском языке).

По сути, он состоит из объединения в текстовом файле формата 1) вашего сертификата и 2) открытого ключа CA SHA2 для подписи кода Certum.

  1. Откройте proCertum CardManager >> Считать карту >> вкладка Общие >> Выберите свой сертификат и нажмите "Показать подробности"
  2. Экспортируйте ваш сертификат: x509 - base-64
  3. Загрузите Certum Code Signing CA SHA2 в формате PEM (из списка корневых сертификатов Certum).
  4. Создайте текстовый файл "bundle.pem", объединив эти 2 сертификата (сначала ваш сертификат, а затем сертификат Certum).

Подпишите свой файл Jar с Jarsigner

  1. Создайте файл "provider.cfg", как описано в пункте 7.2 инструкций на английском языке.
  2. Вам нужен псевдоним вашего сертификата (а не имя владельца), чтобы подписать вашу банку. Для его получения выполните следующую команду:
keytool -list -v -keystore NONE -storetype PKCS11 -providerClass sun.security.pkcs11.SunPKCS11 -providerArg "provider.cfg" -storepass "[your_pin]"
  1. Как только вы получите псевдоним, файлы provider.cfg и bundle.pem готовы, просто подпишите свой jar с помощью следующей команды:
jarsigner -keystore NONE -certchain "bundle.pem" -tsa "http://time.certum.pl" -storetype PKCS11 -providerClass sun.security.pkcs11.SunPKCS11 -providerArg "provider.cfg" -storepass "[your_pin]" "[your_code].jar" "[your_alias]"

Лично я использую скрипт Ant для подписи файлов jar приложения. См. Задачу подписи из проекта ANT.

Ответ 3

Я жду отзывов других пользователей, чтобы быть уверенными, что они тоже работают для них.

На основе JaNeLA для файла - действительный JNLP. Самое главное известный издатель для WikiCleanerTest..

enter image description here

Итак, есть один результат: "Кажется, здесь работает для идентификации издателя". Отличная работа и благодарность за описание процесса.

Работает намного лучше, чем я смотрел раньше.: P


Jarsigner -verify

s     292828 Sun Oct 20 17:57:58 EST 2013 META-INF/MANIFEST.MF
      292645 Sun Oct 20 17:57:58 EST 2013 META-INF/WPCLEANE.SF
        2017 Sun Oct 20 17:57:58 EST 2013 META-INF/WPCLEANE.RSA
           0 Sun Oct 20 17:57:52 EST 2013 META-INF/
           0 Wed Feb 11 15:04:50 EST 2009 META-INF/maven/
           ..
           0 Sun Oct 20 17:57:32 EST 2013 org/xnap/commons/i18n/
sm      2837 Thu Sep 09 16:00:54 EST 2004 META-INF/info.xml
..
sm       214 Wed Feb 11 00:57:02 EST 2009 org/xnap/commons/i18n/LocaleChangeListener.class

  s = signature was verified 
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.

Warning: 
This jar contains entries whose certificate chain is not validated.

Re-run with the -verbose and -certs options for more details.

Я понимаю предупреждение:

В этом банке содержатся записи, цепочка сертификатов которых не проверена.

.. можно игнорировать.

Отчет JaNeLA

JaNeLA показывает одну ошибку.

JaNeLA Report - version 11.05.17

Report for http://site4145.mutu.sivit.org/WikiCleaner/WikiCleaner.jnlp

cvc-complex-type.2.4.a: Invalid content was found starting with element 'homepage'. One of '{description, icon, offline-allowed, shortcut, association, related-content}' is expected.
cvc-complex-type.2.4.a: Invalid content was found starting with element 'homepage'. One of '{description, icon, offline-allowed, shortcut, association, related-content}' is expected.

XML encoding not known, but declared as utf-8
Codebase + href 'http://site4145.mutu.sivit.org/WikiCleaner.jnlp' is not equal to actual location of 'http://site4145.mutu.sivit.org/WikiCleaner/WikiCleaner.jnlp'.
Desktop icons were subject to bug nnnn in earlier J2SE versions
Optimize this application for off-line use by adding the <offline-allowed /> flag.
'short' description is longer than 'default' description.
Downloads can be optimized by specifying a resource size for 'WikipediaCleaner.jar'.
The resource download at WikipediaCleaner.jar can be optimized by removing the (default) value of download='eager'.
Lazy downloads might not work as expected for WikipediaCleaner.jar unless the download 'part' is specified. 
Resource type png of resource commons-nuvola-web-broom.png is not one of the allowable types of gif, jpg, jpeg.
Downloads can be optimized by specifying a resource size for 'commons-nuvola-web-broom.png'.
Icon loading & use can be optimized by specifying the width and height for commons-nuvola-web-broom.png

См. JNLP проверенную и исправленную версию с настройкой ниже.

Запуск

Но вот настоящие плохие новости:

UNKNOWN publisherUNKNOWN publisher - More Info.

Ниже приведены некоторые сведения о сертификате:

  • Николас Вервель (Николя Вервелле)

    • Тема: CN = Николас Вервелл, OU = WikipediaCleaner, O = WikipediaCleaner, L = Париж, ST = Франция, С = FR

Out Of Date Java

Вот странное предупреждение, которое я не понимаю.

Out Of Date Java

Приложение. запрашивает 1.5.0+, поэтому любая версия 1.7+ должна быть принята без вопросов.
Он утверждает, что запрашивает 1.6 (вероятно, потому, что у меня нет установленной версии 1.5). Единственное, что я могу думать, это вызвать предупреждение, это включение микро-версии, которая не нужна.

JNLP

Вот JNLP, подтвержденный выше:

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.5+" codebase="http://site4145.mutu.sivit.org/WikiCleaner" href="WikiCleaner.jnlp">
  <information>
    <title>WPCleaner</title>
    <vendor>User:NicoV</vendor>
    <description>WPCleaner</description>
    <description kind="short">A tool for Wikipedia maintenance</description>
    <homepage href="http://en.wikipedia.org/wiki/WP:WPCleaner"/>
    <icon href="commons-nuvola-web-broom.png"/>
    <shortcut>
      <desktop/>
    </shortcut>
  </information>
  <security>
    <all-permissions/>
  </security>
  <resources>
    <j2se version="1.5.0+" java-vm-args="-Xmx512M"/>
    <jar href="WikipediaCleaner.jar" download="eager" main="true"/>
  </resources>
  <application-desc main-class="org.wikipediacleaner.WikipediaCleaner"/>
</jnlp>

Вот предлагаемая замена. Он действителен в соответствии с JaNeLA (предупреждения о барах, которые мы можем игнорировать). Он также включает в себя еще одну настройку атрибута минимальной версии.

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.5+" codebase="http://site4145.mutu.sivit.org/WikiCleaner" href="WikiCleaner.jnlp">
  <information>
    <title>WPCleaner</title>
    <vendor>User:NicoV</vendor>
    <!-- Should be here.. -->
    <homepage href="http://en.wikipedia.org/wiki/WP:WPCleaner"/>
    <description>WPCleaner</description>
    <description kind="short">A tool for Wikipedia maintenance</description>
    <icon href="commons-nuvola-web-broom.png"/>
    <shortcut>
      <desktop/>
    </shortcut>
  </information>
  <security>
    <all-permissions/>
  </security>
  <resources>
    <!-- the micro-version request might be triggering the 
    Out-Of-Date Java version warning -->
    <j2se version="1.5+" java-vm-args="-Xmx512M"/>
    <jar href="WikipediaCleaner.jar" download="eager" main="true"/>
  </resources>
  <application-desc main-class="org.wikipediacleaner.WikipediaCleaner"/>
</jnlp>

Ответ 4

В Linux для меня работала следующая процедура. Он основан на ответе Эрика Дэвида.

Получить сертификат

Перейдите на веб-сайт Certum Certification в разделе "Подписание кода OpenSource". Покупайте сертификат и следуйте процедуре создания.

Получить открытый ключ для подписи кода

Получите открытый ключ CA Cert Signing CA, возможно, ключ CA SHA2 cscasha2.cer.

Преобразовать сертификат в формат pkcs12

  • Импортируйте свой собственный сертификат (тот, который вы получили из Certum) в Firefox: параметры меню меню - расширенные - сертификаты - показать сертификаты.
  • Импортируйте кукольный ключ CA SHA2 (используемый Certum для подписания вашего сертификата): сертификат сертификата. власти - импорт.
  • Проверьте. Он должен сказать, что он был проверен: в закладке собственные сертификаты - показать.
  • Экспортировать сертификат: в закладке собственные сертификаты - сохранить - как pkcs12 (например, mycert.p12)

Преобразование из формата pkcs12 в формат jks

Найдите псевдоним, используемый в вашем файле pkcs12. Он будет похож на "unizeto technologies s.a. id von open source developer, YOUR NAME".

keytool -list -v -storetype pkcs12 -keystore mycert.p12 > out.txt
grep Aliasname out.txt

Затем преобразуйте файл pkcs12 в формат java jks. Этот шаг можно опустить, но как только это будет сделано, это удобно.

keytool -importkeystore -srckeystore mycert.p12 -srcstoretype pkcs12 -srcalias "ALIASNAME" -destkeystore mycert.jks -deststoretype jks -deststorepass PASSWORD -destalias SHORTALIAS

Подпишите свой файл jar

Чтобы избежать предупреждений пользователю webstart, файл манифеста jar должен содержать следующие атрибуты:

  • Имя приложения: APPNAME
  • Разрешения: all-permissions
  • Codebase: URL
  • Приложение-Библиотека-Допустимая-Codebase: URL

Подпишите свой файл jar, используя следующую команду:

jarsigner -keystore mycert.jks -tsa http://time.certum.pl FILENAME.jar SHORTALIAS

Ответ 5

Сегодня я решил такую ​​же проблему на моем:

Manifest-Version: 1.0
Trusted-Library: true
Application-Library-Allowable-Codebase: *
Trusted-Only: false
Application-Name: My app
Permissions: all-permissions
Created-By: 1.6.0_16 (Sun Microsystems Inc.)
Caller-Allowable-Codebase: *
Codebase: *

Ответ 6

Как упоминалось здесь, чтобы удалить предупреждение UNKNOWN PUBLISHER, вы можете добавить сертификат, который вы использовали для подписи банки в баннер Signer Jar панели управления Java: настройка Java → Безопасность → Управление сертификатами → Параметр Signer Jar → Импорт.