Недавнее обновление нашей системы тайм-карт вынудило нас обновить все наши рабочие станции до 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. Для этого мы используем политику.