Назад | Перейти на главную страницу

Java Deployment Ruleset.xml не работает

Недавнее обновление нашей системы тайм-карт вынудило нас обновить все наши рабочие станции до Java 7u51 (мы были на 6u45). У нас есть еще одно приложение на основе Java, которое имеет решающее значение для нашего бизнеса, которое теперь постоянно выдает предупреждения о безопасности. Каждый пользователь должен нажимать «Выполнить» не менее дюжины раз в день (код поставщика без подписи и информации об издателе). Это неприемлемо

Насколько я могу судить, единственный способ решить эту проблему - использовать набор правил развертывания. Я погуглил множество статей, объясняющих, как это сделать. Все они немного разные, и ни один из них не работает. Я создал XML-файл, обработал его, подписал с помощью самозаверяющего сертификата и импортировал этот сертификат в доверенный центр сертификации на нескольких тестовых машинах. Что бы я ни делал, я вижу следующую ошибку на КАЖДОМ сайте с поддержкой Java, который я посещаю (включая тот, который я специально внес в белый список):

«Приложение заблокировано набором правил развертывания»
Не удается проверить самоподписанный jar-файл набора правил развертывания.

Меня совершенно бесит, как Oracle неправильно обращалась с Java в последние годы. Я потратил более 200 часов на это развертывание, потому что одно препятствие за другим сковывает меня. Пользователи разочарованно звонят в службу поддержки, и постоянные предупреждения системы безопасности отнимают у организации время и деньги.

В любом случае, хватит разглагольствования. Если бы кто-нибудь мог сказать мне, что я делаю неправильно, это было бы очень признательно.

Вот точные шаги, которые я предпринял:
1) Скачал и установил JDK 7u51 (необходим для keytool.exe и jarsigner.exe)

2) Создал следующий файл ruleset.xml:

<ruleset version="1.0+">
    <rule>
        <id location="*.ourdomain.com" />
        <action permission="run" />
    </rule>

    <rule>
        <id />
            <action permission="default" />
    </rule>
</ruleset>

3) Упаковал XML-файл с помощью следующей команды:

jar.exe -cvf DeploymentRuleSet.jar ruleset.xml

4) Создал 50-летний 2048-битный самозаверяющий сертификат RSA с помощью команды keytool.exe следующим образом: (Я разрешил ему запрашивать информацию DN; пароль сертификата такой же, как пароль хранилища ключей)

keytool.exe -genkey -alias SelfSigned -keystore "SelfSigned.jks" -keyalg RSA -keysize 2048 -startdate "2000/01/01 00:00:00" -validity 18262

5) Экспортировал только что созданный сертификат с помощью следующей команды:

keytool.exe -export -file "SelfSigned.cer" -alias SelfSigned -keystore "SelfSigned.jks"

6) Подписал JAR-файл, созданный на шаге 3, с помощью следующей команды:

jarsigner.exe -keystore "SelfSigned.jks" -signedjar "DeploymentRuleSet.jar" DeploymentRuleSet.jar SelfSigned

7) Создал папку C: \ Windows \ Sun \ Java \ Deployment и скопировал в нее файл DeploymentRuleSet.jar. Я проверил через панель управления Java, что набор правил применяется и сертификат действителен.

8) Импортировал сертификат, который я экспортировал на шаге 5. Вот где я отклонился от инструкций. Я не мог использовать keytool.exe для импорта сертификата. Эта страница предполагает, что у пользователя хранилища trust.certs нет пароля, а пароль системы cacerts - «changeit». Ни один из них не работал, поэтому я использовал графический интерфейс панели управления Java, чтобы импортировать его в хранилище доверенных сертификатов пользователя.

Если в Windows: я не импортировал сертификат в хранилище доверенных сертификатов пользователя в апплете панели управления Java. Я импортировал его в учетную запись компьютера Windows Certificates.mmc и сохранил в Trusted Root Certification Authorities. Для этого мы используем политику.