签名的applet可以与它们所源自的不同主机连接吗?

时间:2009-03-03 21:56:34

标签: security sockets applet host

我需要一个小程序来打开套接字并与正在监听的服务器通信 applet下载的本地主机(最终用户计算机)。

与我读到的关于applet安全性的内容相反,似乎甚至签署了applet 无法打开一个套接字到下载它们的不同主机(在同一台机器上运行完美)

我已经使用-selfcert对applet进行了认证,使用jarsigner对其进行了签名,而且,无论何时何地 它试图打开一个套接字到另一个主机,我得到:

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

我甚至尝试更改Java策略文件,尽管使用签名的applet不需要这样做:

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

与sigend小程序有什么关系,它们能否与不同的主机联系?

1 个答案:

答案 0 :(得分:1)

是的,当您加载applet时,如果您选择接受其证书并信任它,则会授予AllPermission,其中包括SocketPermission。我之前编写了一个已签名的applet,它连接的主机不是加载它的主机。您可以尝试暂时将您的java策略文件更改为

grant {
  permission java.security.AllPermission;
};
  • 查看您的策略文件,看看它是否定义了任何其他policy.url位置,也许它们正在干扰。
  • 检查您的浏览器设置可能是javascript。
  • 确保您已接受applet的证书,并将其安装到您的站点证书列表中。
  • 确保您拥有的grant codeBase行与applet清单中的代码库相同。
  • 您可以尝试在尝试连接之前打印出小程序的权限列表。
  • 您可以尝试以编程方式从小程序中授予AllPermission。