Как подписать Java апплет для использования в браузере?

Я пытаюсь развернуть Java-апплет на своем веб-сайте. Мне также нужно подписать его, потому что мне нужно получить доступ к буферу обмена. Я следил за всеми учебниками по подписанию, которые я мог найти, но не имел никакого успеха. Вот что я сделал до сих пор:

  • написал апплет в NetBeans. Он отлично работает в средстве просмотра апплетов.
  • сделал .jar файл из него.
  • создал сертификат, выполнив это:
keytool -genkey -keyalg rsa -alias myKeyName
keytool -export -alias myKeyName -file myCertName.crt
  • подписал его с jarsigner так:
jarsigner "C:my pathmyJar.jar" myKeyName
  • сделал html-файл, содержащий это:
<html>
  <body>
<applet code="my/path/name/myApplet.class" archive="../dist/myJar.jar"/>
  </body>
</html>

когда я открываю этот html-файл, я никогда не получаю диалоговое окно подтверждения безопасности (и, таким образом, получаю "java.безопасность.AccessControlException: отказано в доступе" ошибка). Это происходит во всех браузерах.

Я что-то пропустил?

6 ответов


возможно, это потому, что ты открыл некоторые .class files за пределами файл jar?

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

возможно, ваша конкретная настройка или файловая организация вызывает такое поведение. Если вы можете макет, что более подробно мы могли бы помочь лучше (или, скорее, попробуйте положить все это .файлы классов в еще одной подписанной банке и добавьте ее в архив"..., anotherJar.сосуд.)"


3 простых шага

  1. keytool-genkey-keystore myKeyStore-псевдоним меня

  2. keytool-selfcert-keystore myKeyStore-псевдоним меня

  3. jarsigner-keystore myKeyStore jarfile.jar me


во-первых, я бы предложил получить действительный сертификат подписи кода. Вы можете получить бесплатный сертификат от Thawte. Хотя обычно эти сертификаты используются для S / MIME, они также действительны для подписи кода.

второй вариант-импортировать самозаверяющий сертификат в файл cacert JRE, который вызывает ваш браузер.

следующая вещь, чтобы проверить, чтобы убедиться, что ваш браузер работает ваш последний банку. Один из способов сделать это-всегда увеличивать ваш номер версии. Другой вариант-очистить кэш апплетов Java. Обычно я также очищаю кэш своего браузера, но это не должно быть необходимо.


Вы сказали:

когда я открываю этот html-файл, я никогда не получаю диалоговое окно подтверждения безопасности...

вы открываете файл из локальной файловой системы, или через URL-адрес веб-сервера, на котором размещен файл HTML и jar апплета(ы)? Может, поэтому тебя и не предупредили.


вот способ подписать ваши банки, а затем проверить, что все файлы классов подписаны с вашим хранилищем ключей.

#!/bin/bash
KEYSTORE=/home/user/NetBeansProjects/sign/keystore
FILES=`find /home/user/NetBeansProjects/Project/dist/ -name "*.jar"`
for f in $FILES; 
   do echo password |  /usr/bin/jarsigner -keystore $KEYSTORE -verbose $f myself;
   echo "Signed $f"; 
  /usr/bin/jarsigner -verify -verbose -certs $f | grep X.509 | sort -u;
done

Edit: этот ответ является историческим. JDK9 видимо охаять апплеты. На момент написания (1 января 2017) вы должны подписать апплеты, но не давать им никаких дополнительных привилегий, а затем перейти на более современную технологию.

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

JTextComponent следует разрешить копирование и вставку текста, если это достаточный.

jarsigner -verify проверит, что ваш jar подписан. Вы также можете быстро просмотреть файл манифеста и файлы в META-INF/.

всплывающее диалоговое окно для доверия сертификатам может быть отключено. В реализации Sun: откройте Панель управления Java; перейдите на вкладку Дополнительно; разверните узел безопасности; два верхних флажка должны быть "разрешить пользователю предоставлять разрешения на подписанный контекст" и " разрешить пользователю предоставлять разрешения на содержимое из ненадежного авторитет."