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

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

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

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

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

Мне не хватает шага?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

  • keytool -genkey -keystore myKeyStore -alias me

  • keytool -selfcert -keystore myKeyStore -alias me

  • jarsigner -keystore myKeyStore jarfile.jar me

Ответ 3

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

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

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

Ответ 4

Вы упомянули:

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

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

Ответ 5

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

#!/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

Ответ 6

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

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

JTextComponent должен допускать копирование и вставку текста, если этого достаточно.

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

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