Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> java.security.AccessControlException+сокеты+JS, апплет подписан 
V
    Опции темы
alex_smirnov
Дата 11.7.2007, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 22.6.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 4



Значит такие дела:

при загрузке апплета он нормально подключается к не локальному сокету и работает с ним по ивентам мыши с помощью собственных функций;

затем я при помощи JavaScript на странице вызываю те же функции (функции вызываются и работают smile, сделал обычные тесты...) и мне кидается следующее:

Firefox java console:

Код

My fucking query: HPQ 0 0 
Error connect to socket:
 java.security.AccessControlException: access denied (java.net.SocketPermission 10.0.0.2:8080 connect,resolve)
java.net.SocketException: Socket is not connected catched

java.security.PrivilegedActionException: java.lang.reflect.InvocationTargetException
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.plugin.liveconnect.SecureInvocation$2.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.plugin.liveconnect.SecureInvocation.CallMethod(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.plugin.javascript.JSInvoke.invoke(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.plugin.javascript.JSClassLoader.invoke(Unknown Source)
    at sun.plugin.liveconnect.PrivilegedCallMethodAction.run(Unknown Source)
    ... 4 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
    at AEpplet.makeSeriesChange(AEpplet.java)
    at AEpplet.createChart(AEpplet.java)
    at AEpplet.panelLoad(AEpplet.java)
    at AEpplet.loadGraphics(AEpplet.java)
    ... 14 more


IE java console:

Код

My fucking query: HPQ 0 0 
Error connect to socket:
 java.security.AccessControlException: access denied (java.net.SocketPermission 10.0.0.2:8080 connect,resolve)
java.net.SocketException: Socket is not connected catched

java.lang.ArrayIndexOutOfBoundsException: 1
    at AEpplet.makeSeriesChange(AEpplet.java)
    at AEpplet.createChart(AEpplet.java)
    at AEpplet.panelLoad(AEpplet.java)
    at AEpplet.loadGraphics(AEpplet.java)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.plugin.javascript.JSInvoke.invoke(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.plugin.javascript.JSClassLoader.invoke(Unknown Source)
    at sun.plugin.com.MethodDispatcher.invoke(Unknown Source)
    at sun.plugin.com.DispatchImpl.invokeImpl(Unknown Source)
    at sun.plugin.com.DispatchImpl$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.plugin.com.DispatchImpl.invoke(Unknown Source)
java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException: 1
    at sun.plugin.com.DispatchImpl.invokeImpl(Unknown Source)
    at sun.plugin.com.DispatchImpl$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.plugin.com.DispatchImpl.invoke(Unknown Source)


Апплет подписан.
Видно, что кидается(вобщем и ловится) IO исключение на сокете а дальше идёут уже мои баги с вылезанием за границы массива smile 

Может кто-то видит, в чём здесь может таиться заковырка?
PM GTalk Jabber   Вверх
LSD
Дата 11.7.2007, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538



Т.е. как я понял, если апплет сам вызывает функцию коннекта - то все проходит нормально. А если эту функцию вызвать из JS - то будет ошибка. Так?

При загрузке апплета спрашивается разрешение на дополнительные привелегии этому апплету?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
alex_smirnov
Дата 11.7.2007, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 22.6.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 4



Да, правильно понимаешь.

В самом начале спрашивалось подтверждение сертификата на 6 месяцев.

Интересно, что при замене jar файла и подписыванием тем же .keystore + очистка кэша(по X): всё равно сертификат считается принятым... непонятно.
PM GTalk Jabber   Вверх
LSD
Дата 11.7.2007, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538



Сертификаты можно очистить в Java Control Panel\Security\Certificates.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
alex_smirnov
Дата 11.7.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 22.6.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 4



Спасибо, я удалил все сертификаты. Запустил. Принял сертификат только на конкретный запуск(что бы потом опять меня браузер спросил). Вижу тот же результат, что и прежде... Т.е. сначала всё ОК, начинаю вызывать то же самое JS'ом - не работает и кидает все те же исключения (
PM GTalk Jabber   Вверх
ecologist
Дата 12.7.2007, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 452
Регистрация: 28.2.2007

Репутация: 1
Всего: 9



Может вызов через JS не проверяет сертификаты ? Может посмотреть консоль Java-машины ?
PM MAIL   Вверх
alex_smirnov
Дата 12.7.2007, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 22.6.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 4



Сори, а ты думаешь где я взял сообщения об исключениях?

Сижу на две консоли, в корне они говорят об одном.

И если я правильно понял, то сертификат проверяется однажды, когда апплет загружается в окне браузера. Т.е. при вызове апплетовской "небезопасной" функции JS ом, браузер уже (по идее) должен доверять ей.

В консоль пишутся мои логи выполнения функций апплета, всё работает нормально, пока не доходит дело до коннекта к сокету :(. Т.е. опять же при вызове из JS.

Это сообщение отредактировал(а) alex_smirnov - 12.7.2007, 15:14
PM GTalk Jabber   Вверх
alex_smirnov
Дата 12.7.2007, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 22.6.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 4



Накопал: 

JavaScript-to-Java security

JavaScript-to-Java Communication

Цитата

In JavaScript-to-Java communication, a call from JavaScript to an applet is allowed only if one or both of the following is true:

   1. The origin (URL) of the page is the same as the origin of the applet;
   2. JavaScript is signed and UniversalBrowserRead permission is enabled for JavaScript.

Without 1 or 2 being true, no call will be allowed from JavaScript to Java.


да вроде как оба true. Остальные функции ведь вызываются...

Цитата

Given that a call is allowed, then there are two possibilities: JavaScript will have default or all permissions.
Permissions are determined by checking JavaScript signing:

    * If JavaScript has UniversalJavaPermissions, then it will be granted all permissions.
    * If JavaScript does not have UniversalJavaPermissions, then permissions will depend on local Java policy, which is set by the JRE in the browser. Local Java policy will consider the origin of the JavaScript, determine a set of permissions based on origin, then perform actions on the Java side accordingly.


а вот тут-то JS каким-то образом и обходит сертификат, который я принял при загрузке апплета.
непонятно...
PM GTalk Jabber   Вверх
alex_smirnov
Дата 13.7.2007, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 22.6.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 4



Ну всё, уррра!

тему опять закрываю я сам ( и когда же плюсы раздавать будут smile ?))) )

значит в чём было дело и как я с этим разбирался:

я подумал, что неплохо было бы посмотреть на треды, которые исполняют выполняют всю такую секьюрную из себя функцию...

Код

Thread.currentThread().getId()
Thread.currentThread().getName()


мне помогло.

из всего увиденного стало ясно, что браузер доверяет(пропускает) обращения только тех тредов, которые были созданы апплетом. Оказалось, что JS вызывая функции апплета создавал ( не знаю как правильно выразиться ) внешний тред, которому, конечно не было дозволено лазить на сокет.

Решением стало создание треда в start() методе апплета, который через некоторый интервал времени проверяет изменение булевого флажка, ответственного за дальнейшие действия. Если флажок изменился, вызываем дальнейшие секьюрные функции с нормальными привелегиями, т.е. используем тред самого апплета.

Это сообщение отредактировал(а) alex_smirnov - 13.7.2007, 17:10
PM GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Апплеты | Следующая тема »


 




[ Время генерации скрипта: 0.0794 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.