




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第10章 Java安全技術(shù) 10.1 簡(jiǎn)介簡(jiǎn)介10.2 安全限制和許可安全限制和許可10.3 安全策略安全策略 (Policy)10.4 輔助工具輔助工具10.5 簽名及發(fā)布的例子簽名及發(fā)布的例子 習(xí)習(xí) 題題 10.1 簡(jiǎn)簡(jiǎn) 介介 Java是網(wǎng)絡(luò)上使用的編程語(yǔ)言,安全性是非常重要的,特別是Java平臺(tái)的安全以及Java技術(shù)部署帶來(lái)的安全問(wèn)題,尤其值得認(rèn)真考慮。Java中的安全包括兩個(gè)方面: (1) 提供安全且易于構(gòu)建的Java平臺(tái),能夠以安全模式運(yùn)行Java實(shí)現(xiàn)的應(yīng)用程序。 (2) 提供用于編程語(yǔ)言的安全工具和服務(wù),實(shí)現(xiàn)較廣泛的安全。 Java平臺(tái)提供的原始安全模型稱(chēng)為沙箱模型(JDK1.0)
2、,該模型提供較窄環(huán)境沙箱來(lái)運(yùn)行沒(méi)有得到信任的代碼。在沙箱模型中允許得到信任的本地代碼訪問(wèn)重要資源,而沒(méi)有經(jīng)過(guò)信任的遠(yuǎn)程代碼只能訪問(wèn)沙箱內(nèi)的很少部分資源。在JDK1.1中引入簽名Applet的概念,如果簽名的密鑰由接收Applet的客戶端認(rèn)為是可信任的,那么這個(gè)經(jīng)過(guò)正確數(shù)字簽名的Applet就可以當(dāng)作可信任本地代碼訪問(wèn)重要資源。這里簽名Applet和它的簽名以JAR格式傳送。隨著發(fā)展,在原來(lái)沙箱模型的基礎(chǔ)上引入新的安全體系,形成Java 2平臺(tái)安全模型如圖10.1所示。從圖10.1中可以看出,不管本地還是遠(yuǎn)程,簽名還是未簽名的代碼都統(tǒng)一到類(lèi)加載器處,咨詢安全策略,然后決定代碼能夠訪問(wèn)的資源。Ja
3、va 2安全平臺(tái)模型較之以前有了很大的改進(jìn),其主要特點(diǎn)如下:(1) 細(xì)粒度的訪問(wèn)控制。(2) 易于配置的安全策略。 (3) 易于擴(kuò)展的訪問(wèn)控制結(jié)構(gòu)。(4) 安全檢查擴(kuò)展到所有Java程序,包括應(yīng)用程序和Applet。圖10.1 Java 2平臺(tái)安全模型 JVM 有價(jià)值的資源(文件等)沙箱類(lèi)加載器安全策略本地或遠(yuǎn)程代碼(簽名的或者未簽名的)代碼以不同的許可運(yùn)行,沒(méi)有信任代碼內(nèi)置的概念 圖10.1中的多個(gè)沙箱模型可以看作有固定邊界的保護(hù)域。所謂保護(hù)域是指一個(gè)對(duì)象集合,這些對(duì)象可以由安全策略中定義的一條規(guī)則直接訪問(wèn)。保護(hù)域分為系統(tǒng)域和應(yīng)用程序域,受保護(hù)的資源,像文件系統(tǒng)、網(wǎng)絡(luò)設(shè)施以及屏幕和鍵盤(pán),只允
4、許系統(tǒng)域進(jìn)行訪問(wèn),而應(yīng)用程序域可以通過(guò)授權(quán)許可訪問(wèn)受保護(hù)資源。類(lèi)加載器將本地或遠(yuǎn)程代碼(Applet)載入的同時(shí),策略文件給出域的劃分和不同代碼對(duì)不同域訪問(wèn)權(quán)限的許可,載入的類(lèi)就根據(jù)域劃分和權(quán)限許可來(lái)訪問(wèn)相應(yīng)的域資源。圖10.2為運(yùn)行中類(lèi)到域再到許可的映射。圖10.2 類(lèi)到域再到許可的映射許可許可e.classd.classc.classb.classa.class運(yùn)行時(shí)的類(lèi)安全策略域B域A10.2 安全限制和許可安全限制和許可 本地的代碼類(lèi)訪問(wèn)系統(tǒng)資源時(shí)通常不會(huì)受到太大的限制,所以本章主要討論從服務(wù)器下載到客戶端的遠(yuǎn)程代碼Applet訪問(wèn)客戶端資源的情況。 Applet訪問(wèn)客戶端資源時(shí),由于
5、Java內(nèi)嵌的平臺(tái)安全性機(jī)制受到較大的限制,通常表現(xiàn)在無(wú)法讀寫(xiě)客戶端的文件,無(wú)法采集客戶端音頻。例如,當(dāng)Applet實(shí)現(xiàn)的是客戶端和服務(wù)器端進(jìn)行語(yǔ)音聊天時(shí),客戶端采集音頻就會(huì)受到限制,還有無(wú)法啟動(dòng)客戶端的Socket進(jìn)行傳輸?shù)?。下面看一個(gè)文件訪問(wèn)受到安全限制的例子。 【例10.1】 編寫(xiě)一個(gè)用來(lái)讀取客戶端文件的Applet,客戶端的文件路徑及文件名為E:a.txt,文件內(nèi)容為“你好,這是客戶端的測(cè)試文件!”,如圖10.3右部分所示。將讀出的文件內(nèi)容顯示在文本區(qū)域內(nèi),如果訪問(wèn)出錯(cuò),異常信息也顯示在文本區(qū)域內(nèi)。/程序文件名:AppletSecurity.javaimport java.awt.*;
6、import java.awt.event.*;import java.applet.*;import java.io.*;public class AppletSecurity extends Applet TextField fileNameField;TextArea fileArea;public void init() Label lblName=new Label(文件名:);Label lblContext = new Label(文件內(nèi)容:);fileNameField=new TextField(35);fileNameField.addActionListener(new
7、ActionListener()public void actionPerformed(ActionEvent e)loadFile(fileNameField.getText(););fileArea=new TextArea(10,35);add(lblName);add(fileNameField);add(lblContext);add(fileArea);public void loadFile(String fileName)tryBufferedReader reader=new BufferedReader(new FileReader(fileName);String con
8、text = new String();while(context = reader.readLine()!=null)fileArea.append(context + n);reader.close();catch(IOException ie)fileArea.append(IO錯(cuò)誤: + ie.getMessage();catch(SecurityException se) fileArea.append(安全訪問(wèn)錯(cuò)誤: + se.getMessage(); 程序編寫(xiě)后,編譯生成相應(yīng)的類(lèi),將類(lèi)嵌入HTML文件,從本地服務(wù)器加載,在載入Applet的界面上輸入文件名E:a.txt后按回車(chē)
9、鍵,在界面的文本區(qū)域內(nèi)并沒(méi)有顯示相應(yīng)a.txt的內(nèi)容,只是提示“access denied (java.io.FilePermission E:a.txt read)”,表示訪問(wèn)拒絕,如圖10.3左部分所示。圖10.3 Applet訪問(wèn)文件出錯(cuò)顯示和客戶端文件內(nèi)容 Java安全平臺(tái)中受到的種種安全限制,在Java中都提供了一一對(duì)應(yīng)的許可,例如對(duì)于讀、寫(xiě)文件的限制,Java提供了java.io.FilePermission來(lái)許可對(duì)客戶端文件的讀、寫(xiě)等操作。下面看一下這些許可類(lèi)。 許可類(lèi)代表對(duì)系統(tǒng)資源的訪問(wèn)權(quán)限。Java.security.permission類(lèi)是抽象類(lèi),劃分為多個(gè)子類(lèi)來(lái)代表特定的
10、訪問(wèn)。而不同的許可類(lèi)屬于不同的包,如FilePermission類(lèi)屬于java.io包,而SocketPermission類(lèi)屬于包。目前Java系統(tǒng)內(nèi)嵌的主要的許可類(lèi)如表10.1所示。表表10.1 Java內(nèi)嵌的許可類(lèi)內(nèi)嵌的許可類(lèi)名 稱(chēng) 描 述 全 稱(chēng) AllPermission 包含所有其它許可 java.security.AllPermission AudioPermission 代表對(duì)音頻系統(tǒng)資源的訪問(wèn)權(quán)限 javax.sound.sampled.AudioPermission AuthPermission 認(rèn)證許可 javax.security.auth.AuthPermission
11、AWTPermission 圖形界面資源許可,像使用剪貼板 java.awt.AWTPermission FilePermission 文件及目錄訪問(wèn)許可,像讀、寫(xiě) java.io.FilePermission NetPermission 各種網(wǎng)絡(luò)許可,像請(qǐng)求密碼認(rèn)證 .NetPermission PropertyPermission 訪問(wèn)系統(tǒng)屬性許可 java.util.PropertyPermission ReflectPermission 反射操作中禁止訪問(wèn)檢查許可 java.lang.reflect.ReflectPermission RuntimePermission 運(yùn)行時(shí)許可 j
12、ava.lang.RuntimePermission SecurityPermission 安全許可 java.security.SecurityPermission SerializablePermission 序列化許可 java.io.SerializablePermission SocketPermission 通過(guò) Socket 訪問(wèn)網(wǎng)絡(luò)的權(quán)限 .SocketPermission SQLPermission 調(diào)用 SetLogWriter 方法時(shí)許可 java.sql.SQLPermission 建立這些類(lèi)的對(duì)象就可以產(chǎn)生許可。例如,下面的代碼用來(lái)產(chǎn)生許可讀取/tmp目錄下名為Hel
13、lo的文件: filePerm = new java.io.FilePermission(/tmp/Hello,read);10.3 安安 全全 策策 略略 (Policy) 1. keystore條目條目 keystore用來(lái)存放密鑰對(duì)和相關(guān)數(shù)字證書(shū)。數(shù)字證書(shū)像X.509證書(shū)鏈用來(lái)鑒別相應(yīng)的公有密鑰。keytool工具用來(lái)創(chuàng)建和管理keystore。Policy配置文件中指定keystore,用來(lái)查找grant條目中簽名者的公有密鑰。如果存在指明簽名的grant條目,那么必須存在相應(yīng)的keystore。Keystore條目的格式為:keystore url,type 其中: (1) keys
14、tore是保留字,表示keystore條目。 (2) url指kestore的URL地址。 (3) type指keystore的類(lèi)型,用于定義keystore信息的存儲(chǔ)和數(shù)據(jù)格式,以及保護(hù)keystore中的私有密鑰和keystore完整性算法。通常情況下缺省類(lèi)型為“JKS”。 2. grant條目條目 policy對(duì)象中含有0到多條grant條目,指明遠(yuǎn)程代碼訪問(wèn)特定資源的相關(guān)許可。grant條目的格式如下:grant signedBy name codeBase url Permission permission-class-name target-name, action-name ;
15、Permission permission-class-name target-name, action-name ; 其中: (1) 每個(gè)grant條目為由name簽名且來(lái)源于codeBase的類(lèi)的訪問(wèn)提供一系列許可permission-class-name。 (2) grant為保留字,表示一條授權(quán)。 (3) signedBy為保留字,指明簽名者。 (4) name為數(shù)字簽名的作者名。 (5) codeBase為保留字,指明代碼來(lái)源。 (6) url為指定代碼的來(lái)源路徑。(7) Permission為保留期,指明許可名字及許可操作。(8) permission-class-name指許可類(lèi)
16、名。(9) target-name為受保護(hù)資源的名字,如文件目錄。(10) action-name 為對(duì)受保護(hù)資源進(jìn)行操作的權(quán)限。 例如,下面為兩條具體的grant條目,第一條表示允許lihua簽名的網(wǎng)址3:8080/下的訪問(wèn)代碼對(duì)temp目錄的所有文件有讀、寫(xiě)權(quán)限。第二條表示對(duì)本機(jī)java.home目錄的子目錄/lib/ext/下的所有代碼授予任意訪問(wèn)受保護(hù)資源的權(quán)限。grant signedBy lihua codeBase 3:8080/Permission java.io.FilePermission tmp/
17、*,read,wirte;grant codeBase file:$java.home/lib/ext/* permission java.security.AllPermission;10.4 輔輔 助助 工工 具具10.4.1 密鑰和證書(shū)管理工具密鑰和證書(shū)管理工具 keytool為密鑰和證書(shū)管理工具。它使得用戶可以管理他們自己的公共密鑰和私有密鑰對(duì)以及相關(guān)的證書(shū),用于在數(shù)字簽名中進(jìn)行數(shù)據(jù)完整性驗(yàn)證和身份驗(yàn)證。 keytool將密鑰對(duì)和證書(shū)存放在keystore中,keystore通常以文件的形式存在。創(chuàng)建keystore時(shí)需要為它設(shè)置密碼,還要為其中的私有密鑰設(shè)置密碼。命令提示符狀態(tài)下鍵入
18、不帶參數(shù)的命令keytool,可以看見(jiàn)它的用法,如圖10.4所示。圖10.4 keytool的用法 例如,在命令行提示符狀態(tài)下鍵入如下命令行,生成UseImage.keystore文件,密鑰和keystore的密碼均為xueliang,顯示結(jié)果如圖10.5所示。keytool -genkey -alias UseImage -keypass xueliang -keystore UseImage.keystore -storepass xueliang 其中: (1) -genkey:選項(xiàng),表示生成新的密鑰。 (2) -alias:別名選項(xiàng),表示緊跟的參數(shù)為別名具體值:UseImage。 (3
19、) -keypass:密鑰的密碼選項(xiàng),表示緊跟的參數(shù)為密鑰的密碼具體值:xueliang。 (4) -keystore:選項(xiàng),表示緊跟的參數(shù)為生成的keysotre文件名稱(chēng):UseImage.keystore。 (5) -storepass:keystore密碼的選項(xiàng),表示緊跟的參數(shù)為keystore文件的密碼具體值:xueliang。 圖10.5 生成文件UseImage.keystore 而要將公共密鑰導(dǎo)入證書(shū),則需要鍵入如下代碼,生成UseImage.cer證書(shū)文件,結(jié)果如圖10.6所示。 keytool -export -alias UseImage -file UseImage.ce
20、r -keystore UseImage.keystore -storepass xueliang圖10.6 生成證書(shū)文件UseImage.cer10.4.2 簽名和校驗(yàn)工具簽名和校驗(yàn)工具 jarsigner用來(lái)對(duì)JAR文件進(jìn)行數(shù)字簽名和校驗(yàn),這個(gè)過(guò)程基于keytool生成的keystore。在命令提示符狀態(tài)下鍵入jarsigner后按回車(chē)鍵,可以看見(jiàn)用法及選項(xiàng)說(shuō)明,如圖10.7所示。圖10.7 jarsigner工具的用法及選項(xiàng) 常用的簽名格式為: jarsigner -keystore keysotre-file -storepass keystore-password jar-file
21、alias 其中: (1) keystore-file為keytool生成的keystore文件。 (2) keystore-password為keystore的密碼。 (3) jar-file文件為檔案文件而且只能為檔案文件。例如:jar cvf UseImage.jar UseImage.class index_01.gif;/生成JAR文件jarsigner -keystore UseImage.keystore -storepass xueliang UseImage.jar UseImage/進(jìn)行簽名10.4.3 PolicyTool Policytool是圖形用戶界面工具,可幫助用
22、戶指定、生成、編輯一個(gè)安全策略。命令提示符狀態(tài)下鍵入PolicyTool后按回車(chē)鍵,就可調(diào)出此圖形界面。根據(jù)界面指示,可以實(shí)現(xiàn)一個(gè)policy文件的各種操作。下面來(lái)看一下系統(tǒng)默認(rèn)的policy文件,將D:j2sdk1.4.0_01jrelibsecurity目錄下的java.policy文件拷貝到E:_WorkJavasample目錄下,在命令行狀態(tài)運(yùn)行命令policytool,彈出“規(guī)則工具”對(duì)話框。單擊“文件”菜單中的“打開(kāi)”項(xiàng),選擇java.policy文件并打開(kāi),如圖10.8所示。從圖10.8中可以看出允許兩個(gè)CodeBase來(lái)源的遠(yuǎn)程代碼。圖10.8 使用policytool工具打開(kāi)
23、java.policy文件 選中第一個(gè)規(guī)則項(xiàng)目“CodeBase file:$java.home/lib/ext/*”,單擊“編輯規(guī)則項(xiàng)目”按鈕,彈出一個(gè)“規(guī)則項(xiàng)目”的窗口,如圖10.9所示,可以看見(jiàn)簽名項(xiàng)(SignedBy:)為空,而權(quán)限一欄中為 permission java.security.AllPermission;表示允許這個(gè)規(guī)則項(xiàng)目下的所有遠(yuǎn)程代碼對(duì)系統(tǒng)的所有資源進(jìn)行訪問(wèn)。圖10.9 全部授權(quán)的權(quán)限列表 選中第二個(gè)規(guī)則項(xiàng)目“CodeBase ”,單擊“編輯規(guī)則項(xiàng)目”按鈕,彈出如圖10.10所示窗口。權(quán)限列表中可以看出對(duì)普通屬性都有讀的權(quán)限。這是客戶端對(duì)所有遠(yuǎn)程代碼的默認(rèn)的安全限制
24、列表。圖10.10 所有遠(yuǎn)程代碼訪問(wèn)的默認(rèn)權(quán)限列表這個(gè)默認(rèn)的java.policy文件對(duì)應(yīng)的源文件如下:/ Standard extensions get all permissions by defaultgrant codeBase file:$java.home/lib/ext/* permission java.security.AllPermission;/ default permissions granted to all domainsgrant / Allows any thread to stop itself using the java.lang.Thread.stop
25、() / method that takes no argument. / Note that this permission is granted by default only to remain / backwards compatible. / It is strongly recommended that you either remove this permission / from this policy file or further restrict it to code sources / that you specify, because Thread.stop() is
26、 potentially unsafe./ See http:/ for more information.permission java.lang.RuntimePermission stopThread;/ allows anyone to listen on un-privileged portspermission .SocketPermission localhost:1024-, listen;/ standard properies that can be read by anyonepermission java.util.PropertyPermission java.ver
27、sion, read;permission java.util.PropertyPermission java.vendor, read;permission java.util.PropertyPermission java.vendor.url, read;permission java.util.PropertyPermission java.class.version, read;permission java.util.PropertyPermission , read;permission java.util.PropertyPermission os.version
28、, read;permission java.util.PropertyPermission os.arch, read;permission java.util.PropertyPermission file.separator, read;permission java.util.PropertyPermission path.separator, read;permission java.util.PropertyPermission line.separator, read;permission java.util.PropertyPermission java.specificati
29、on.version, read;permission java.util.PropertyPermission java.specification.vendor, read;permission java.util.PropertyPermission , read;permission java.util.PropertyPermission java.vm.specification.version, read;permission java.util.PropertyPermission java.vm.specification.ven
30、dor, read;permission java.util.PropertyPermission , read;permission java.util.PropertyPermission java.vm.version, read;permission java.util.PropertyPermission java.vm.vendor, read;permission java.util.PropertyPermission , read;10.5 簽名及發(fā)布的例子簽名及發(fā)布的例子10.5.1 步驟步驟 在命令提示符狀態(tài)下進(jìn)入路徑D:Apache Tomcat 4.0webappsROOTuser,所有操作都在服務(wù)器路徑下操作,也可以在普通路徑下操作,完成后將一系列文件配置到服務(wù)器端。本書(shū)作者使用前者,在user目
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 上海古董拍賣(mài)合同范例
- 保安公司使用合同范例
- 光伏清洗合同范例
- 三方合作合同范例
- 農(nóng)資肥料卸貨合同范例
- 養(yǎng)殖用工勞務(wù)合同范例
- 沖床租售維修合同范例
- 業(yè)主車(chē)輛出租合同范例
- 納米自潔材料行業(yè)深度調(diào)研及發(fā)展項(xiàng)目商業(yè)計(jì)劃書(shū)
- 網(wǎng)絡(luò)借貸催收服務(wù)企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力項(xiàng)目商業(yè)計(jì)劃書(shū)
- 校醫(yī)招聘筆試試題及答案
- 奧特曼過(guò)關(guān)測(cè)試題及答案
- 學(xué)生營(yíng)養(yǎng)與健康知識(shí)課件
- 2025年廣州體育職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性考試題庫(kù)及答案1套
- 蘇教版五年級(jí)數(shù)學(xué)下冊(cè)典型例題第五單元分?jǐn)?shù)的加法和減法·單元復(fù)習(xí)篇(原卷版+解析)
- DBJ-T13-483-2025 預(yù)拌流態(tài)固化土技術(shù)標(biāo)準(zhǔn)
- 技術(shù)文件核查審核和審批制度
- 甘肅省歷年中考作文題(2003-2024)
- 防汛安全培訓(xùn)課件
- 關(guān)于臨期商品的處理管理辦法
- 新能源全面入市是構(gòu)建新型電力系統(tǒng)的重要支撐-136號(hào)文政策解讀
評(píng)論
0/150
提交評(píng)論