可以签名的小应用程序与它们始发的不同主机连接吗?

问题描述:

我需要一个小程序来打开一个套接字并与监听小程序下载的本地主机(最终用户机器)的服务器进行通信。可以签名的小应用程序与它们始发的不同主机连接吗?

相反的是我看了一下小程序的安全性,似乎连签名的Applet 无法打开一个套接字从他们被下载

我已经认证(它完美的作品在同一台机器上)不同的主机使用-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小程序,可以自己选择Connet到不同的主机或不?

是的,当你加载你的applet时,如果你选择接受它的证书并且信任它,它被授予AllPermission,它包括SocketPermission。在连接到除加载它之外的主机之前,我写了一个签名的小程序。你可以尝试暂时改变你的java策略文件只是有

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

@John,似乎只是授予权限java.security.AllPermission;但是这仍然是我能够实现它的唯一方法。我让小程序打印了它的代码库,看起来很好。非常令人沮丧,但至少感谢你,我知道这确实与安全有关,而不是一些奇怪的问题。 – adilei 2009-03-04 09:42:19