資源描述:
《java安全教程——?jiǎng)?chuàng)建ssl連接和證書(shū)-java開(kāi)發(fā)java經(jīng)驗(yàn)技巧》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、Java安全教程——?jiǎng)?chuàng)建SSL連接和證書(shū)本文illImportNew-hejiani翻譯自javacodegeekso歡迎加入翻譯小組。轉(zhuǎn)載請(qǐng)見(jiàn)文末要求。我們?cè)陉P(guān)于JavaEE安全的系列文章屮,冇一篇也詳細(xì)介紹了如何在JavaEE應(yīng)用中創(chuàng)建SSL連接和證書(shū)。正如前面文章提到的,SSL(SecureSocketsLayer,安全套接層)/TLS(TransportLayerSecurity,傳輸層安全)保證了客戶端和web服務(wù)器的連接安全??蛻舳送ㄟ^(guò)HTTPS連接使用web資源。為創(chuàng)建與客戶端的安全連接,以加密格式發(fā)送/接受信息,J3V3提供了完善的安全體系A(chǔ)PI類庫(kù)。?JCA
2、(JavaCryptographyArchitecture,Java加密體系結(jié)構(gòu))?JCE(JavaCryptographicExtension,Java加密擴(kuò)展包)?JSSE(JavaSecuredSocketExtension,Java安全套接字?jǐn)U展包)SSL連接要求web服務(wù)器持冇數(shù)字證書(shū),該證書(shū)使客戶端信任該web應(yīng)用的可靠性。需要發(fā)送加密信息的應(yīng)用從CA(CertificateAuthority,數(shù)字證書(shū)認(rèn)證機(jī)構(gòu))申請(qǐng)數(shù)字證書(shū)。CA驗(yàn)證應(yīng)用所冇者的詳細(xì)信息和英他身份信息,并簽發(fā)數(shù)字證書(shū)。在PKI(PublicKeyInfrastructure,公鑰基礎(chǔ)設(shè)施)體系中,
3、數(shù)字證書(shū)由CA簽發(fā),它包括識(shí)別名(DN,DistinguishedName)/所有者名稱/使用者(Subject),唯一識(shí)別證書(shū)的序列號(hào),所有者公鑰,簽發(fā)日期,到期時(shí)間,CA識(shí)別名,簽發(fā)機(jī)構(gòu)(CA)的數(shù)字簽名,簽名的創(chuàng)建算法。CA簽發(fā)的數(shù)字證書(shū)發(fā)布在CA的注冊(cè)庫(kù)屮,這樣認(rèn)證用戶就可以使用所有者的公鑰。瀏覽器如何確認(rèn)擁有證書(shū)的應(yīng)用或網(wǎng)站的可靠性?所有的商業(yè)CA都與主流的瀏覽器有所關(guān)聯(lián),它們的根證書(shū)被嵌入在瀏覽器小。瀏覽器SSL兼容性可以通過(guò)證帖存儲(chǔ)區(qū)檢查,證帖存儲(chǔ)區(qū)提供了CA證帖的相關(guān)信息,CA證書(shū)保存在瀏覽器的存儲(chǔ)中。同時(shí),CA網(wǎng)站也提供了瀏覽器SSL兼容性信息。下面的圖片展
4、示了示例網(wǎng)站http://abcgen.uk的證書(shū)的詳細(xì)信息。該證書(shū)保證所有者的可靠性已經(jīng)被驗(yàn)證,數(shù)字證書(shū)簽發(fā)給ABCGenIdiotcchicpic,它的CommonName為www.abcgen.uk。說(shuō)明:安全起見(jiàn)我們沒(méi)有引用任何真實(shí)的網(wǎng)站。本文的例子都是示例性的并且僅僅出于學(xué)習(xí)目的。本例中的證書(shū)由VerisignasClass3簽發(fā),表明Verisign執(zhí)行了對(duì)所有者的驗(yàn)證和確認(rèn)。這并不是一個(gè)規(guī)定的PKT標(biāo)準(zhǔn)。下一項(xiàng)為證書(shū)的冇效性。Fingerprints為編碼后的公鑰。數(shù)據(jù)使用密碼哈希函數(shù)SHA1和MD5來(lái)哈希。證書(shū)詳細(xì)信息卜?圖為證書(shū)層次結(jié)構(gòu)。第一項(xiàng)為根證書(shū),第二
5、項(xiàng)為擴(kuò)展驗(yàn)證。認(rèn)證機(jī)構(gòu)(CA)通過(guò)擴(kuò)展驗(yàn)證捉供了更高級(jí)的安金認(rèn)證。所冇主流瀏覽器的密鑰存儲(chǔ)區(qū)都包含根和擴(kuò)展驗(yàn)證信息,這樣它們就可以認(rèn)證特定應(yīng)用的可靠性。證書(shū)層次結(jié)構(gòu)希望你已經(jīng)了解了大概思路,現(xiàn)在來(lái)編碼實(shí)現(xiàn)吧。使用的產(chǎn)品?IDE:Netbeans7.2?JavaDevelopmentKit(JDK):Version6?Glassfishserver:3.1?認(rèn)證機(jī)制:FonnBased認(rèn)證?認(rèn)證服務(wù)器:LDAPOpenDSv2.2目標(biāo)web服務(wù)器與客戶端Z間創(chuàng)建SSL連接。第1步:在Glassfish服務(wù)器創(chuàng)建服務(wù)器證書(shū)打開(kāi)windows中的命令行提示-〉進(jìn)入{domaindi
6、r}/config目錄,{domain_dir}為Glassfishdomain路徑,比如C:NetBeans7.2configGF3domainlconfig笫2步:使用keytool命令生成證書(shū)。Keytool是JavaSE6提供的密鑰和證書(shū)管理工具。運(yùn)行以下命令:>keytool-genkey-aliasserver-alias一key^lgRSA一keyp^sschangeit-storepasschangeit-keystorekeystore.jksThecommandwillaskforthefollowingdetails:Whatisyourfi
7、rstandlastname?[Unknown]:localhost〈〈Fortestingpurposesweneedtouselocalhostsinceitmapstotheapplicationserverhostname.Ideallyinproductionenvironmentsthisfieldshouldincludeapplicationserver"sname.>>Whatisthe[Unknown]:nameofyourorganizationalunit?idiotechieW