FoxBase!
msgbartop
Блог Oracle разработчика
msgbarbottom
foxbase

24.02.2010 PJC JAR Signing for JInitiator

В этой статье пойдет речь о подписывании (signingPJC JAR файла для приложений, использующих Oracle Application Server.
Например, вы разрабатываете некоторый модуль на Java с использованием технологии PJC для Oracle Forms. Пусть это будет PJC модуль, который вызывается из некоторой формы Oracle Forms, и который отображает карту Google Maps. Сам процесс рисования карты сводится к запросу к серверу maps.google.com с определенными параметрами и получении от него картинки, которую необходимо нарисовать в нашем PJC модуле. Если такой запрос выполнять просто в Java апплете, то все будет нормально - картинка будет получена и отображена. Но если такой запрос выполняется из PJC компонента, то механизм здесь следующий:
Клиент, выполняющий приложение Oracle Application Server автоматически скачивает себе последнюю версию JAR файла с PJC модулем на локальную машину. Все запросы от PJC компонента выполняются через JInitiator. У JInitiator прописаны параметры безопасности, которые не позволяют обратиться к какому либо сайту через привилегированный порт, в нашем случае - 80. В итоге через консоль Java мы будем наблюдать следующую ошибку:

java.security.AccessControlException: access denied (java.net.SocketPermission maps.google.com resolve)


at java.security.AccessControlContext.checkPermission(Unknown Source)
     ...
Может быть очень неожиданно и неприятно... 

Как разрешить JInitiator выполнять стандартные запросы к сайтам?

На этапе отладки приложения можно поступить следующим образом.  Находим, где расположен JIniriator и его policy файл. Например, 

c:\Program Files\Oracle\JInitiator1.3.1.22\lib\security\java.policy
Добавляем в этот файл строчку:

permission java.security.AllPermission;
Тем самым мы разрешаем делать все, отключив всякие ограничения безопасности для JInitiator. После этого картинка будет скачиваться и отображаться. 
Для этапа отладки и для разработчика такое решение может быть приемлемым. Но когда приложение готово, что делать многочисленным пользователям? Всем локально править файл java.policy? Нет, это очень плохое решение, нет смыла даже описывать, почему, и так понятно.
Правильным решением будет подписать (signing) наш PJC JAR файл. Если мы это сделаем, то пользователь будет получать запрос при первом запуске приложения. Пользователь может разрешить выполнять необходимые действия этому PJC, если он уверен в его источнике. Разрешить может только для текущей сессии или навсегда. И никаких изменений локальных файлов. Это решение является правильным. 

Как подписать JAR файл

Для начала нам необходимо создать файл - сертификат, которым бы будет подписывать наш JAR файл. Для этого воспользуемся утилитой keytool, которая обычно расположена в каталоге /bin вашего Java SDK. Для этого необходимо выполнить keytool со следующими параметрами:

c:\sun\sdk\jdk\bin\keytool -genkey -dname "
CN=Duncan Mills, OU=Tools Product Management, O=Oracle Corporation, C=US
" -alias pjc_identity -keypass pjc_identity_pwd -keystore c:\keystore -storepass keystore_pwd
В результате выполнения будет создан файл - сертификат с именем keystore в каталоге c:\
Поясним параметры keytool:
Аргумент
Назначение
-genkey
Говорит keytool о необходимости генерировать сертификат
-dname
Описание продукта в формате X.500
-alias
Название сертификата
-keypass
Защитный пароль
-keystore
Путь и имя файла сертификата
-storepass
Пароль сертификата
-validity
Длительность действия сертификата в днях
Поля, допустимые в -dname
Свойство
Аббревиатура
Пример
CommonName (Название)
CN
Duncan Mills
OrganizationUnit (Подразделение организации)
OU
Tools Product Management
OrganizationName (Название организации)
O
Oracle Corporation
LocalityName (Местонахождение)
L
Redwood Shores
StateName (Штат)
S
California
Country (Страна)
C
US
Когда сертификат сформирован, нам необходимо подписать наш JAR файл этим сертификатом. Выполняется подпись при помощи утилиты jarsigner, которая обычно находится в каталоге /bin вашего Java SDK. Для этого необходимо выполнить jarsigner со следующими параметрами:

c:\sun\sdk\jdk\bin\jarsigner -keystore с:\keystore -storepass keystore_pwd -keypass pjc_identity_pwd c:\oracle\product\ids10g\forms\java\pjc_file.jar pjc_identity
Здесь указываем в качестве параметров путь к сформированному файлу сертификата, пароли, путь к подписываемому JAR файлу, алиас. В случае успешного выполнения JAR файл будет изменен, подписан, его размер увеличится всего на несколько килобайт.
При работе приложения в момент первого обращения к подписанному JAR файлу будет показан диалог:
Пользователь должен дать права на выполнение JAR файла или запретить его выполнение на своей машине. 
При изменении версии JAR файла его будет необходимо подписать снова, используя ранее созданный сертификат. Если сертификат не был изменен, то повторных запросов на выдачу прав новой версии JAR файла пользователю выдаваться не будет.



Смотрите также:



Оставьте свой комментарий

Вы должны быть авторизированны, чтобы оставить комментарий.