Могут ли подписанные апплеты подключаться к другому хосту, с которого они происходят? - PullRequest
4 голосов
/ 04 марта 2009

Мне нужен апплет для открытия сокета и связи с сервером, который прослушивает локальный хост, на который загружен апплет (компьютер конечного пользователя).

вопреки тому, что я прочитал о безопасности апплета, кажется, что даже подписанные апплеты невозможно открыть сокет для другого хоста, с которого они были загружены (на той же машине он работает отлично)

Я сертифицировал апплет с помощью -selfcert, подписал его с помощью jarsigner и до сих пор всякий раз, когда он пытается открыть сокет для другого хоста, я получаю:

Java.lang.Exception: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:9999 connect,resolve)

Я даже пытался изменить файл политики Java, хотя с подписанными апплетами это не требуется:

grant codeBase "http://applethost:8080/socket" { permission java.security.AllPermission; permission java.lang.RuntimePermission "usePolicy"; };

Как обстоят дела с sigend-апплетами, могут ли они подключаться к другому хосту или нет?

1 Ответ

1 голос
/ 04 марта 2009

Да, когда вы загружаете свой апплет, если вы решаете принять его сертификат и доверять ему, ему предоставляется AllPermission, который включает SocketPermission. Я написал подписанный апплет до того, как он подключится к хосту, отличному от того, с которого он был загружен. Вы можете попытаться временно изменить файл политики Java, чтобы просто иметь

grant {
  permission java.security.AllPermission;
};
  • Просмотрите файл политики, чтобы определить, определяет ли он какие-либо другие местоположения policy.url, возможно, они мешают.
  • Проверьте настройки браузера на наличие JavaScript.
  • Убедитесь, что вы приняли сертификат для апплета и он установлен в вашем списке сертификатов сайта.
  • Убедитесь, что строка кода codeBase, которая у вас есть, совпадает с базой кода в манифесте вашего апплета.
  • Вы можете попробовать распечатать список разрешений, которые есть у вашего апплета, прежде чем пытаться подключиться.
  • Вы можете попробовать программно предоставить AllPermission из апплета.
...