一. applet中的數(shù)字簽名 1
1 前言 2
2 計算機環(huán)境 2
3 客戶端需求 2
4 編譯 2
5 打包 2
6 調(diào)用applet的HTML頁面 2
7 準(zhǔn)備簽名代碼 3
8 簽名代碼 4
9 運行Applet 4
二. 用jbuilder2005對applet進行數(shù)字簽名 1
I. 數(shù)字證書的生成 1
II. 打包 2
III. 指定資源文件 3
IV. 簽名Applet的目標(biāo)JAR文件 4
V. 引用Applet包文件 6
三. 解決applet中的網(wǎng)絡(luò)訪問問題
1 前言
我們知道Java Applet程序在運行的時候受到安全限制,例如不能夠訪問本地文件系統(tǒng),不能夠隨意訪問網(wǎng)絡(luò).,不能訪問數(shù)據(jù)庫。下面將介紹如何對代碼做數(shù)字簽名,讓客戶在運行時選擇是否信任你的簽名,使開發(fā)的程序具有更多的權(quán)限。在這里不打算購買證書。
2 計算機環(huán)境
Windows2000 professional sp3
SUN JDK1.4.0
IE6.0
JAVA_HOME、PATH、CLASSPATH等環(huán)境變量均已設(shè)置
3 客戶端需求
客戶端瀏覽器需要安裝Java插件,這里的Java插件是安裝JDK時一起安裝的。如果客戶端不需要做Java開發(fā),可以去下載SUN的網(wǎng)站下載JRE到客戶端安裝。
4 編譯
在與softphone目錄的父目錄編譯這個Applet
javac softphone *.java
5 打包
jar -cvf softPhone.jar softphone
用jbuilder開發(fā)工具自帶的打包功能
6 調(diào)用applet的HTML頁面
<applet
archive="softPhone.jar"
codebase = "."
code = "softphone.gui.class"
name = "TestApplet"
width = "660"
height = "110"
hspace = "0"
vspace = "0"
align = "middle"
>
</applet>
7 準(zhǔn)備簽名代碼
首先用keytool命令產(chǎn)生用來簽名的key。下面這個命令產(chǎn)生一個叫"mykey"的key,它存儲在我們新建的叫"mystore"的keystore中。
keytool -genkey -alias mykey -keystore mystore
接下來它會問一些問題包括keystore的密碼,key的密碼等,如下所示:
輸入keystore密碼: storepass
您的名字與姓氏是什么?
[Unknown]: liu
您的組織單位名稱是什么?
[Unknown]: XX公司
您的組織名稱是什么?
[Unknown]: XX公司
您所在的城市或區(qū)域名稱是什么?
[Unknown]: aa
您所在的州或省份名稱是什么?
[Unknown]: sh
該單位的兩字母國家代碼是什么
[Unknown]: CN
CN=AYellow, OU=我的組織單位, O=我的組織, L=北京, ST=北京, C=CN 正確嗎?
[否]: Y
輸入<mykey>的主密碼
(如果和 keystore 密碼相同,按回車): keypass
完成后會在當(dāng)前目錄下生成一個叫mystore的文件,這個文件包含了我們的key。
8 簽名代碼
用jarsigner命令簽名我們的代碼test.jar(需要輸入keystore和key的密碼):
jarsigner -keystore mystore test.jar mykey
Enter Passphrase for keystore: storepass
Enter key password for mykey: keypass
9 運行Applet
運行Applet,在Applet加載的時候會出現(xiàn)一個對話框,說該Applet由不可信任的發(fā)行者簽名并宣稱代碼是安全的,是不是要對Applet授權(quán)。選擇"授權(quán)于會話",就可以進行軟電話操作.
二. 用jbuilder2005對applet進行數(shù)字簽名 1
I. 數(shù)字證書的生成
在JBuilder的Applet打包向?qū)е袃H需要一個數(shù)字證書,向?qū)樽罱K的JAR包生成消息摘要、消息驗證碼并簽名。通過JDK自帶的Keytool工具可以為生成一個數(shù)據(jù)證書,這個工具位于JDK的bin目錄下。
打開DOS命名窗口,定位到JBuilder 2005下自帶的JDK的bin目錄下,執(zhí)行下面的Keytool命名生成一張自己的證書:
C:\Borland\JBuilder2005\jdk1.4\bin>keytool -genkey -alias chenxhCA - keyalg RSA -keystore superCALib -validity 3650
命令窗口將要求你輸入一些個人信息
這里我們使用keytool工具生成了一個名為chenxhCA的證書,它存放到superCALib證書庫中,有效期為10年,使用的加密算法上RSA。證書庫superCALib的訪問密碼是123456,而chenxhCA證書條目的訪問密碼是123123。在輸入作為發(fā)送者身份標(biāo)識的信息后就會在當(dāng)前目標(biāo),即C:\Borland\JBuilder2005\jdk1.4\bin下生成一個名為superCALib的證書庫文件。
keytool參數(shù)較多,使用也比較復(fù)雜,詳細使用說明,請參見Sun網(wǎng)站的幫助文檔:
一般情況下你還需要將該證書發(fā)給權(quán)威的CA簽名,這個證書才會被視為合法的證書,當(dāng)然你也可以模擬創(chuàng)建一個CA證書,用這個CA證書為我們將用于簽發(fā)Applet的chenxhCA證書簽名,為了簡單起見我們忽略這一步。
II. 打包
現(xiàn)在已經(jīng)萬事俱備了,我們可以開始利用JBuilder的打包向?qū)pplet所以文件打包并簽名的過程。
1) File->New...->Archive,在Archive頁中雙擊Applet JAR圖標(biāo)啟動Applet打包向?qū)А?/div>
2) 在向?qū)У?步中指定Applet JAR的名字和保存到目標(biāo)文件,
為了加速網(wǎng)絡(luò)下載速度,我們勾選上Compress the contents of the archive選項,壓縮JAR文件,減小文件的體積。Always create archive when building the project選項使用每次編輯工程時都重新創(chuàng)建Applet JAR包。點擊Next到下一步。
III. 指定資源文件
指定JAR文件中所需包含的資源文件
由于TypeTrainApplet程序引用了3張圖片,所以JAR文件除包含TypeTrainApplet.class程序文件外,還需要將用于按鈕圖標(biāo)的文件選擇進來
按Next到下一步。
注意:
當(dāng)你指定game.TypeTrainApplet.class,start.gif,pause.gif,stop.gif,hit.wav時,打成的Applet JAR包將不能正確運行,那些和TypeTrainApplet類位于同一程序文件的事件監(jiān)聽器類將被排除在外,所以需要通過game/*.*來打包。
IV. 簽名Applet的目標(biāo)JAR文件
由于向?qū)У?~6步,我們不需要作特別的設(shè)置,所以一直按Next到第7步。
在這一步里,我們用上一小節(jié)中生成的數(shù)字證書簽名Applet的目標(biāo)JAR文件
稤igitally sign this archive選項在默認(rèn)的情況下是未選中的,首先勾選該選項
點擊稫eystore后的…按鈕,選擇我們剛才在C:\Borland\JBuilder2005\jdk1.4\bin目錄下所生成的superCALib證書庫文件。
在稫eystore password中輸入123456,即證書庫的密碼。
點擊稟lias后的…按鈕,由于我們在superCALib證書庫中僅有一個chenxhca證書,所以在彈出的Select Alias對話框的Available Alias列表中僅有一個chenxhca選項,選擇chenxhca證書。
在稟lias password中輸入123123,即chenxhca證書的私鑰密碼。
在稴tore type中輸入JKS,由于Keytool工具的默認(rèn)證書庫類型是JKS,所以superCALib的類型為JKS。
在設(shè)置完以后的信息后,按Finish結(jié)束向?qū)В诠こ檀案竦馁Y源樹中將出現(xiàn)一個TypeTrainJAR的節(jié)點。右擊這個節(jié)點,在彈出的菜單中選擇Rebuild,JBuilder將創(chuàng)建Applet的JAR包,并用chenxhca證書簽名。
Rebuild完成后,工程窗格的Applet JAR節(jié)點就可以展開了,展開這個節(jié)點,我們發(fā)現(xiàn)目標(biāo)JAR文件中除了資源文件以外,在META-INF文件夾下還有3個文件
META-INF文件夾下的3個文件是和數(shù)字簽名有關(guān)的文件,說明如下:
MANIFEST.MF:這個 manifest 文件定義了與擴展和包相關(guān)的數(shù)據(jù)。
MONITOR.SF:這是 JAR 文件的簽名文件,文件名標(biāo)識了簽名者。
MONITOR.DSA:與簽名文件相關(guān)聯(lián)的簽名程序塊文件,它存儲了用于簽名 JAR 文件的公共簽名。
V. 引用Applet包文件
我們現(xiàn)在來更改TypeTrainApplet.html中<applet>的屬性使其通過JAR來引用Applet程序。這個過程很簡要,打開TypeTrainApplet.html文件,切換到Source視圖頁中,將光標(biāo)定位在<applet>標(biāo)簽中。窗口右邊出現(xiàn)<applet>標(biāo)簽的屬性輸入編輯器,在archive中輸入game.JAR,按回車
JBuilder為<applet>標(biāo)簽添加archive的屬性。由于game.JAR文件位于工程根目錄下,而TypeTrainApplet.html文件位于工程目錄的classes子文件夾下,所以需要將TypeTrainApplet.html拷貝到工程根目錄下,這樣archiver="game.JAR "的屬性聲明才是正確的,因為在尋找程序資源時,是以TypeTrainApplet.html所在目錄為相對路徑的。
保存后,到工程目錄下雙擊TypeTrainApplet.html文件,IE檢測到網(wǎng)頁中包含了經(jīng)過簽名的Applet程序,彈出一個安全警告的對話框
由于我們的證書沒有經(jīng)過權(quán)威機構(gòu)的簽名認(rèn)證,所以對話框提示"此安全證書是由不可信的公司簽發(fā)的"信息。需要指出的是游覽器的JRE版本不同,彈出的警告對話框并不相同,上圖是JRE版本為1.5.0時的警告對話框。
可以通過點擊"更多詳細信息"按鈕查看證書的信息
點選"簽發(fā)人"項,將可以看到證書執(zhí)有者的個人信息。關(guān)閉這個對話框,回到 "警告-安全"對話框中,點擊"是"接受這個簽名的Applet。IE就對這個Applet開放了安全權(quán)限,不再受沙盒模型的限制了。
彈出因網(wǎng)絡(luò)斷開,或啟用防火墻而出現(xiàn)的對話框.
通過加強數(shù)字簽名解決。
解決問題的方法:
在C:\soft\jdk\jre\lib\security\java.policy中加入
grant {
permission java.net.SocketPermission "*", "connect,accept,resolve";
permission java.net.SocketPermission "*:1024-65535", "listen,accept,connect";
};
</script>