火龍果Java安全技術(shù)_第1頁(yè)
火龍果Java安全技術(shù)_第2頁(yè)
火龍果Java安全技術(shù)_第3頁(yè)
火龍果Java安全技術(shù)_第4頁(yè)
火龍果Java安全技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩36頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《Java程序設(shè)計(jì)之網(wǎng)絡(luò)編程》

第16章Java安全技術(shù)主要內(nèi)容16.1安全基本知識(shí)16.2Java的安全模型16.3Java的密碼學(xué)結(jié)構(gòu)16.1安全基本知識(shí)攻擊,保護(hù)

密碼學(xué),機(jī)密性,認(rèn)證,證書完整性,認(rèn)可性

審計(jì)和日志,安全策略和訪問控制主要內(nèi)容16.1安全基本知識(shí)16.2Java的安全模型16.3Java的密碼學(xué)結(jié)構(gòu)16.2Java的安全模型安全模型的演化Java2安全模型Java2的安全劃分應(yīng)用程序安全性小程序安全性J2SDK安全工具Java小程序的安全部署最初安全模型為沙箱模型

JVMValuableResources(files,etc)SandBoxRemoteCodeLocalcode為從開放的網(wǎng)絡(luò)中獲取的非信任代碼的提供了一個(gè)受限制的運(yùn)行環(huán)境。沙箱模型的實(shí)質(zhì)是本地代碼對(duì)重要的系統(tǒng)資源(如文件系統(tǒng))有全部的訪問權(quán)限,而下載的遠(yuǎn)程代碼(例如Applet)則不被信任并且僅能訪問沙箱里提供的有限資源

JDK1.1安全模型

JVMValuableResources(files,etc)SandBoxRemoteCodeLocalcode使用數(shù)字簽名服務(wù),可以用與Java編寫的本地程序類似的方式對(duì)待可信的Applet

JDK1.2中的新安全體系結(jié)構(gòu)JVMValuableresources(files,etc)PDPDSandboxSecuritypolicyClassloaderLocalorremotecode

ProtectionDomain是在策略數(shù)據(jù)庫(kù)中指定的,授予CodeSource的Permission的聚合體。通過ClassLoader裝入到JVM的每個(gè)類文件被分配給一個(gè)ProtectionDomain。Java2安全模型BootstrapClassfilesSystemClassfilesUserClassfilesBytecodeVerifierBootstrapClassLoaderSystemClassLoaderClassLoaderSecurityManagerProtectionDomainsAccessControllerOperatingSystem,HardwareCodeSource(URL,Certificates)PermissionskeystoreJava2安全模型Java安全主要建立在Java運(yùn)行時(shí)環(huán)境的三個(gè)方面:ByteCodeVerifier(字節(jié)碼驗(yàn)證器)、SecurityManager(安全管理器)以及ClassLoader(類裝入器)。代碼驗(yàn)證(BytecodeVerifier)確保所下載的代碼被恰當(dāng)?shù)馗袷交?,字?jié)碼(“Java虛擬機(jī)”指令)沒有違反語(yǔ)言或虛擬機(jī)的安全限制(如,無非法數(shù)據(jù)轉(zhuǎn)換),沒有執(zhí)行指針尋址,內(nèi)部堆棧不能溢出或下溢,以及字節(jié)碼指令將擁有正確的類型參數(shù)。安全管理器(SecurityManager)

SecurityManager

在嘗試執(zhí)行文件I/O和網(wǎng)絡(luò)I/O、創(chuàng)建新的ClassLoader、操作線程或線程組、啟動(dòng)底層平臺(tái)(操作系統(tǒng))上的進(jìn)程、終止“Java虛擬機(jī)”、將非Java庫(kù)(本機(jī)代碼)裝入到JVM、完成某種類型的系統(tǒng)操作以及將某種類型的類裝入到JVM中時(shí)激發(fā)運(yùn)行時(shí)訪問控制機(jī)制。例如,JavaApplet沙箱嚴(yán)格地將所下載的Applet約束到被認(rèn)為是比較安全的有限的運(yùn)行環(huán)境中。權(quán)限(Permission)

一個(gè)權(quán)限允許代碼執(zhí)行的一個(gè)特定的操作,權(quán)限可以是特別具體的,也可以是一般化的。一個(gè)權(quán)限由三個(gè)部分組成:類型,名稱和操作。類型是必須的,它是實(shí)現(xiàn)了Permission接口的特定的類permissionjava.security.AllPermission;permissionjava.lang.RuntimePermission"stopThread";permissionjava.io.FilePermission"/tmp/foo","read";代碼源(CodeSources)

代碼源包含類的從哪里裝載的位置信息和對(duì)類簽名信息。一般情況下,這個(gè)位置被表示成一個(gè)URL。如果代碼被簽名,那么代碼源里面包含了關(guān)于簽名者的信息。類可以基于代碼源被賦予一定的權(quán)限。保護(hù)域(ProtectionDomains)是賦予代碼源的權(quán)限的集合??梢酝ㄟ^策略文件定義。策略文件(Policyfiles)

策略文件是一個(gè)控制沙箱的管理元素。一個(gè)策略文件可以包含一個(gè)或者多個(gè)條目來定義一個(gè)保護(hù)域。每個(gè)條目是賦予代碼源的權(quán)限聲明。一般有兩個(gè)策略文件,一個(gè)全局策略文件,一個(gè)用戶相關(guān)策略文件。全局策略文件影響Java虛擬機(jī)種的所有的實(shí)例。策略文件是一個(gè)文本文件,可以直接進(jìn)行編輯。也可以用Java提供的編輯工具policyTool進(jìn)行編輯。密鑰庫(kù)(Keystores)

通過代碼簽名可以賦予代碼更多的執(zhí)行自由度。如果你確信正在執(zhí)行的代碼來自一個(gè)可信的組織,你可以允許它訪問本地磁盤文件,或者使用打印機(jī)等。被簽名的代碼依賴于公鑰證書,證書被保存在密鑰庫(kù)中。開發(fā)者可以使用密鑰庫(kù)中的證書對(duì)代碼進(jìn)行簽名;一般用戶或者系統(tǒng)管理員可以在執(zhí)行已簽名的代碼時(shí)參考密鑰庫(kù)發(fā)現(xiàn)是誰的簽名。訪問控制器(AccessController)

訪問關(guān)鍵系統(tǒng)資源時(shí),是否允許或者拒絕,具體結(jié)果決定于策略文件的配置。把一段代碼標(biāo)記為具有一定的特權(quán),影響后續(xù)的訪問判斷。獲取當(dāng)前調(diào)用上下文的一個(gè)快照,來自不同上下文的訪問控制判斷可以參照被保存的上下文。做特殊安全檢查Java2的策略配置文件SecurityManagersecurity=System.getSecurityManager();

if(security!=null){

security.checkPermission(Permissionperm);

}如果這個(gè)請(qǐng)求被允許,checkPermission不返回任何值;如果被拒絕,拋出異常SecurityException。

grantsignedBy"signer_names",codeBase"URL"{

permissionpermission_class_name"target_name","action",

signedBy"signer_names";};應(yīng)用程序安全性在不使用SecurityManager的情況下使用SecurityManager的情況修改策略配置文件小應(yīng)用程序安全性通過程序說明在命令行中用AppletViewer執(zhí)行AppletviewerwriteFile.htmlJ2SDK安全工具keytool–

管理密鑰庫(kù)和證書jarsigner–

產(chǎn)生和驗(yàn)證Java簽名policytool–

圖形化的方式管理策略文件。Keytool1)創(chuàng)建公/私鑰對(duì);2)發(fā)出證書請(qǐng)求到認(rèn)證權(quán)威(CA)3)從認(rèn)證權(quán)威導(dǎo)入證書回復(fù)4)指明屬于其他組織的公鑰是受信任的。Keytool目前能夠處理符合X.509標(biāo)準(zhǔn)的證書。JSSE(JavaSecureSocketExtension,JSSE)1.0.2以后的版本可以支持pkcs12。Keytool參數(shù)

參數(shù)描述-genkey

產(chǎn)生一個(gè)密鑰對(duì)(一個(gè)公鑰關(guān)聯(lián)一個(gè)私鑰)

-import

讀取一個(gè)證書或者證書鏈,并存儲(chǔ)到密鑰庫(kù)中,同時(shí)用一個(gè)別名進(jìn)行標(biāo)識(shí)。-certreq

用pkcs10產(chǎn)生一個(gè)證書簽發(fā)請(qǐng)求。-export

導(dǎo)出一個(gè)和某個(gè)別名相關(guān)聯(lián)的證書

-list

打印整個(gè)密鑰庫(kù)中的內(nèi)容,或者打印與某個(gè)別名相關(guān)聯(lián)的證書。-storepasswd

修改或指定密鑰庫(kù)的密碼-keypasswd

修改或者指定某一個(gè)密鑰對(duì)的訪問密碼-delete

刪除密鑰庫(kù)中的條目。

KeyTool應(yīng)用D:\>keytool-genkey-aliasjavafan-keyalgrsa-validity750輸入keystore密碼:keystore您的名字與姓氏是什么?

[Unknown]:JavaFan您的組織單位名稱是什么?

[Unknown]:ComputerScience您的組織名稱是什么?

[Unknown]:ChongqingUniversity您所在的城市或區(qū)域名稱是什么?

[Unknown]:Chongqing您所在的州或省份名稱是什么?

[Unknown]:Chongqing該單位的兩字母國(guó)家代碼是什么

[Unknown]:CNCN=JavaFan,OU=ComputerScience,O=ChongqingUniversity,L="Chongqing",ST=Chongqing,C=CN正確嗎?

[否]:是輸入<javafan>的主密碼(如果和keystore密碼相同,按回車):用keytool顯示證書的內(nèi)容D:\>keytool-v-printcert-filejavafan.cerOwner:CN=JavaFan,OU=ComputerScience,O=ChongqingUniversity,L="Chongqing",ST=Chongqing,C=CN發(fā)照者:CN=JavaFan,OU=ComputerScience,O=ChongqingUniversity,L="Chongqing",ST=Chongqing,C=CN序號(hào):43030437有效期間:WedAug1717:32:39CST2005至:ThuSep0617:32:39CST2007認(rèn)證指紋:

MD5:CB:AE:97:24:A9:93:4B:34:E2:3B:95:95:70:E7:70:D5SHA1:E3:32:0C:68:24:34:CB:6E:02:BF:ED:E6:D8:C0:29:AE:66:5C:20:DDjarsignerJarsigner用于給打包后的Java程序簽名,或者驗(yàn)證簽名。Jarsigner可以在簽名或者驗(yàn)證簽名時(shí),訪問由keytool創(chuàng)建的密鑰庫(kù)。選項(xiàng)描述-storepass

訪問密鑰庫(kù)時(shí),指定口令-keypass

指定私鑰的保護(hù)口令-signedjar

指定需要被簽名的jar文件

-verify

jar文件的簽名驗(yàn)證

-verbose

控制是否輸出簽名或者驗(yàn)證過程的詳細(xì)信息-certs

與-verify、verbose一起使用,輸出包括每個(gè)簽名證書的信息policytool

Java運(yùn)行時(shí)環(huán)境的安全配置文件{java.home}/lib/security/java.security(java.home指安裝Java運(yùn)行時(shí)環(huán)境的目錄)中包括兩個(gè)策略文件:{java.home}/lib/security/java.policy和{user.home}/.java.policy({user.home}指用戶主目錄)。PolicyTool缺省修改第二個(gè)文件。Java小程序的安全部署SimpleScannerApplet程序檢查某個(gè)主機(jī)上的TCP端口是否開放,比如用于WWW服務(wù)的80端口,用于SMTP服務(wù)的25端口等。程序運(yùn)行界面制作和部署安全小程序步驟編制小程序SimpleScannerApplet編寫Html文件scanner.html把程序打包成Jar文件獲取并安裝一個(gè)支持RSA的簽名證書。用該證書對(duì)Jar文件進(jìn)行簽名用sun的HtmlConvert轉(zhuǎn)換scanner.html部署轉(zhuǎn)換后的html文件和已經(jīng)簽名的jar文件見程序主要內(nèi)容16.1安全基本知識(shí)16.2Java的安全模型16.3Java的密碼學(xué)結(jié)構(gòu)16.3Java的密碼學(xué)結(jié)構(gòu)16.3.1 基本概念16.3.2 核心類16.3.3 消息摘要16.3.4 數(shù)字簽名16.3.5 數(shù)據(jù)加密/解密16.3.1 基本概念Java密碼學(xué)結(jié)構(gòu)設(shè)計(jì)遵循兩個(gè)原則:(1)算法的獨(dú)立性和可靠性;(2)實(shí)現(xiàn)的獨(dú)立性和相互作用性。Java2中主要的密碼學(xué)服務(wù)有以下幾種:數(shù)字簽名、消息摘要、加密/解密密鑰工廠密鑰庫(kù)創(chuàng)建與密鑰管理算法參數(shù)產(chǎn)生、管理證書工廠JDK5.0提供的密碼學(xué)服務(wù)可以通過修改{java.home}/lib/security/java.security文件安裝密碼學(xué)服務(wù)提供者。缺省情況下,Java運(yùn)行時(shí)環(huán)境已經(jīng)安裝了下面的提供者:vider.1=vider.Sunvider.2=sun.security.rsa.SunRsaSignvider.3=ernal.ssl.Providervider.4=vider.SunJCEvider.5=sun.security.jgss.SunProvidervider.6=com.sun.security.sasl.Provider見程序測(cè)試程序importjava.security.Provider;importjava.security.Security;publicclassGetProviderInfo{ publicstaticvoidmain(String[]args){ Provider[]plist=Security.getProviders();

for(inti=0;i<plist.length;i++){ System.out.println("["+(i+1)+"]-Providername:" +plist[i].getName()); System.out.println("Providerinfo:"+plist[i].getInfo()); } }}16.3.2 核心類Security,ProviderMessageDigest類Signature類Key,KeyFactory,KeyPair,KeyPairGeneratorSecureRandom16.3.3 消息摘要使用MD5算法產(chǎn)生消息摘要也可以使用SHA1算法MessageDigest支持MD5和SHA消息摘要算法。調(diào)用getInstance()方法選擇一個(gè)合適的算法;調(diào)用update()方法準(zhǔn)備數(shù)據(jù)輸入緩沖區(qū);digest()方法產(chǎn)生消息摘要;摘要的長(zhǎng)度取決于所選擇的算法。使用MD5產(chǎn)生128位的摘要,使用SHA產(chǎn)生160位的摘要。16.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論