一. applet中的數(shù)字簽名 1
1 前言 2
2 計算機環(huán)境 2
3 客戶端需求 2
4 編譯 2
5 打包 2
6 調(diào)用applet的HTML頁面 2
7 準備簽名代碼 3
8 簽名代碼 4
9 運行Applet 4
1 前言 2
2 計算機環(huán)境 2
3 客戶端需求 2
4 編譯 2
5 打包 2
6 調(diào)用applet的HTML頁面 2
7 準備簽名代碼 3
8 簽名代碼 4
9 運行Applet 4
二. 用jbuilder2005對applet進行數(shù)字簽名 1
I. 數(shù)字證書的生成 1
II. 打包 2
III. 指定資源文件 3
IV. 簽名Applet的目標JAR文件 4
V. 引用Applet包文件 6
I. 數(shù)字證書的生成 1
II. 打包 2
III. 指定資源文件 3
IV. 簽名Applet的目標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è)置
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到客戶端安裝。
客戶端瀏覽器需要安裝Java插件,這里的Java插件是安裝JDK時一起安裝的。如果客戶端不需要做Java開發(fā),可以去下載SUN的網(wǎng)站下載JRE到客戶端安裝。
4 編譯
在與softphone目錄的父目錄編譯這個Applet
javac softphone *.java
在與softphone目錄的父目錄編譯這個Applet
javac softphone *.java
5 打包
jar -cvf softPhone.jar softphone
用jbuilder開發(fā)工具自帶的打包功能
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>
<applet
archive="softPhone.jar"
codebase = "."
code = "softphone.gui.class"
name = "TestApplet"
width = "660"
height = "110"
hspace = "0"
vspace = "0"
align = "middle"
>
</applet>
7 準備簽名代碼
首先用keytool命令產(chǎn)生用來簽名的key。下面這個命令產(chǎn)生一個叫"mykey"的key,它存儲在我們新建的叫"mystore"的keystore中。
keytool -genkey -alias mykey -keystore mystore
首先用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
完成后會在當前目錄下生成一個叫mystore的文件,這個文件包含了我們的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
完成后會在當前目錄下生成一個叫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
用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)于會話",就可以進行軟電話操作.
運行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目錄下。
在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ā)送者身份標識的信息后就會在當前目標,即C:\Borland\JBuilder2005\jdk1.4\bin下生成一個名為superCALib的證書庫文件。
這里我們使用keytool工具生成了一個名為chenxhCA的證書,它存放到superCALib證書庫中,有效期為10年,使用的加密算法上RSA。證書庫superCALib的訪問密碼是123456,而chenxhCA證書條目的訪問密碼是123123。在輸入作為發(fā)送者身份標識的信息后就會在當前目標,即C:\Borland\JBuilder2005\jdk1.4\bin下生成一個名為superCALib的證書庫文件。
keytool參數(shù)較多,使用也比較復(fù)雜,詳細使用說明,請參見Sun網(wǎng)站的幫助文檔:
一般情況下你還需要將該證書發(fā)給權(quán)威的CA簽名,這個證書才會被視為合法的證書,當然你也可以模擬創(chuàng)建一個CA證書,用這個CA證書為我們將用于簽發(fā)Applet的chenxhCA證書簽名,為了簡單起見我們忽略這一步。
II. 打包
現(xiàn)在已經(jīng)萬事俱備了,我們可以開始利用JBuilder的打包向?qū)pplet所以文件打包并簽名的過程。
現(xiàn)在已經(jīng)萬事俱備了,我們可以開始利用JBuilder的打包向?qū)pplet所以文件打包并簽名的過程。
1) File->New...->Archive,在Archive頁中雙擊Applet JAR圖標啟動Applet打包向?qū)А?/div>
V. 引用Applet包文件
我們現(xiàn)在來更改TypeTrainApplet.html中<applet>的屬性使其通過JAR來引用Applet程序。這個過程很簡要,打開TypeTrainApplet.html文件,切換到Source視圖頁中,將光標定位在<applet>標簽中。窗口右邊出現(xiàn)<applet>標簽的屬性輸入編輯器,在archive中輸入game.JAR,按回車
2) 在向?qū)У?步中指定Applet JAR的名字和保存到目標文件,
為了加速網(wǎng)絡(luò)下載速度,我們勾選上Compress the contents of the archive選項,壓縮JAR文件,減小文件的體積。Always create archive when building the project選項使用每次編輯工程時都重新創(chuàng)建Applet JAR包。點擊Next到下一步。
為了加速網(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程序文件外,還需要將用于按鈕圖標的文件選擇進來
按Next到下一步。
指定JAR文件中所需包含的資源文件
由于TypeTrainApplet程序引用了3張圖片,所以JAR文件除包含TypeTrainApplet.class程序文件外,還需要將用于按鈕圖標的文件選擇進來
按Next到下一步。
注意:
當你指定game.TypeTrainApplet.class,start.gif,pause.gif,stop.gif,hit.wav時,打成的Applet JAR包將不能正確運行,那些和TypeTrainApplet類位于同一程序文件的事件監(jiān)聽器類將被排除在外,所以需要通過game/*.*來打包。
IV. 簽名Applet的目標JAR文件
由于向?qū)У?~6步,我們不需要作特別的設(shè)置,所以一直按Next到第7步。
由于向?qū)У?~6步,我們不需要作特別的設(shè)置,所以一直按Next到第7步。
在這一步里,我們用上一小節(jié)中生成的數(shù)字證書簽名Applet的目標JAR文件
稤igitally sign this archive選項在默認的情況下是未選中的,首先勾選該選項
稤igitally sign this archive選項在默認的情況下是未選中的,首先勾選該選項
點擊稫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工具的默認證書庫類型是JKS,所以superCALib的類型為JKS。
在設(shè)置完以后的信息后,按Finish結(jié)束向?qū)В诠こ檀案竦馁Y源樹中將出現(xiàn)一個TypeTrainJAR的節(jié)點。右擊這個節(jié)點,在彈出的菜單中選擇Rebuild,JBuilder將創(chuàng)建Applet的JAR包,并用chenxhca證書簽名。
在設(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)目標JAR文件中除了資源文件以外,在META-INF文件夾下還有3個文件
META-INF文件夾下的3個文件是和數(shù)字簽名有關(guān)的文件,說明如下:
META-INF文件夾下的3個文件是和數(shù)字簽名有關(guān)的文件,說明如下:
MANIFEST.MF:這個 manifest 文件定義了與擴展和包相關(guān)的數(shù)據(jù)。
MONITOR.SF:這是 JAR 文件的簽名文件,文件名標識了簽名者。
MONITOR.DSA:與簽名文件相關(guān)聯(lián)的簽名程序塊文件,它存儲了用于簽名 JAR 文件的公共簽名。
V. 引用Applet包文件
我們現(xiàn)在來更改TypeTrainApplet.html中<applet>的屬性使其通過JAR來引用Applet程序。這個過程很簡要,打開TypeTrainApplet.html文件,切換到Source視圖頁中,將光標定位在<applet>標簽中。窗口右邊出現(xiàn)<applet>標簽的屬性輸入編輯器,在archive中輸入game.JAR,按回車
JBuilder為<applet>標簽添加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)的簽名認證,所以對話框提示"此安全證書是由不可信的公司簽發(fā)的"信息。需要指出的是游覽器的JRE版本不同,彈出的警告對話框并不相同,上圖是JRE版本為1.5.0時的警告對話框。
可以通過點擊"更多詳細信息"按鈕查看證書的信息
點選"簽發(fā)人"項,將可以看到證書執(zhí)有者的個人信息。關(guān)閉這個對話框,回到 "警告-安全"對話框中,點擊"是"接受這個簽名的Applet。IE就對這個Applet開放了安全權(quán)限,不再受沙盒模型的限制了。
彈出因網(wǎng)絡(luò)斷開,或啟用防火墻而出現(xiàn)的對話框.
點選"簽發(fā)人"項,將可以看到證書執(zhí)有者的個人信息。關(guān)閉這個對話框,回到 "警告-安全"對話框中,點擊"是"接受這個簽名的Applet。IE就對這個Applet開放了安全權(quá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";
};
在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>
只有注冊用戶登錄后才能發(fā)表評論。 | ||
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
|
||
相關(guān)文章:
|
||