1. 程式人生 > >關於在applet中對jar包進行數字簽名問題.

關於在applet中對jar包進行數字簽名問題.

昨天真鬱悶....部門老大給我提出了一種難於想象的需求,通常我們從網站上下載檔案都有IE彈出框。
而他對我的要求是:不要彈出IE對話方塊,點按鈕後直接把檔案儲存到本地。
當時即時暈倒,都不知道是什麼客戶來的,居然有這種需求。-_-!
綜合考慮後,我決定用applet在客戶端執行一段程式碼。在客戶端裡用apache的開源專案httpClient模擬http請求(如輸入使用者名稱密碼登陸,瀏覽某個連線下載等)。由於要涉及到讀寫客戶端的磁碟檔案,所以在客戶端執行程式的時候必定會丟擲securityException。當時在這裡折騰了很久,老是把注意力裡集中在修改客戶端的安全策略檔案上。
事實上,有一種更好的辦法,那就是對applet程式所依賴的jar包進行數字簽名。
步驟如下:
開啟命令列視窗,定位到c:/
目錄下。
1keytool -genkey -keystore pepper.store -alias pepper
  這個命令用來產生一個密匙庫,執行完畢後應該在c:/中產生一個pepper.store的檔案,這裡的pepper是我自己的名字,你可以對它進行修改。另外在執行命令的時候還有提示你輸入密匙庫的密碼,這裡你一定要記住,否則後面要用的時候無法輸入。

2
keytool -export -keystore pepper.store -alias pepper -file pepper.cert
  這個命令用來產生簽名時所要用的證書,同樣這裡的pepper也可以換成你自己需要的名字。這個命令執行完後在c:/
中產生一個pepper.cert的檔案。

3
jarsigner -keystore pepper.store myapplet.jar pepper
  這個命令用上面產生的證書將我們的jar檔案進行了簽名。(myapplet.jar是我們專案中所依賴的jar包)

執行完以上三步之後,就已經完全可以了。而不需要像網上某些文章說的那樣還要修改客戶端的安全策略檔案。
最後在頁面上把applet標記加上
<applet code="Tasdf.class" CODEBASE = "." archive="myapplet.jar" width=30 height=15>
</applet>