最近公司在使用一個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