GB | BIG5
|
| 首頁 > 安全技術 > 程序 > 正文 |
 |
| 全面保護你的Java程序安全(下) |
| 本文出自:http://www.computerworld.com.cn 作者: 野風 編譯 (2002-01-29 20:58:58) |
|
概論:創建一個安全的網絡程序,你需要考慮很多技術以外的東西。一個安全的解決方案除了前面講到的虛擬機安全,應用程序安全外,還依賴你對網絡環境的理解以及程序使用者(包括那些居心叵測的用戶)的使用技能。在這第三部分,Todd Sundsted安全討論的最一部分,他探究了這些問題並最給出了解決方案。 |
|
在這個安全系列講解中,我一直鼓勵你從三個不同方面來考察JAVA安全問題。在頭兩篇文章中,我主要集中虛擬機和應用程序安全。這個月,我將討論最一部分“網絡安全”。 |
|
網絡安全處理的是互聯的實體之間的通訊管道的安全問題每個實體都確認來自另一方的身份驗証以及基通訊管道之上的信息真實性。 |
|
創建安全的網絡程序會面臨很多挑戰。那些構成現代安全技術(比如加密系統)的論題常常令開發人員感到迷惑。並且,一些關鍵的標準和技術還是不透明的比如X.509認証標準。時至今日,網絡安全還是一個難題,因為,網絡媒體本身的角色就難以理解。 |
|
看看下面這個推論:在我們日常交流中,溝通雙方的信息交流通過多種媒介進行,比如光和聲音。我們憑這些信息去判斷他人的身份,鑒定溝通渠道的質量等。即使我們通過電話交流,我們還是可以通過對方在電話一端的語調,語速,走音等細微之處來辨別出信息,而不必通過交談雙方的談話內容。 |
|
而基如互聯網等媒體的通訊則只能提供少的多的線索。設想你和同伴在兩間屋子使用一種通話的罐來說話。可以想像,可憐的信號質量湮滅了那些我們借以做出判斷的線索。而在互聯網或是其它網絡上的程序通訊同這種情況是類似的。 |
|
網絡安全的內容包含了在匿名管道上進行身份驗証,避免通訊信息遭到竊聽以及意外或是惡意的修改等方面。 |
|
我廣泛涉獵了用加強安全通訊的工具以及相應技術(參考http://www.javaworld.com/javaworld/jw-08-2001/jw-0810-howto.html#resources)。這裡我更實際的討論在我們設計以及完成一個網絡安全解決方案時所要考慮的事情。 |
|
設計一個安全解決方案你首先要從理解需求開始。通過互聯網進行金融交易顯然比你下載上周體育積分的WEB頁面更需要安全。在選擇一種技術和開始設計時,你應該考慮一下幾個方面: |
|
• 安全設計會增加產品設計及實現的復雜性,以及安裝,配置的復雜性,還有對終端用戶也是這樣。盡管安全是值得的,但是復雜性則並不是用戶所需要的。你打算怎樣復雜化你的安全設計呢? |
|
• 安全處理,尤其是加密以及解密,常常都是CPU操作密集型的。多數桌面及服務器系統都有足夠強的馬力,但是那些缺乏資源的設備,比如蜂窩移動電話,PDAs等常常缺少這種能力。你的目標平台能適處理這樣的負荷嗎? |
|
• 同樣,安全設計會增加程序代碼量。盡管在桌面以及服務器計算機上這個不算太嚴重的問題,但在嵌入式系統中,這就將會涉及到一些利害關系,特別是那些為JAVA2平台,比如Micro Edition (J2ME)而構建的應用,這樣的情況下你又能處理好負荷嗎? |
|
比如這裡的一個列子,移動信息設備框架(MIDP)第一版,就缺少SSL(安全套接口層)支持端到端WEB解決方案中最核心的組件其主要原因就是對移動設備來說,SSL太過苯重了。針對這個問題,SUN微系統實驗室的Vipul Gupta為J2ME構建了兼容SSL標準的一個實現。他的這一成果表明了小設備也可以達到讓人可以接受的SSL性能。Gupta的這一實現之所以能達到這一目標,是因為它只是支持最流行的密碼套件,其余的則經過了削減以適應小設備的要求,當然,這種實現缺少服務器要求的客戶端驗証(一種很消耗的客戶端組件),並且它通過多個到服務器的連接重復使用了RSA(Rivest-Shamir-Adleman)計算。你可以看看網址:http://www.javaworld.com/javaworld/jw-08-2001/jw-0810-howto.html#resources,可以找到更多的信息。 |
|
選擇一種合適的技術對實現一種網絡安全解決方案來說似乎已經不用多說了。這樣的選擇將會影響到安全的壽命和質量。JDK提供了大量的安全API函數。下面這張表將有助你為你的方案選擇合適的技術。 |
|
• 驗証和數字簽名:JAVA密碼系統(java.security) |
|
• 加密/解密和消息驗証代碼:JAVA密碼系統擴展(javax.crypto) |
|
• X.509驗証:JAVA密碼系統(java.security.cert) |
|
• 可插入的驗証和授權:JAVA驗証和授權服務(javax.security.auth) |
|
• Kerberos:GSS(通用安全服務)API(org.ietf.jgss) |
|
• 証書路徑確認:証書路徑確認API(java.security.cert) |
|
這些標準API處理了大量安全相關的WEB程序以及企業整合任務的問題。 |
|
不考慮網絡來進行網絡安全方案設計顯然是不明智的。程序所運行的系統以及基其上的網絡都將在方案設計中給予充分的考慮。 |
|
設想一下這個情景:你建立了一個運行在安全網絡之上的程序。如果網絡確實是安全的這意味著網絡在物理上給保護起來,用戶是可信賴的,並經過了仔細的授權那在這種情況下你就可以盡量少的關心你程序本身的安全問題。但是,在多數情況下,網絡並非如所想像的那樣安全,而且開發人員在開發安全系統中往往失敗,因為不含安全機制的系統要比有安全機制的系統創建起來要難得多。然而,一些情況証實了這個方法。比如,在一個群集系統中運行了多個程序,並相互通訊,進行負載平衡,這樣的情形就有足夠的理由要求這個集群成為一個安全的整體,而不是程序本身。 |
|
更實際的講,保護你的程序典型情況下意味著評估運行程序的機器的安全,機器安裝環境的安全以及網絡,包括接入點。 |
|
對接入點進行驗証非常重要。對來自針對程序的惡意攻擊,我們還可以設下“陷阱”,就是提供這樣的一個入口,這個接入點為蟄伏的sniffer,嗅探器活動提供了一個窗口(sniffer是一種代碼片斷,用偵聽網絡通信信息)。通過sniffer收集來的信息可以提供程序的入口。 |
|
你要記住,所謂的安全解決方案始終是圍繞人來建立的,因此你必須理解程序使用者以及不懷好意者的能力和技術。那些“濫用者”,通常比正常用戶更精技術,他們讓事情變得更復雜。 |
|
在你考慮設計你的程序安全方案時,你必須要考慮那些使用者的技能水平。比如,如果你的用戶堅持要把密碼記在碎紙上並在監視器上敲打進去,那你就不必開發出強大的基密碼的安全系統。正如多數人所說,通常境況下,最好的安全是花費預算來進行培訓。 |
|
對濫用著來說,事情又有所不同。這些人常常更具有技術天賦,並更易受到激勵,這就要求更強的技術防護,即時的升級補丁包以及警醒的告誡。 |
|
沒有強大的網絡安全,你的程序以及數據將是不穩定的。我講過的其它的兩部分虛擬機安全,應用程序安全和網絡安全一起為JAVA程序提供了一個全面的安全圖景。為了構建安全的JAVA程序,你必須全面理解以上的三個方面。 |
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
全面保護你的Java程序安全(下) (2002-01-29 20:58:58) 全面保護你的Java程序安全(中) (2002-01-29 20:58:13) 全面保護你的Java程序安全(上) (2002-01-29 20:57:28)
|
|
|
|
 |
★ 樊強制作 歡迎分享 ★ |
|