2009-05-26 4 views
39

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

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

ответ

6

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

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

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

+0

Я исправил его. Проблема заключалась в том, что мои файлы jar не компилировались так же, как я ссылался на файлы классов. Он работает сейчас. Благодаря! – user107312

-1

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

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

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

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

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

+0

Основываясь на моих требованиях, код должен быть подписан. Я проверил свой файл jar, и он говорит, что все в порядке. мой файл класса помечен как smk: подпись была проверена, запись указана в манифесте, и по крайней мере один сертификат был найден в хранилище ключей. Папка META-INF выглядит тоже хорошо. Установки также прекрасны в моей панели управления. Я прекрасно вижу другие самозаверяющие апплеты. – user107312

+3

Справедливости ради, подписание апплетов (и работа с сертификатами в целом) может быть довольно раздражающим процессом. Это не обязательно означает, что плакат не «знает, что они делают» с точки зрения кода ... –

+0

Число людей, которые «знают, что они делают» с точки зрения безопасности, кажется, очень мало , –

1

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

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

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

+0

Я считаю, что проблема использования сертификатов электронной почты для подписи кода была исправлена. –

+0

Thawte прекратил действие Личных сертификатов электронной почты и системы сертификации Web of Trust (WOT) – Massimo

1

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

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

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

+0

Я открываю свою локальную систему. Вы говорите, что диалог безопасности не появится, если он открыт локально? Если это так, есть ли способ заставить его появляться локально? Это облегчит тестирование моего проекта. Между тем, я попробую его на веб-сервере, чтобы убедиться, что это проблема. – user107312

+0

Он по-прежнему не работает при доступе с веб-сервера. Мне нужны только файлы .class, .jar и .html, так? Нужны ли мне файлы, связанные с сертификатами? – user107312

1

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

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

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

  1. Keytool -genkey -keystore myKeyStore -alias мне

  2. Keytool -selfcert -keystore myKeyStore -alias мне

  3. Jarsigner -keystore myKeyStore jarfile .jar me

+1

'-keystore myKeyStore' даже является факультативным, не так ли? Таким образом, я подписал свой апплет, но моя проблема с Clipboard остается. Однако лучший аппликатор (jarsigning) - учебник, который я нашел в Интернете. :) –