最近公司在使用一个java ssh client(JTA http://javassh.org/space/start)来做为web页面中远程telnet/ssh机器的客户端,但是在使用jta提供的applet的时候总是不能telnet/ssh,但是在下载了源码包之后,直接使用源码包中的测试页面是可以访问的,后来查了一下资料,看了一下jta的日志发现是因为jta的applet里使用了Socket去连接远程机器的,而在applet里使用Socket是会有安全问题的,默认是不允许的,对于这个问题其实是有两个解决办法的,第一个是修改每个客户端的java.policy文件,添加对Socket访问允许的配置;另一个是对applet的jar文件做数字签名,这样就客户端就不需要做任何修改,只是在用浏览器访问applet出现提示的时候选择信任这个签名的applet就可以了。下面就对两种方法做个说明:
1. 修改本地策略文件
在本地的以下两个文件
{JAVA_HOME}/jre/lib/security/java.policy
{JRE_HOME}/jre/lib/security/java.policy
在其中grant部分添加
permission java.security.AllPermission;
然后重新启动浏览器再次访问applet就可以访问远端机器了
2. 添加数字签名
1) 下载最新的jta包,这里假定使用的是jta26.jar
2) 运行 keytool -genkey -keystore jta26.store -alias jta26
3) 运行 keytool -export -keystore jta26.store -alias jta26 -file jta26.cert
4) 运行 jarsigner -keystore jta26.store jta26.jar jta26
5) 然后重新启动浏览器再次访问applet就可以访问远端机器了
参考资料:
http://www-personal.umich.edu/~lsiden/tutorials/signed-applet/signed-applet.html