【賽迪網(wǎng)-IT技術(shù)報(bào)道】安全配置和代碼封裝
安全配置
兩個(gè)平臺(tái)的配置都是通過(guò)XML或純文本文件,兩個(gè)平臺(tái)的區(qū)別在于處理安全配置體系的方式不同。
在.NET平臺(tái),有圖形接口和命令行二種方式來(lái)修改安全配置參數(shù)。Mscorcfg.msc是圖形接口方式,Caspol.exe提供了命令行方式,適用于批處理或配置文本。
Java平臺(tái)只提供了圖形接口的工具policytool.exe。和.NET不同的是,它的目標(biāo)對(duì)象(配置文件)的名字和位置不是固定的。
.NET定義了不同范圍的安全配置文件:系統(tǒng)范圍,本機(jī)范圍,本用戶范圍。在配置有沖突時(shí),原則上小范圍的參數(shù)有優(yōu)先權(quán)。
Java和J2EE的核心配置文件都保存在固定位置,但擴(kuò)展配置文件隨廠家不同而不同。
代碼封裝:檢驗(yàn)Java 和.NET 的Common Library Runtime (CLR) 都實(shí)行內(nèi)存安全或類型安全的保護(hù)機(jī)制,在這些平臺(tái)開(kāi)發(fā)的應(yīng)用的安全性也是可以檢驗(yàn)的。他們的實(shí)現(xiàn)機(jī)制有很大的不同。
在.NET, CLR總是執(zhí)行編譯好的代碼,它不解釋代碼。但是在中間語(yǔ)言(IL)被編譯之前,編譯器會(huì)有驗(yàn)證和檢驗(yàn)的步驟。步是檢查文件的結(jié)構(gòu)和代碼完整性;第二步包括一些擴(kuò)展的檢查,內(nèi)存安全、堆棧跟蹤、數(shù)據(jù)流分析、類型檢查等。在運(yùn)行階段,由VES (Virtual Execution System) 來(lái)負(fù)責(zé)安全性檢查和出錯(cuò)意外情況處理。
在Java平臺(tái),Java虛擬機(jī)(JVM)負(fù)責(zé)類的載入、鏈接、檢驗(yàn)和執(zhí)行。對(duì)于已經(jīng)編譯和優(yōu)化的代碼,JVM也用二個(gè)無(wú)條件調(diào)用堆棧來(lái)保留初的字節(jié)代碼信息。
小結(jié):和.NET不同,JVM的默認(rèn)設(shè)置是不檢驗(yàn)本地代碼。另外,JVM保留初的字節(jié)代碼供運(yùn)行時(shí)檢查,而.NET把靜態(tài)分析和運(yùn)行時(shí)插入檢驗(yàn)代碼相結(jié)合。
代碼封裝:應(yīng)用隔離在.NET, 域隔離建立在內(nèi)存安全機(jī)制的基礎(chǔ)上,不同的域不能直接訪問(wèn)彼此的地址空間,只能通過(guò).NET遠(yuǎn)程通信機(jī)制訪問(wèn)。
在Java平臺(tái),應(yīng)用隔離是通過(guò)ClassLoaders 和 ProtectionDomains 相結(jié)合來(lái)實(shí)現(xiàn)的,安全類加載是JVM安全機(jī)制的基石。
小結(jié):.NET的 AppDomains 就象操作系統(tǒng)的進(jìn)程一樣,使用起來(lái)比Java的 ProtectionDomains 更直接、容易一些。
代碼封裝: 語(yǔ)言特征兩個(gè)平臺(tái)基本上差不多,.NET在靈活性上稍微好一點(diǎn)。
總結(jié):
Java在安全配置上有較多的優(yōu)勢(shì),.NET在代碼封裝的選擇性和易用性好一些。
加密和通信
加密法:概論
.NET的加密法主要基于CryptoAPI 和相關(guān)擴(kuò)展。大多數(shù)有關(guān)加密的類都在System.security.Cryptography, X509Centificates 和XML中。.NET利用基于流的模型來(lái)完成加密傳輸,所有的算法都被默認(rèn)為的安全級(jí)別。.NET也允許用戶自己在 machine.config 中定義自己的算法。
Java平臺(tái)的加密算法分二個(gè)部分:Java Cryptography Architecture (JCA) 和 Java Cryptography Extension (JCE)。 JCE的出口受到有關(guān)法律的限制。如果要使用用戶自己的加密算法,必須得到認(rèn)證機(jī)構(gòu)(SUN 或 IBM)的認(rèn)證。
加密法:算法
.NET主要提供了下面幾大類加密算法:非對(duì)稱算法、HASH算法、對(duì)稱算法、隨機(jī)數(shù)生成法。
Java提供的加密算法更多,但是較少第三方廠商可以在Java中提供自己的算法。
安全通信
SSL已經(jīng)是事實(shí)的傳輸安全的工業(yè)標(biāo)準(zhǔn)了。Java和.NET都支持版本 SSL 3.0。
安全通信:平臺(tái)
.NET只在基于IIS的應(yīng)用中使用SSL來(lái)保護(hù)HTTP傳輸,對(duì)于非IIS應(yīng)用,.NET不能保護(hù)傳輸中的數(shù)據(jù)。
在Java中,JSSE (Java Secure Socket Extensions) 提供了平臺(tái)級(jí)的服務(wù),保證基于TCP/IP的通信安全。
除了IIS,.NET沒(méi)有提供任何其它平臺(tái)級(jí)的通信保護(hù)的標(biāo)準(zhǔn)方案,但是Java在這方面提供了全套的解決方案。
安全通信:應(yīng)用
.NET通過(guò)WSA (Web Service Architecture)和 WSE (Web Service Extension) 包來(lái)提供的WEB服務(wù)安全保證,Java目前還沒(méi)有提供這方面的支持。
總結(jié):
在加密方法上,Java和.NET基本沒(méi)有太大的差別;在通信保護(hù)方面,Java 比.NET提供了更多的選擇方案;但是在WEB服務(wù)安全性上,Java明顯比.NET落后一些。