![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
AntonSaburov |
|
||||||||||||||||||||||||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Вопрос: Подписи в аплетах - как это делается ?
Ответ: Решил подготовить небольшую статью о том, как создаются подписи для аплетов и как это все работает. Все примеры проверялись с установленным JRE 1.4.2 - так что если вы не установили хоть какую-то JRE, работать не будет ничего. Если же установили, но другой версии, то возможно, что работать будет не совсем так, как описано. В этом случае я жду Ваших пожеланий и комментариев. Текст программы я сочинил не сам - подсмотрел. Но все остальное проверил и протестировал. Так что пользуйтесь ![]() Итак, начнем с самого начала и напишем небольшой аплет, который умеет читать файл с диска. Вот сам код аплета
А вот и примерчик HTML (ReadFileApplet.htm), который запустит ваш код.
После того, как вы скопировали эти примеры ![]() Первым делом запустим компилятор JAVA,
а второй командой соберем получившиеся class-файлы в JAR-архив
Ключ c говорит о том, что надо создать архив. Ключ f говорит что надо отправить результат в файл rfa.jar. Последним идет список фалов. Теперь у нас есть JAR-файл и вы можете (это лучше сделать сейчас) удалить файлы *.class. Итак, мы подготовили обычный аплет. Давайте проверим его работоспособность Запускаем
Аплет по идее должен загрузиться и мы теперь нажимаем кнопку "Read Local File" И получаем само собой предупреждение, что мы этого не можем делать
Как видим, поведение совершенно правильное, ибо нефиг локальные файлы читать всяким аплетам. Теперь приступим к подписанию нашего аплета. Первое, что мы должны сделать, это сгенерировать пару ключей закрытый/открытый и поместить эту пару в некое хранилище. Для серъезных приложений такие хранилища в Интеренете содержат специальные уполномеченные фирмы. Нам это в данный момент недоступно и мы создадим свое локальное хранилище. Итак, запускаем следующую команду
Утилита keytool предназначена для многих целей, но мы ее используем для генерации ключа. Что указывает ключ -genkey. Пара ключей помещается в файл-хранилище .keystore (это говорит опция -keystore) и этой паре присваивается алиас "Vingrad" (ключ -alias) Сначала утилита спросит пароль для хранилища. Можно ввести что-то запоминающееся - например, 123456. Запомните этот пароль - он нам еще пригодится. После этого будут заданы вопросы, на которые можно просто нажимать <ENTER> Только подтверждение должно содержать yes
Теперь по идее в нашем каталоге появился файл .keystore. И теперь мы можем подписать наш JAR-архив. Для подписи арзива используем утилиту jarsigner ОБЯЗАТЕЛЬНО: Не забудьте выйти из appletviewer, т.к. в противном случае JAR-файл невозможно будет изменить.
Ключ -keystore (как Вы наверняка догадались) используется для указания, из какого хранилища брать ключи подписи. Далее следует имя JAR-архива и потом алиас - кто подписывает данный JAR. У вас будет запрошен пароль (Вы его должны были запомнить) после чего утилита обработает Ваш архив. Если никаких сообщений об ошибках не было Вы может посмотреть содержимое JAr-файла и обнаружить, что в директории META-INF находится файл vingrad.sf. Это как раз подпись. И теперь мы можем еще раз запустить наш аплет. Как и в прошлый раз
Нажимаем и ... опять ничего не работает. Все верно. мы должны также указать в политике безопасности, что мы можем доверять аплетам, которые подписал "Vingrad". Для этого надо сделать две вещи: 1. Указать JAVA_HOME. Указать его лучше всего на каталог с SDK 2. И в файл $JAVA_HOME\jre\lib\security\java.policy добавить следующие строки:
И вот теперь мы можем попробовать еще раз
На этот раз должно все сработать (если Вы ничего не перепутали) А теперь давайте запустим наш аплет в настоящем броузер. Я использовал IE 6 с установленной JAVA-машиной от Sun. В этом случае при загрузке апплета броузер задаст Вам вопрос - доверяете ли вы данной подписи. У Вас есть выбор - Yes, No, Always (Да, Нет, Всегда). Если Вы ответите "ДА", то аплет сможет прочитать файл. Но если Вы захотите повторно загрузить этот аплет, Вас спросят опять о доверии. Если "НЕТ - то аплет не сможет прочитать файл. Если же Вы ответите "ВСЕГДА", то после этого сколько бы Вы не загружали страничку, ничего Вас спрашивать не будут. Сделайте так. Убедились ? Но если Вы захотите отменить доверие. Вы можете удалить все изменения из файла java.policy и это не поможет. Так где собака зарыта ? Запустите "Панель управления" и там Вы увидите пункт "Java Plug-In". Давайте запустим. Вы увидите несколько закладок. Из них нас интересует одна - "Sertificates". И там, о чудо, там то, что нам надо - там появился наш сертификат, который говорит о том, что доверять можно. Если Вы удалите его, то следующая загрузка странички породит опять вопрос о доверии. Небольшое дополнение насчет файла java.policy. Этот файл нужен, чтобы пользователю не выводилось предупреждений. Т.е. если он есть, и в нем прописан данный производитель ПО, то пользователю не будет выдаваться запросов и предупреждений, апплет сразу получит права прописанные в policy файле. Если же файл отсутсвует или такого производителя ПО там нет, то пользователю будет выдан запрос, доверять ли данному производителю ПО или нет. Если пользователь ответи да, то апплет получит все разрешения. Вообщем-то и все. Все Ваши комментарии и замечания будут приняты с благодарностью. |
||||||||||||||||||||||||
|
|||||||||||||||||||||||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |