2013年6月23日 星期日

[Java] Security Manager (Security Excetpion)

最近在執行以前撰寫的Applet時,都會無法執行,並且產生Security Exception的訊息或一些安全性的問題。

傳統上,一個web applet通常是運作在一個Security manager上,而通常是由Browser或Java Web Start plugin來啟動,而一般的applications是不需運作在security manager,當然你也可以使用Security Manager來執行,VM參數加入(-Djava.security.manager)。

而透過Browser開啟某個applet網頁,Browser是先到相對應網址去下載jar檔,然後再透果本機端的jvm來執行,但其實這樣的行為是不安全的,故browser在開啟applet時,將會啟動Security Manager模式,所造成的結果,即所有執行的jar檔裡沒有包含signer的,一律不給予執行,有的將會在詢問使用者是否可執行。(如下圖)


所以說,現在只要是要透過Browser開啟的jar檔(即使是自己寫的也是),都必須加入Certificate 。

步驟如下:
1. 申請 Certificate (windows檔案在..\Java\jdk1.6.0_43\bin\keytool.exe )
#keytool -genkey

Note:預設檔案將會被建立在user目錄下.keystore檔別名為 mykey,而此檔案包含用戶的public key,private key和Certificate。(windows:C:\Documents and Settings\UserName\.keystore)

2. 將Certificate加入到jar檔裡(windows檔案在..\Java\jdk1.6.0_43\bin\jarsigner.exe )
指令 : jarsigner [jar file] [alias name]
#jarsigner calculator.jar mykey

Reference :
1. Java Keytool的使用及申請憑證(以Microsoft Active Directory Certificate Services為例)
2. Java(含Applet)的安全機制(Security Manager)

沒有留言:

張貼留言