Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Апплеты > подпись апплета


Автор: 1sanek1 28.10.2008, 14:36
Хочу сказать сразу, спасибо автору, за следующую статью:  smile 
http://forum.vingrad.ru/faq/topic-157929.html
Но уменя, по этой теме возникло несколько вопросов и поскольку та статья закрыта, решил открыть свою тему.

1)Я правильно понимаю, что JAVA_HOME это переменная среды и её можно выстовить следующим образом: 
пуск - панель управления - производительность и обслуживание - система - дополнительно - параметры среды 
И там присвоить 
JAVA_HOME=С:\Program Files\Java\jdk1.6.0_05       (правильно я присваиваю значение и можно ли в место SDK, использовать jdk)

2)Я так понял что следующий задача, это прописать в комадной строке:
С:\ProgramFiles\Java\jdk1.6.0_05\bin> $JAVA_HOME\jre\lib\security\java.policy  (здесь уменя возникает ошбка"Системе не удаётся найти указанный путь"), после чего откроется файл, куда надо вписать следующий код:
keystore "file:E:/TEMP/TEST/JAR/.keystore";
grant {
    permission java.io.FilePermission "C:/AUTOEXEC.BAT", "read", signedBy "Vingrad";
};

3)Что означает keystore "file:E:/TEMP/TEST/JAR/.keystore";, это стандартный вариант (странный какой то путь smile ). И если я захочу в своём апплет не только читать данные из файла, но и записывать, значит мне надо как то так написать 
grant{ 
permission java.io.FilePermission "C:/AUTOEXEC.BAT", "read", "write" , signedBy "Vingrad"; };
Буду очень благодарен за помощь! smile 

Автор: LSD 31.10.2008, 16:19
1. Да. Под SDK в данном случае и понимается JDK.

2. Надо просто создать или отредактировать файл С:\ProgramFiles\Java\jdk1.6.0_05\jre\lib\security\java.policy и добавить туда указанные строки.

3. Это означает что для приложений подписанных сертификатами из хранилища E:\TEMP\TEST\JAR\.keystore нужно установить следующие разрешения.
Для того чтобы дать права на чтение и запись, надо писать так:
Код

keystore "file:E:/TEMP/TEST/JAR/.keystore";
grant {
    permission java.io.FilePermission "C:/AUTOEXEC.BAT", "read,write", signedBy "Vingrad";
};

Автор: 1sanek1 1.11.2008, 12:50
Спасибо за помощь!
Правдо, у меня ни чего не получается. smile 
Я пишу апплет, который если существует файл data.txt и в нем что то записанно, то данные извлекаются(Ip,port,...), если нет, вводит пользователь.
Затем пользователь нажимает кнопку ок и данные записываются в файл  data.txt.
После чего, используя данные(Ip,port,...), коннектимся к базе данный и извлекаем координаты, по которым строим графики.
Возникает следующая ошибка:
C:\Program Files\Java\jdk1.6.0_05\bin>appletviewer grsf.html
Exception in thread "AWT-EventQueue-1" java.security.AccessControlExceptio
ess denied (java.io.FilePermission date.txt write)
        at java.security.AccessControlContext.checkPermission(AccessContro
xt.java:323)
        at java.security.AccessController.checkPermission(AccessController
546)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:
        at java.lang.SecurityManager.checkWrite(SecurityManager.java:962)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:169)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:102)
        at Zapis.Zapiss(Zapis.java:28)
        at Main.actionPerformed(Main.java:146)
        at java.awt.Button.processActionEvent(Button.java:392)
        at java.awt.Button.processEvent(Button.java:360)
        at java.awt.Component.dispatchEventImpl(Component.java:4413)
        at java.awt.Component.dispatchEvent(Component.java:4243)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispat
ad.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchT
java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispat
ad.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.jav

        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.jav

        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Класс Zapis отвечает, соответственно за запись.
Я так понимаю выскакивает ошибка, сообщающая о том, что нет прав записывать в файл.
Я подписываю апплет так:
1)Создаю архив .jar:
jar cvf rfa.jar Main.class Connect.class Izvlechenie.class Zapis.class SampleFrame.class
2)Создаю локльное хранилище:
keytool -genkey -keystore .keystore -alias "Vingrad"
ввожу пароль 123456
подтверждаю пароль 123456
затем нажимаю Entor
и в конце ...[no]: yes  
 затем опять Entor
3)Записываю в файл С:\ProgramFiles\Java\jdk1.6.0_05\jre\lib\security\java.policy следующее:
keystore "file:E:/TEMP/TEST/JAR/.keystore";
grant {
    permission java.io.FilePermission "C:/AUTOEXEC.BAT", "read,write", signedBy "Vingrad";
};
Собственно и всё, HTML файл выглядит так:
Код

<applet code="Main.class" archive="rfa.jar" width=450 height=700>
<PARAM NAME="fileName" VALUE="C:\AUTOEXEC.BAT">
</applet>

Все операции произвожу в C:\Program Files\Java\jdk1.6.0_05\bin, тоесть по этому адресу можно найти .keystore
Может ошибка возникает, из-за того, что путь указан не верно keystore "file:E:/TEMP/TEST/JAR/.keystore";?
И ещё вопрос, надо ли давать права, когда я конекчусь к базе данных(использу JDBC драйвер) , если да то как? Я так понимаю надо, что то дописать в  grant. 

Автор: LSD 1.11.2008, 13:51
В java.policy надо указать путь до твоего keystore, если он лежит в C:\Program Files\Java\jdk1.6.0_05\bin то и надо указывать C:\Program Files\Java\jdk1.6.0_05\bin\.keystore

Автор: 1sanek1 1.11.2008, 14:03
Эх, что то не помогло.(
Испрвил на keystore "file:C:\Program Files\Java\jdk1.6.0_05\bin\.keystore";
а ошибка та же самая(

Автор: LSD 1.11.2008, 16:03
Слеши какие у тебя стоят и в примере smile 

Автор: 1sanek1 1.11.2008, 16:41
Не совсем понял каке слеши. smile 
Вообще вот такие: C:\Program Files\Java\jdk1.6.0_05\bin\.keystore
попробовал так C:/Program Files/Java/jdk1.6.0_05/bin/.keystore,   ошибка та же,
а что означает "C:/AUTOEXEC.BAT", это случайно не влияет на права?

Автор: Keyo 4.11.2008, 15:57
омг, человек, Ты так долго не можешь апплет подписать? Кошмар. 
Когда у меня такая задача была, делал по вот этой статье http://www.javaportal.ru/java/articles/trustapplet/trustapplet.html
получилось с первого раза

Автор: 1sanek1 6.11.2008, 19:42
Спасибо за помомощь! Правдо я уже нашёл как дать права, чуть иначе.
Создаю файл политики, используя policytool после  чего прописываю в java.security:
policy.url.1=file:/C:/Program Files/Java/jdk1.6.0_05/jre/lib/security/java.policy
 policy.url.2=file:/C:/Test/mypolicy
Если запускать апплет используя appletviewer, то всё работает замечательно.
Только щас мучаюсь с другой проблемой, неполучается запустить с помощью браузера(почему то опять нет прав) , видимо когда я загружаю HTML через браузер, файл java.security не загружается и соответственно файл политики то же..

Автор: Keyo 6.11.2008, 23:18
1sanek1, мне приходилось подписывать jar архив каждый раз после ребилда, используя утилиту jarsigner

Автор: 1sanek1 8.11.2008, 18:01
Спасибо, ещё раз за помощь!!!
Keyo, а что такое ребилд, первый раз слышу такое слово? smile 
Я нашёл у себя ошибку, так что теперь апплет работает.
Делал по следующей технологии:
если зайти на сылку 
http://www.javable.com/tutorials/ , там будит "Учебник JavaTM Tutorial" зарегистрировшись, можно перейти на http://www.javable.com/tutorials/tjt/security1.2/tour1/index.html , там будит отличнай статья, как предаставить права на запись и чтение, для апплета. 
Сделал как там написанно и всё заработало.)
С помощью программы Process Monitor http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx, обнаружил почему не предоставлялись права, когда я запускал с помощью браузера.
Дело в том, что не запускался java.security, а точнее все корективы я вносил в 
C:\Program Files\Java\jdk1.6.0_05\jre\lib\security\java.securit 
а запускался 
C:\Program Files\Java\jre1.6.0_07\lib\security\java.securit 
просто у меня было два jre, а точнее даже три, но в процессах запускался именно jre1.6.0_07

Автор: Keyo 9.11.2008, 00:39
ребилд это ребилд smile компиляция исходников и формирование jar архива

Автор: 1sanek1 9.11.2008, 12:07
а...,  ясненько, теперь буду знать.))


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)