大學JAVA實用教程--第10章Java安全技術(shù)_第1頁
大學JAVA實用教程--第10章Java安全技術(shù)_第2頁
大學JAVA實用教程--第10章Java安全技術(shù)_第3頁
大學JAVA實用教程--第10章Java安全技術(shù)_第4頁
大學JAVA實用教程--第10章Java安全技術(shù)_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第10章 Java安全技術(shù) 10.1 簡介簡介10.2 安全限制和許可安全限制和許可10.3 安全策略安全策略 (Policy)10.4 輔助工具輔助工具10.5 簽名及發(fā)布的例子簽名及發(fā)布的例子 習習 題題 10.1 簡簡 介介 Java是網(wǎng)絡上使用的編程語言,安全性是非常重要的,特別是Java平臺的安全以及Java技術(shù)部署帶來的安全問題,尤其值得認真考慮。Java中的安全包括兩個方面: (1) 提供安全且易于構(gòu)建的Java平臺,能夠以安全模式運行Java實現(xiàn)的應用程序。 (2) 提供用于編程語言的安全工具和服務,實現(xiàn)較廣泛的安全。 Java平臺提供的原始安全模型稱為沙箱模型(JDK1.0)

2、,該模型提供較窄環(huán)境沙箱來運行沒有得到信任的代碼。在沙箱模型中允許得到信任的本地代碼訪問重要資源,而沒有經(jīng)過信任的遠程代碼只能訪問沙箱內(nèi)的很少部分資源。在JDK1.1中引入簽名Applet的概念,如果簽名的密鑰由接收Applet的客戶端認為是可信任的,那么這個經(jīng)過正確數(shù)字簽名的Applet就可以當作可信任本地代碼訪問重要資源。這里簽名Applet和它的簽名以JAR格式傳送。隨著發(fā)展,在原來沙箱模型的基礎(chǔ)上引入新的安全體系,形成Java 2平臺安全模型如圖10.1所示。從圖10.1中可以看出,不管本地還是遠程,簽名還是未簽名的代碼都統(tǒng)一到類加載器處,咨詢安全策略,然后決定代碼能夠訪問的資源。Ja

3、va 2安全平臺模型較之以前有了很大的改進,其主要特點如下:(1) 細粒度的訪問控制。(2) 易于配置的安全策略。 (3) 易于擴展的訪問控制結(jié)構(gòu)。(4) 安全檢查擴展到所有Java程序,包括應用程序和Applet。圖10.1 Java 2平臺安全模型 JVM 有價值的資源(文件等)沙箱類加載器安全策略本地或遠程代碼(簽名的或者未簽名的)代碼以不同的許可運行,沒有信任代碼內(nèi)置的概念 圖10.1中的多個沙箱模型可以看作有固定邊界的保護域。所謂保護域是指一個對象集合,這些對象可以由安全策略中定義的一條規(guī)則直接訪問。保護域分為系統(tǒng)域和應用程序域,受保護的資源,像文件系統(tǒng)、網(wǎng)絡設(shè)施以及屏幕和鍵盤,只允

4、許系統(tǒng)域進行訪問,而應用程序域可以通過授權(quán)許可訪問受保護資源。類加載器將本地或遠程代碼(Applet)載入的同時,策略文件給出域的劃分和不同代碼對不同域訪問權(quán)限的許可,載入的類就根據(jù)域劃分和權(quán)限許可來訪問相應的域資源。圖10.2為運行中類到域再到許可的映射。圖10.2 類到域再到許可的映射許可許可e.classd.classc.classb.classa.class運行時的類安全策略域B域A10.2 安全限制和許可安全限制和許可 本地的代碼類訪問系統(tǒng)資源時通常不會受到太大的限制,所以本章主要討論從服務器下載到客戶端的遠程代碼Applet訪問客戶端資源的情況。 Applet訪問客戶端資源時,由于

5、Java內(nèi)嵌的平臺安全性機制受到較大的限制,通常表現(xiàn)在無法讀寫客戶端的文件,無法采集客戶端音頻。例如,當Applet實現(xiàn)的是客戶端和服務器端進行語音聊天時,客戶端采集音頻就會受到限制,還有無法啟動客戶端的Socket進行傳輸?shù)?。下面看一個文件訪問受到安全限制的例子。 【例10.1】 編寫一個用來讀取客戶端文件的Applet,客戶端的文件路徑及文件名為E:a.txt,文件內(nèi)容為“你好,這是客戶端的測試文件!”,如圖10.3右部分所示。將讀出的文件內(nèi)容顯示在文本區(qū)域內(nèi),如果訪問出錯,異常信息也顯示在文本區(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錯誤: + ie.getMessage();catch(SecurityException se) fileArea.append(安全訪問錯誤: + se.getMessage(); 程序編寫后,編譯生成相應的類,將類嵌入HTML文件,從本地服務器加載,在載入Applet的界面上輸入文件名E:a.txt后按回車

9、鍵,在界面的文本區(qū)域內(nèi)并沒有顯示相應a.txt的內(nèi)容,只是提示“access denied (java.io.FilePermission E:a.txt read)”,表示訪問拒絕,如圖10.3左部分所示。圖10.3 Applet訪問文件出錯顯示和客戶端文件內(nèi)容 Java安全平臺中受到的種種安全限制,在Java中都提供了一一對應的許可,例如對于讀、寫文件的限制,Java提供了java.io.FilePermission來許可對客戶端文件的讀、寫等操作。下面看一下這些許可類。 許可類代表對系統(tǒng)資源的訪問權(quán)限。Java.security.permission類是抽象類,劃分為多個子類來代表特定的

10、訪問。而不同的許可類屬于不同的包,如FilePermission類屬于java.io包,而SocketPermission類屬于包。目前Java系統(tǒng)內(nèi)嵌的主要的許可類如表10.1所示。表表10.1 Java內(nèi)嵌的許可類內(nèi)嵌的許可類名 稱 描 述 全 稱 AllPermission 包含所有其它許可 java.security.AllPermission AudioPermission 代表對音頻系統(tǒng)資源的訪問權(quán)限 javax.sound.sampled.AudioPermission AuthPermission 認證許可 javax.security.auth.AuthPermission

11、AWTPermission 圖形界面資源許可,像使用剪貼板 java.awt.AWTPermission FilePermission 文件及目錄訪問許可,像讀、寫 java.io.FilePermission NetPermission 各種網(wǎng)絡許可,像請求密碼認證 .NetPermission PropertyPermission 訪問系統(tǒng)屬性許可 java.util.PropertyPermission ReflectPermission 反射操作中禁止訪問檢查許可 java.lang.reflect.ReflectPermission RuntimePermission 運行時許可 j

12、ava.lang.RuntimePermission SecurityPermission 安全許可 java.security.SecurityPermission SerializablePermission 序列化許可 java.io.SerializablePermission SocketPermission 通過 Socket 訪問網(wǎng)絡的權(quán)限 .SocketPermission SQLPermission 調(diào)用 SetLogWriter 方法時許可 java.sql.SQLPermission 建立這些類的對象就可以產(chǎn)生許可。例如,下面的代碼用來產(chǎn)生許可讀取/tmp目錄下名為Hel

13、lo的文件: filePerm = new java.io.FilePermission(/tmp/Hello,read);10.3 安安 全全 策策 略略 (Policy) 1. keystore條目條目 keystore用來存放密鑰對和相關(guān)數(shù)字證書。數(shù)字證書像X.509證書鏈用來鑒別相應的公有密鑰。keytool工具用來創(chuàng)建和管理keystore。Policy配置文件中指定keystore,用來查找grant條目中簽名者的公有密鑰。如果存在指明簽名的grant條目,那么必須存在相應的keystore。Keystore條目的格式為:keystore url,type 其中: (1) keys

14、tore是保留字,表示keystore條目。 (2) url指kestore的URL地址。 (3) type指keystore的類型,用于定義keystore信息的存儲和數(shù)據(jù)格式,以及保護keystore中的私有密鑰和keystore完整性算法。通常情況下缺省類型為“JKS”。 2. grant條目條目 policy對象中含有0到多條grant條目,指明遠程代碼訪問特定資源的相關(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) 每個grant條目為由name簽名且來源于codeBase的類的訪問提供一系列許可permission-class-name。 (2) grant為保留字,表示一條授權(quán)。 (3) signedBy為保留字,指明簽名者。 (4) name為數(shù)字簽名的作者名。 (5) codeBase為保留字,指明代碼來源。 (6) url為指定代碼的來源路徑。(7) Permission為保留期,指明許可名字及許可操作。(8) permission-class-name指許可類

16、名。(9) target-name為受保護資源的名字,如文件目錄。(10) action-name 為對受保護資源進行操作的權(quán)限。 例如,下面為兩條具體的grant條目,第一條表示允許lihua簽名的網(wǎng)址3:8080/下的訪問代碼對temp目錄的所有文件有讀、寫權(quán)限。第二條表示對本機java.home目錄的子目錄/lib/ext/下的所有代碼授予任意訪問受保護資源的權(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 密鑰和證書管理工具密鑰和證書管理工具 keytool為密鑰和證書管理工具。它使得用戶可以管理他們自己的公共密鑰和私有密鑰對以及相關(guān)的證書,用于在數(shù)字簽名中進行數(shù)據(jù)完整性驗證和身份驗證。 keytool將密鑰對和證書存放在keystore中,keystore通常以文件的形式存在。創(chuàng)建keystore時需要為它設(shè)置密碼,還要為其中的私有密鑰設(shè)置密碼。命令提示符狀態(tài)下鍵入

18、不帶參數(shù)的命令keytool,可以看見它的用法,如圖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:選項,表示生成新的密鑰。 (2) -alias:別名選項,表示緊跟的參數(shù)為別名具體值:UseImage。 (3

19、) -keypass:密鑰的密碼選項,表示緊跟的參數(shù)為密鑰的密碼具體值:xueliang。 (4) -keystore:選項,表示緊跟的參數(shù)為生成的keysotre文件名稱:UseImage.keystore。 (5) -storepass:keystore密碼的選項,表示緊跟的參數(shù)為keystore文件的密碼具體值:xueliang。 圖10.5 生成文件UseImage.keystore 而要將公共密鑰導入證書,則需要鍵入如下代碼,生成UseImage.cer證書文件,結(jié)果如圖10.6所示。 keytool -export -alias UseImage -file UseImage.ce

20、r -keystore UseImage.keystore -storepass xueliang圖10.6 生成證書文件UseImage.cer10.4.2 簽名和校驗工具簽名和校驗工具 jarsigner用來對JAR文件進行數(shù)字簽名和校驗,這個過程基于keytool生成的keystore。在命令提示符狀態(tài)下鍵入jarsigner后按回車鍵,可以看見用法及選項說明,如圖10.7所示。圖10.7 jarsigner工具的用法及選項 常用的簽名格式為: 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/進行簽名10.4.3 PolicyTool Policytool是圖形用戶界面工具,可幫助用

22、戶指定、生成、編輯一個安全策略。命令提示符狀態(tài)下鍵入PolicyTool后按回車鍵,就可調(diào)出此圖形界面。根據(jù)界面指示,可以實現(xiàn)一個policy文件的各種操作。下面來看一下系統(tǒng)默認的policy文件,將D:j2sdk1.4.0_01jrelibsecurity目錄下的java.policy文件拷貝到E:_WorkJavasample目錄下,在命令行狀態(tài)運行命令policytool,彈出“規(guī)則工具”對話框。單擊“文件”菜單中的“打開”項,選擇java.policy文件并打開,如圖10.8所示。從圖10.8中可以看出允許兩個CodeBase來源的遠程代碼。圖10.8 使用policytool工具打開

23、java.policy文件 選中第一個規(guī)則項目“CodeBase file:$java.home/lib/ext/*”,單擊“編輯規(guī)則項目”按鈕,彈出一個“規(guī)則項目”的窗口,如圖10.9所示,可以看見簽名項(SignedBy:)為空,而權(quán)限一欄中為 permission java.security.AllPermission;表示允許這個規(guī)則項目下的所有遠程代碼對系統(tǒng)的所有資源進行訪問。圖10.9 全部授權(quán)的權(quán)限列表 選中第二個規(guī)則項目“CodeBase ”,單擊“編輯規(guī)則項目”按鈕,彈出如圖10.10所示窗口。權(quán)限列表中可以看出對普通屬性都有讀的權(quán)限。這是客戶端對所有遠程代碼的默認的安全限制

24、列表。圖10.10 所有遠程代碼訪問的默認權(quán)限列表這個默認的java.policy文件對應的源文件如下:/ 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)下進入路徑D:Apache Tomcat 4.0webappsROOTuser,所有操作都在服務器路徑下操作,也可以在普通路徑下操作,完成后將一系列文件配置到服務器端。本書作者使用前者,在user目

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論