HelloWorld 善戰(zhàn)者,求之于勢,不責于人;故能擇人而任勢。

          知止而后有定,定而后能靜,靜而后能安,安而后能慮,慮而后能得。物有本末,事有終始。知所先后,則近道矣。

            BlogJava :: 首頁 ::  :: 聯(lián)系 ::  :: 管理 ::
            167 隨筆 :: 1 文章 :: 40 評論 :: 0 Trackbacks
          一. 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
          二. 用jbuilder2005對applet進行數(shù)字簽名 1
          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è)置
          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 準備簽名代碼
          首先用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。
          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ā)送者身份標識的信息后就會在當前目標,即C:\Borland\JBuilder2005\jdk1.4\bin下生成一個名為superCALib的證書庫文件。
            keytool參數(shù)較多,使用也比較復(fù)雜,詳細使用說明,請參見Sun網(wǎng)站的幫助文檔:
          http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/keytool.html。
            一般情況下你還需要將該證書發(fā)給權(quán)威的CA簽名,這個證書才會被視為合法的證書,當然你也可以模擬創(chuàng)建一個CA證書,用這個CA證書為我們將用于簽發(fā)Applet的chenxhCA證書簽名,為了簡單起見我們忽略這一步。
          II. 打包
          現(xiàn)在已經(jīng)萬事俱備了,我們可以開始利用JBuilder的打包向?qū)pplet所以文件打包并簽名的過程。
            1) File->New...->Archive,在Archive頁中雙擊Applet JAR圖標啟動Applet打包向?qū)А?/div>
            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到下一步。
          III. 指定資源文件
          指定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步。
            在這一步里,我們用上一小節(jié)中生成的數(shù)字證書簽名Applet的目標JAR文件
          稤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ū)?,在工程窗格的資源樹中將出現(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)的文件,說明如下:
            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)的對話框.  
          通過加強數(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>

          posted on 2007-08-13 18:54 helloworld2008 閱讀(843) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 临汾市| 井冈山市| 修武县| 澄迈县| 阳泉市| 英山县| 资兴市| 日喀则市| 玉林市| 岑溪市| 十堰市| 临邑县| 隆化县| 五家渠市| 秭归县| 正蓝旗| 松潘县| 北宁市| 个旧市| 公主岭市| 华蓥市| 澄城县| 平湖市| 平舆县| 宝坻区| 太和县| 巴东县| 马尔康县| 云林县| 兰州市| 类乌齐县| 板桥市| 紫阳县| 海晏县| 县级市| 花莲县| 资中县| 金寨县| 盐池县| 济源市| 武川县|