Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Как подписать JAVA апплет

Anna | 4.06.2014 | нет комментариев
Привет, любимый читатель.
Сегодня ты узнаешь как подписать JAVA апплет. Для начала скажу, что JAVA апплеты имеют ограниченную функциональность, пока они не подписаны. Скажем, неподписанные апплеты не могут:

    • взаимодействовать с локальной файловой системой заказчика;
    • устанавливать сетевые соединения с другими серверами;
    • взаимодействовать с буфером обмена заказчика;
    • некоторые другие.


Вариантов решения задачи несколько:
1. Позволить выполнение на всякой локальной машине заказчиков. Для этого дозволено отредактировать файл java.policy, тот, что находится в папке с установленным JRE (по умолчанию в C:Program FilesJavajre6libsecurity). И добавить нужные разрешения. Скажем, Дабы позволить все, что дозволено, необходимо вставить строчку:

grant {
	...
	permission java.security.AllPermission;
}

А если необходимо позволить только работу с буфером обмена для сайта hackmeplease.com:

grant codeBase "http://hackmeplease.com/*" {
	permission java.awt.AWTPermission "accessClipboard";
};

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

2. Подписать свой Java-апплет. Выходит, что имеем на входе:
— установленные JDK и JRE;
— jar-файл своего апплета (есть некоторые особенности написания начального кода, см. ниже);
— желание трудиться с буфером обмена. Для этого необходимо, Дабы правильно работала строчка:

Toolkit toolkit = Toolkit.getDefaultToolkit();
Clipboard clipboard = toolkit.getSystemClipboard();

В случае вызова этих строчек, из неподписанного апплета получим следующее исключение:
java.security.AccessControlException: access denied (java.awt.AWTPermission accessClipboard)

Выходит, приступим:
0. Переходим в папку BIN нашего JDK (скажем, C:Program FilesJavajdk1.6.0_23bin).
I. Создаем локальное хранилище нашего сертификата (keystore):
keytool -genkey -keystore .keystore -alias «Terrasoft» -validity 99999
где Terrasoft — наименование alias нашего сертификата;
99999 — срок в месяцах валидности сертификата;
.keystore — имя файла создаваемого хранилища.

В случае удачного запуска команды, система спросит нас пароль нашего хранилища, а также некоторую информацию о сертификате (твои ФИО, наименование компании, город, страну и группу крови)

В итоге будем иметь файл .keystore. Это и есть наше хранилище, которым мы будем подписывать различные апплеты.
II. Копируем в папку BIN нашего JDK наш JAR-файл. Подписываем его с поддержкой дальнейшей команды:
jarsigner.exe -keystore .keystore ClipboardLibrary.jar «Terrasoft»
где Terrasoft — наименование alias нашего сертификата;
.keystore — имя файла хранилища;
ClipboardLibrary.jar — наименование JAR-файла.
Система спросит нас пароль — вводим тот, что ввели в п. I.

Как бы как готово… Да щас, наивный…
Выходит, при запуске страницы с нашим апплетом на борту пользователь получит дружелюбное сообщения вида:

Что обозначает, «Пользователь, нажми Да и попрощайся со своей системой, потому как мы сумеем с ней делать, что захотим».
Кстати, обратите внимание на NOT VERIFIED. Обозначает, что у нас не доверительный сертификат. Дабы получить доверительный, необходимо обращаться в особые службы в инете и даже платить деньгу.

Но возвратимся к нашим баранам. При обращении к буферу обмена мы вновь получим исключение вида:
java.security.AccessControlException: access denied (java.awt.AWTPermission accessClipboard)

Дюже жалко. Ну что же, не получилось теперь — получится в иной раз. До свидания.

Шучу. На самом деле на этом моменте останавливаются все начальства по подписыванию апплетов, которые я встречал. Мол, подписанному апплету ничего не жутко. Пускай им каждому будет совестно.
Короче, дальнейший финт для того, Дабы наше обращение к буферу обмена заработало:

III. Изменить начальный код.
Взамен вызова вида:

clipboard = toolkit.getSystemClipboard()

необходимо написать вызов вида:

clipboard = (Clipboard) AccessController.doPrivileged(new PrivilegedAction() {
	public Object run() {
		return toolkit.getSystemClipboard();
	}
});

Позже этого необходимо перекомпилировать свой JAR и повторить шаг II (тем, кто читал с конца мое сообщение — респект).

Вот в всеобщем-то и все. Должно трудиться. Верю, что кому-то это сгодится, и он не будет столько своей жизни тратить на эту ерунду, сколько потратил я. Нехай проблеми i негоди не роблять вам в життi погоди (С). До новых встреч в эфире.

Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB