Как мне подписать Java-апплет для использования в браузере? - PullRequest
40 голосов
/ 26 мая 2009

Я пытаюсь развернуть 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»). Это происходит во всех браузерах.

Я пропустил шаг?

Ответы [ 6 ]

29 голосов
/ 22 декабря 2010

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

  1. keytool -genkey -keystore myKeyStore -alias me

  2. keytool -selfcert -keystore myKeyStore -alias me

  3. jarsigner -kystore myKeyStore jarfile.jar me

7 голосов
/ 26 мая 2009

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

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

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

1 голос
/ 03 августа 2009

Вот способ подписать ваши 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
1 голос
/ 26 мая 2009

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

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

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

1 голос
/ 26 мая 2009

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

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

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

0 голосов
/ 26 мая 2009

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

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

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

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

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

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