David.Turing's blog

           

          Java安全概述

          -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1

          Java安全體系,博大精深,這個體系按照SunJava安全白皮書,基本上可以分為5個部分:

          1. Java平臺

          Java語言本身嵌入了安全特性,其中包括編譯器/JVM對強(qiáng)數(shù)據(jù)類型的支持,自動的內(nèi)存管理,字節(jié)代碼的驗(yàn)證機(jī)制以及獨(dú)特的安全類加載方式,這些特性都是SPAN lang=EN-US>Java語言本身所賦有的,本文不打算作深入的探討這些基礎(chǔ)概念,建議閱讀。

          2. Java 密碼體系

          Java密碼[1](Cryptography)體系依賴于JCAJCE。J ava Cryptography Architecture (JCA) Java Cryptography Extension (JCE)是兩個非常重要的框架,他們提供了非常簡潔通用的API接口,接口跟實(shí)現(xiàn)是完全分離的,即Java開發(fā)者可以采用Sun的接口+Sun的實(shí)現(xiàn)的方式,也可以接受Sun接口+BouncyCastle實(shí)現(xiàn)的方式。換言之,這是一種Provider方式的體系,如何替換Provider可以參考java.security文件的配置,非常簡單。

          JCA包括了數(shù)字簽名和消息摘要的API,JCE擴(kuò)展了JCA,提供了更多的安全APIJava針對下面一些常用的算法提供了接口和實(shí)現(xiàn):

          l?????? 對稱的分組加密算法,如DES, RC2IDEA

          l?????? 對稱的流加密算法,如RC4

          l?????? 非對稱流加密算法,如RSA

          l?????? 基于密碼的加密(PBE)

          l?????? 密鑰交換協(xié)議,如Diffie-Hellman

          l?????? 信息認(rèn)證碼 (MAC)

          上面的算法僅僅是密碼學(xué)領(lǐng)域的冰山一角,但已經(jīng)能夠滿足普通應(yīng)用的安全需求,在算法的層次之上,往往是密碼學(xué)協(xié)議,使用Java簡單的Diffie-Hellman雖然能夠滿足簡單的密鑰交換,但是如果節(jié)點(diǎn)多于SPAN lang=EN-US style="mso-font-kerning: 0pt">2個,這個時候,Diffie-Hellman便不再適用,此時我們必須使用更復(fù)雜/更高級的密碼協(xié)議,成為Group Diffie-Hellman(GDH)。因此,初學(xué)者不要誤認(rèn)為憑借現(xiàn)有的Java密碼實(shí)現(xiàn),我們可以做任何事情,在安全領(lǐng)域,事情遠(yuǎn)遠(yuǎn)不是我們所想象的那么簡單。

          3. Java認(rèn)證與授權(quán)

          Java認(rèn)證與存取控制模型長成現(xiàn)在這個模樣跟Sun的宮力有很大關(guān)系,這部分涵蓋了一個非常重要的部分JAAS,JAAS是第一個出色地將認(rèn)證實(shí)接口和實(shí)現(xiàn)分離的思想,另外,Java的存取模型也是一個非常重要的部分,但從JDK1.2以來并沒有什么太大的變化,在AOP降臨到這個世界之后, Spring的攔截方式已經(jīng)逐漸被人們接受,現(xiàn)在已經(jīng)很少再看到如何應(yīng)用JavaAccess Manager的文章了,或者人們已經(jīng)厭倦了“獨(dú)”模式,他們似乎更喜歡Acegi的方法攔截來控制存取,以致Charles.gay經(jīng)常說要將JGuard AOP化,可見,Java的存取控制模型已經(jīng)有點(diǎn)過時了。

          4. 安全通信

          該部分主要規(guī)范了標(biāo)準(zhǔn)安全通訊協(xié)議(SSL,TLS,KerberosSASL等)的API和實(shí)現(xiàn)。這一節(jié)難度比較大,涉獵面廣,同時也最能體現(xiàn)了Java Security的優(yōu)勢——易用性,擴(kuò)展性和可移植性,大部分用的最多的是SSL(IETF標(biāo)準(zhǔn)化SSL 3.0TLS 1.0),其次是Kerberos。

          因?yàn)槲④泴?/span>Kerberos作為整個Windows的首個重要的認(rèn)證協(xié)議(NTLM已經(jīng)過時)。Kerberos至今依然健壯,MIT的大師真實(shí)卓越非凡,讓一個如此簡單的協(xié)議依然能夠獨(dú)領(lǐng)風(fēng)騷30年而沒有做過大的改動,Kerberos的思想對我們的影響很大,我覺得現(xiàn)有的很多SSO協(xié)議都能夠看到Kerberos思想的影子,尤其是CAS協(xié)議。

          5. PKIPublic Key Infrastructure)體系

          Java PKI規(guī)范提供了管理Key和證書的API,它很好地實(shí)現(xiàn)的協(xié)議:

          l???? X.509規(guī)范

          l???? CRL(證書撤消列表)

          l???? PKCS#11, PKCS#12

          l???? PKIX (RFC 3280),

          l???? 在線證書狀態(tài)協(xié)議(OCSP)

          PKI的核心是數(shù)字證書,Java提供了友好的數(shù)字證書對象(CertificateFactoryCertificate,X509Certificate,X509Extension),通過這些對象,我們可以毫不費(fèi)力地處理各種類型的數(shù)字證書,包括cer, pem等。Java提供了很多有用的管理證書工具,包括日常中必不可少的Keytool, JarSigner等,而某些開源的圖形化界面也封裝了KeytoolJarSigner,包括KeytoolGUI(基于Swing,已經(jīng)停止開發(fā),商業(yè)版本是KeyStore Explorer),SecureX(基于SWTShell,以Eclipse Plugin發(fā)布)。

          其他協(xié)議如CRLPKCS#11, PKIXOCSP,在Java中都在不斷地增強(qiáng)JDK 1.5的重要改造之一就是體現(xiàn)在對這些協(xié)議的增強(qiáng)上。< /SPAN>

          Java.Net的一個最大的不同是,在證書處理上,.Net使用了Windows本地證書庫而Java使用了它自己的證書庫格式(JKS)來保證移植性。Windows本地證書庫是通過Windows CryptoAPI接口去提取的,CryptoAPI是無法跨平臺的,因此,Java沒有使用CryptoAPI。

          Java證書庫是一個獨(dú)立的本地文件,它是通過密碼保護(hù)來保證其中的私鑰/證書在未經(jīng)授權(quán)的情況下不能被其他人提取,私鑰本身也有密碼保護(hù),因此安全性是可以相信的。



          [1]密碼學(xué)的門理論門檻與實(shí)踐門檻都非常高,雖然我們在應(yīng)用密碼、摘要、數(shù)字簽名等算法的時候,得益于SPAN lang=EN-US style="FONT-SIZE: 9pt">JCA/JCE模型的簡易性和可擴(kuò)展性,但是,密碼學(xué)涉獵面非常廣,它遠(yuǎn)遠(yuǎn)不止JCA/JCE框架所描寫的那么簡單。

          ?

          -----BEGIN PGP SIGNATURE-----
          Version: PGP Desktop 9.0.5 - Enterprise license
          Comment:
          http://security.blogjava.net
          iQA/AwUBRRFuXE2j31FcBpdPEQJeUgCg8yeWvTWV43aHliN5X2+mIsQS000AoJj6 to/nxmwV688WafhnXdrt8CZ8 =P2yf
          -----END PGP SIGNATURE-----

          posted on 2006-09-21 00:39 david.turing 閱讀(7092) 評論(2)  編輯  收藏 所屬分類: Security領(lǐng)域

          評論

          # re: Java安全概述 2006-09-21 08:30 Anubis

          學(xué)習(xí)~~~~  回復(fù)  更多評論   

          # re: Java安全概述 2006-10-02 20:26 yufeng0681

          不錯。 不過上次用java的 AES算法,感覺不可用。
          無法和C的算法對接。  回復(fù)  更多評論   

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(110)

          我參與的團(tuán)隊(duì)

          隨筆分類(126)

          隨筆檔案(155)

          文章分類(9)

          文章檔案(19)

          相冊

          搜索

          積分與排名

          最新隨筆

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 温州市| 四平市| 凤山市| 吴忠市| 凤台县| 上林县| 金堂县| 昌都县| 安图县| 肥西县| 铁力市| 金塔县| 叙永县| 光山县| 天津市| 曲阳县| 周至县| 江津市| 苏州市| 彰化县| 缙云县| 乐都县| 太康县| 凤庆县| 肃北| 云和县| 洪江市| 乐都县| 广灵县| 唐河县| 上蔡县| 青神县| 富宁县| 平罗县| 太原市| 磐安县| 津市市| 乐平市| 宜丰县| 吕梁市| 白河县|