62
Giáo viên hướng dẫn : Ths.Lê Phúc Sinh viên thực hiện : Huỳnh Anh Hào Võ Thị Thu Nguyệt Lê Thanh Phong Nguyễn Thị Thanh Thảo Thành phố Hồ Chí Minh 12/2009 HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG TPHCM KHOA CÔNG NGHỆ THÔNG TIN II ĐỀ TÀI MÔN BẢO MẬT THÔNG TIN

Giao thức bảo mật SSL

Embed Size (px)

DESCRIPTION

liên hệ : thaingoclong_tn90mobile :0973.809.853

Citation preview

  • 1. HC VIN CNG NGH BU CHNH VIN THNG TPHCM KHOA CNG NGH THNG TIN II TI MN BO MT THNG TINGio vin hng dn : Ths.L PhcSinh vin thc hin : Hunh Anh HoV Th Thu NguytL Thanh PhongNguyn Th Thanh ThoThnh ph H Ch Minh12/2009

2. PTIT 2009 ti mn Bo mt thng tin MC LCGii ThiuCHNG I : SECURE SOCKET LAYER & TRANSPORT LAYER SECURITY ........................................... 5I.1 Ti sao s dng SSL ............................................................................................................................................ 5I.2 Kin trc SSL....................................................................................................................................................... 9I.3 Giao thc SSL Record ....................................................................................................................................... 10I.4 Giao thc SSL Change Cipher Spec .................................................................................................................. 13I.5 Giao thc SSL Alert........................................................................................................................................... 13I.6 Giao thc SSL Handshake ................................................................................................................................. 15I.6.1 Giai on 1 : Thit lp kh nng bo mt .............................................................................................. 16I.6.2 Giai on 2 : Xc thc server v trao i kha...................................................................................... 18I.6.3 Giai on 3 : Xc thc client v trao i kha ...................................................................................... 19I.6.4 Giai on 4 : Kt thc ............................................................................................................................ 19I.7 Tnh ton m ha ............................................................................................................................................... 20I.7.1 Vic to Master Secret ........................................................................................................................... 20I.7.2 Vic sinh cc tham s m ha ................................................................................................................ 21I.8 Transport Layer Security ................................................................................................................................... 22I.8.1 Version number ..................................................................................................................................... 22I.8.2 Message Authentication Code ............................................................................................................... 22I.8.3 Hm tnh s ngu nhin ......................................................................................................................... 23I.8.4 M cnh bo........................................................................................................................................... 24I.8.5 Cipher suite ............................................................................................................................................ 25I.8.6 Cc dng client certificate ..................................................................................................................... 25I.8.7 Certificate Verify v Finished Message................................................................................................. 26I.8.8 Tnh ton m ha ................................................................................................................................... 26I.8.9 Phn m ............................................................................................................................................... 26CHNG II : JAVA SECURE SOCKET EXTENSION API ............................................................................. 27II.1 Quan h gia cc Class ..................................................................................................................................... 27II.2 Cc Class v Interface chnh ............................................................................................................................. 28II.2.1 Lp SocketFactory v ServerSocketFactory ........................................................................................ 28II.2.2 Lp SSLSocketFactory v SSLServerSocketFactory .......................................................................... 28II.2.3 Lp SSLSocket v SSLServerSocket ................................................................................................... 29Secure Socket Layer2 3. PTIT 2009 ti mn Bo mt thng tinII.2.4 Non-blocking I/O vi SSLEngine ........................................................................................................ 30II.2.5 Qu trnh khi ng.............................................................................................................................. 31II.2.6 Pht sinh v x l d liu SSL/TLS ..................................................................................................... 32II.2.7 Trng thi hot ng............................................................................................................................. 34II.2.8 Blocking Tasks ..................................................................................................................................... 35II.2.9 Kt thc ................................................................................................................................................ 35II.2.10 SSLSession Interface .......................................................................................................................... 36II.2.11 Lp HttpsURLConnection ................................................................................................................. 36II.3 Cc Class v Interface h tr ............................................................................................................................ 37II.3.1 Lp SSLContext ................................................................................................................................... 38II.3.2 TrustManager Interface ........................................................................................................................ 39II.3.3 Lp TrustManagerFactory.................................................................................................................... 39II.3.4 X509TrustManager Interface ............................................................................................................... 42II.3.5 KeyManager Interface .......................................................................................................................... 44II.3.6 Lp KeyManagerFactory ..................................................................................................................... 45II.3.7 X509KeyManager Interface ................................................................................................................. 46II.3.8 Mi lin h TrustManagers v KeyManagers ..................................................................................... 46II.4 Cc Class v Interface h tr th cp................................................................................................................ 47II.4.1 SSLSessionContext Interface ............................................................................................................... 47II.4.2 SSLSessionBindingListener Interface .................................................................................................. 47II.4.3 Lp SSLSessionBindingEvent ............................................................................................................. 47II.4.4 HandShakeCompletedListener Interface .............................................................................................. 47II.4.5 Lp SSLHandShakeCompletedEvent .................................................................................................. 47II.4.6 HostnameVerifier Interface .................................................................................................................. 47II.4.7 Lp X509Certificate ............................................................................................................................. 48CHNG III : SSL ATTACK ................................................................................................................................ 49III.1 Cc phng php tn cng SSL da trn k thut tn cng MITM ................................................................ 49III.1.1 Diffie Hellman MITM Attack ............................................................................................................. 49III.1.2 SSL Sniff & SSLSTrip MITM Attack ................................................................................................ 46III.2 Demo tn cng SSL Strip ................................................................................................................................ 51CHNG IV : SSL CAPABILITY ........................................................................................................................ 52IV.1 Cc ng dng ph bin ca SSL ..................................................................................................................... 52IV.2 Trin khai SSL ................................................................................................................................................ 54Tham kho Secure Socket Layer3 4. PTIT 2009 ti mn Bo mt thng tinGii thiu :Mc tiu thc hin ti ny ca nhng thnh vin tham gia l i su tm hiu v :Cu trc cng nh c ch hot ng ca SSL.Lp trnh xy dng mt web server chy SSL.Cch thc tn cng mt phin giao dch SSL.Kh nng ng dng SSL trong bo mt thng tin. y l ln u thc hin mt ti ln nn cn nhiu thiu st , mong Thy v cc bn ng gp kin ti c hon thin hn.Chng em xin cm n s hng dn nhit tnh ca Thy Ths.L Phc gip chng em hon thnh ti ny.Secure Socket Layer 4 5. PTIT 2009 ti mn Bo mt thng tinChng I :I.1 Ti sao s dng SSL :Ngy nay vic bo mt thng tin l yu t quan trng quyt nh s sng cn ca mt t chc ,mt cng ty haydoanh nghip . Vi s pht trin nhanh chng ca cng ngh mang li nhiu tin ch cho ngi dng nhng ngthi cng t ra mt nhu cu ht sc cp thit v s an ton v bo mt .V SSL chnh l gii php tt nht hin nayp ng nhng nhu cu v n c coi nh l l chn cui cng trong bo mt thng mi in t.Giao thc SSL ban u c pht trin bi Netscape.Version 1.0 th khng bao gi c cng b rngri.Version 2.0 c cng b vo thng 2/1995 nhng cha nhiu l hng bo mt v sau cng a n m hnhSSL version 3.0 c ban hnh nm 1996.Bn sau cng ny c dng cho TLS version 1.0 v c IETF xc nhnh mt giao thc chun trong RFC 2246 vo thng 1/1999. Ngy nay Visa, MasterCard, American Express cngnh nhiu cng ty gii php ti chnh hng u khc trn th gii v ang ng dng SSL trong thng mi int.Vic truyn cc thng tin nhy cm trn mng rt khng an ton v nhng vn sau:Bn khng th lun lun chc rng bn ang trao i thng tin vi ng i tng cn trao i.D liu mng c th b chn ,v vy d liu c th b 1 i tng th 3 khc c trm, thng c bit nnh attacker .Nu attacker c th chn d liu, attacker c th sa i d liu trc khi gi n n ngi nhn.SSL gii quyt cc vn trn.SSL gii quyt vn u tin bng cch cho php 1 cch ty chn mi bn trao ic th chc chn v nh danh ca pha i tc trong 1 qu trnh gi l authentication (xc thc).Mt khi cc bn c xc thc,SSL cung cp 1 kt ni c m ha gia 2 bn truyn bo mt cc message .Vic m ha trongqu trnh trao i thng tin gia 2 bn cung cp s ring t b mt,v vy m gii quyt c vn th 2.Thutton m ha c s dng vi SSL bao gm hm bm m ha,tng t nh 1 checksum.N m bo rng d liukhng b thay i trong qu trnh truyn dn.Hm bm m ha gii quyt vn th 3,tnh ton vn d liu.Ch rng,c xc thc v m ha u l ty chn, v ph thuc vo cipher suites (cc b m ha) c m phngia 2 i tng.Mt v d r rng nht m trong bn nn s dng SSL l trao i thng tin giao dch qua mng (e-commerce).Trong trao i e-commerce,tht di dt khi gi nh rng bn c th chc chn v nh danh ca serverm bn ang trao i thng tin.Ai c th d dng to ra 1 Website gi ha hn cc dch v tuyt vi ,ch chobn nhp vo s ti khon.SSL cho php bn, client,xc thc v nh danh ca server.N cng cho php serverxc thc nh danh ca client,mc d trong cc giao tc Internet,vic ny him khi c lm. Secure Socket Layer 5 6. PTIT 2009 ti mn Bo mt thng tinMt khi client v server hi lng vi nh danh ca mi bn i tc.SSL cung cp tnh bo mt v tnh ton vnthng qua cc thut ton m ha m n s dng.iu ny cho php cc thng tin nhy cm,nh s ti khon,ctruyn i 1 cch an ton trn Internet.Trong khi SSL cung cp tnh xc thc,tnh bo mt v ton vn d liu,n khng cung cp non-repudiation (tnhkhng t chi).Non-repudiation c ngha l khi 1 i tng gi i 1 message ,th sau khng th ph nhn vicmnh gi message .Khi 1 ch k s tng ng c lin kt vi 1 message,vic trao i ny sau c thc chng minh.SSL 1 mnh n khng cung cp non-repudiation.Tin trnh SSL:Vic trao i trn mng s dng SSL bt u vi vic trao i thng tin qua li gia client v server.S trao ithng tin ny gi l SSL handshake.Ba mc tiu chnh ca SSL handshake l:m phn cipher suite.Xc thc nh danh (ty chn).Hnh thnh c ch bo mt thng tin, bng cch tha thun cc c ch m ha.m phn Cipher suite :Mt phin SSL bt u vi vic m phn gia client v server xem cipher suite no m chng s s dng.Mtcipher suite l 1 tp cc thut ton m ha v kch thc kha m my tnh c th dng m ha d liu.Mtcipher suite bao gm thng tin v cc thut ton trao i kha cng khai v cc thut ton tha thun kha,v cchm bm m ha.Client ni vi server cc cipher suite no n c sn v server la chn cipher suite tt nht c thchp nhn.Xc thc server :Trong SSL,bc xc thc l ty chn,nhng trong v d v giao tc e-commerce trn Web, client theo thng thngs mun xc thc server.Vic xc thc server cho php client chc chn rng chnh server ny i din cho itng m client tin tng. chng minh server thuc v t chc m n khng nh l n i din,server phi trnh chng ch kha cngkhai ca n cho client.Nu chng ch ny l hp l ,client c th chc chn v nh danh ca server.Thng tin trao i qua li gia client v server cho php chng tha thun 1 kha b mt chung.V d,viRSA,client dng kha cng khai ca server,c c t chng ch kha cng khai, m ha thng tin kha bmt.Client gi thng tin kha b mt c m ha n server.Ch c server mi c th gii m ci message nybi v qu trnh gii m phi cn n kha ring ca server.Gi d liu m ha:By gi,c client v server c th truy cp n kha b mt chung.Vi mi message ,chng dng n hm bm mha, c chn trong bc th nht ca tin trnh ny,v chia s thng tin b mt, tnh ton 1 HMAC ni thmvo message.Sau ,chng dng kha b mt v thut ton kha b mt c m phn bc u tin ca tintrnh ny m ha d liu v HMAC an ton.Client v server gi y c th trao i thng tin vi nhau 1 cch anton vi cc d liu bm v m ha.Giao thc SSL: Secure Socket Layer6 7. PTIT 2009 ti mn Bo mt thng tinPhn trc cung cp s m t s lc v SSL handshake, l s trao i thng tin gia client v server trc khi gicc message c m ha.Phn ny m t chi tit hn.Hnh sau minh ha chui tun t cc message c traoi trong SSL handshake.Cc message m ch c gi trong 1 trng hp no c nh du l ty chn. Hnh II: Cc message SSLClientServer1.Client hello2.Server hello3.Certificate ty chn4.Certificate request ty chn5.Server key exchange ty chn6.Server hello done7.Certificate ty chn8.Client key exchange9.Certificate verifyty chn10.Change cipher spec11.Finish12.Change cipher spec13.Finished14.Encrypted data 14.Encrypted data15.Close messages 15.Close messageCc message SSL c gi theo th t sau:1) Client hello: client gi n server cc thng tin bao gm phin bn SSL cao nht v 1 danh sch cc cipher suite m n h tr. (TLS 1.0 c ch ra nh l SSL3.1).Thng tin cipher suite bao gm cc thut ton m ha v kch thc kha.2) Server hello: server chn ra phin bn SSL cao nht v cipher suite tt nht m c client v server h tr, v gi thng tin ny v cho client.3) Certificate: server gi cho client 1 chng ch hoc 1 chui chng ch.V c bn,1 chui chng ch bt u bng chng ch kha cng khai ca server v kt thc bng chng ch gc ca t chc c thm quyn chng ch.Message ny l ty chn,nhng n c dng bt c khi no xc thc server l cn thit.4) Certificate request: nu server cn xc thc client,n gi cho client 1 yu cu xem chng ch.Trong cc ng dng internet,message ny him khi c gi i.Secure Socket Layer7 8. PTIT 2009 ti mn Bo mt thng tin5) Server key exchange: server gi cho client 1 message trao i kha server trong khi kha cng khai c gi phn 3) bn trn th khng cho trao i kha.6) Server hello done: server ni vi client rng n hon thnh cc message m phn ban u.7) Certificate: nu server cn chng ch t client trong message 4, client gi chui chng ch ca n,cng ging nh server lm trong message 3.8) Client key exchange: client sinh ra thng tin c dng to ra kha trong m ha i xng.Vi RSA, client m ha thng tin kha ny bng kha cng khai ca server ri gi n n server.9) Certificate verify: message ny c gi khi client trnh ra chng ch nh trn.Mc tiu ca n l cho php server hon thnh tin trnh xc thc client.Khi message ny c dng,client gi thng tin vi ch k s to bng hm bm m ha.Khi server gii m thng tin ny bng kha cng khai ca client,server c th xc thc client.10) Change cipher spec: client gi message bo server thay i kiu m ha.11) Finished: client ni vi server rng n sn sng bt u trao i d liu an ton.12) Change cipher spec: server gi message bo client thay i kiu m ha.13) Finished: server ni vi client rng n sn sng bt u trao i d liu an ton.Kt thc SSLhandshake.14) Encrypted data: client v server trao i vi nhau,s dng thut ton m ha i xng v hm bm m ha m phn message 1 v 2,v dng kha b mt m client gi cho server trong message 8.15) Closed messages : Kt thc 1kt ni,mi bn gi 1 message close-notify thng bo u kia bit kt nib ng.Nu cc tham s c sinh ra trong 1 phin SSL c lu li,cc tham s ny c th thnh thong c dng li chocc phin SSL sau.Vic lu li cc tham s phin SSL cho php cc trao i bo mt v sau c bt u nhanhchng hn.La chn Cipher suite v xa Entity verification:Giao thc SSL/TLS nh ngha 1 chui cc bc c bit bo m 1 kt ni c bo v.Tuy nhin,vic lachn Cipher suite s tc ng trc tip n loi bo mt m kt ni c c.V d,nu 1 cipher suite nc danh cchn,ng dng khng c cch no kim tra nh danh ca u xa.Nu 1 suite-khng c m ha, c chn,tnhb mt ca d liu khng th c bo v.Thm vo ,giao thc SSL/TLS khng ch r rng nhng ti liu chngnhn nhn c phi khp vi nhng ci m u kia gi.Nu kt ni theo cch no m b redirect n 1 kxu,nhng ti liu chng nhn ca k xu ny khi trnh ra th c chp nhn da trn nhng t liu tin tng hinti,kt ni ny s c xt l hp l.Khi dng SSLSockets/SSLEngines,nn lun lun kim tra ti liu chng nhn ca u xa trc khi gi bt k d liuno.Cc lp SSLSockets v SSLEngines khng t ng kim tra hostname trong URL c khp vi hostname trongti liu chng nhn ca u kia hay khng.Mt ng dng c th b khai thc bng URL spoofing nu hostnamekhng c kim tra.Cc giao thc nh HTTPS cn thit phi kim tra hostname.Cc ng dng c th dng HostnameVerifier vitchng ln lut hostname HTTPS mc nh . Secure Socket Layer 8 9. PTIT 2009 ti mn Bo mt thng tinI.2 Kin trc SSL :SSL c thit k dng TCP cung cp 1 dch v bo mt u cui-n-u cui ng tin cy.SSL khng phi lmt giao thc n m l 2 lp giao thc,nh minh ha di y.Hnh I.1 : Chng giao thc SSLSSL Handshake SSL Change CypherSSL Alert ProtocolHTTP Protocol Spec Protocol SSL Record Protocol TCPIPSSL Record Protocol cung cp cc dch v bo mt c bn cho nhiu giao thc khc nhau cc lp trn.Trong thct, Hyper Text Transfer Protocol (HTTP),cung cp dch v trao i cho tng tc Web client/server,c th hotng trn nh ca SSL.Ba giao thc lp trn c nh ngha nh l cc phn ca SSL: Handshake Protocol,Change Cypher Spec Protocol v Alert Protocol.Cc giao thc mang tnh c trng-SSL ny c dng trong phnqun l trao i SSL v c xt n trong phn sau.Hai khi nim SSL quan trng l SSL session (phin SSL) v SSL connection ( kt ni SSL) ,c nh ngha nhsau:Connection ( kt ni): 1 kt ni l 1 transport _ trong nh ngha m hnh phn lp OSI_ cung cp 1 loidch v thch hp.Vi SSL,nhng kt ni nh vy l nhng mi quan h ngang hng.Cc kt ni th traoi nhanh chng.Mi kt ni gn vi 1 phin.Session (phin): 1 phin SSL l 1 lin kt gia 1 client v 1 server.Cc phin c to ra bng HandshakeProtocol (giao thc bt tay).Cc phin nh ngha 1 tp cc tham s bo mt bng mt m,c th c chias gia nhiu kt ni.Cc phin c dng trnh nhng m phn tn km_v cc tham s bo mtmi_cho mi kt ni.Gia bt k 1 cp ca nhm no (cc ng dng nh HTTP trn client hay server),c th c nhiu kt ni bo mt.V l thuyt ,c th c nhiu phin ng thi gia cc nhm,nhng c trng ny khng c dng trong thc tin.Thc s c nhiu trng thi gn vi mi phin.Mt khi 1 phin c thnh lp,c trng thi hot ng hin thi choc c v ghi, (nh nhn v gi..).Thm vo , trong sut qu trnh Handshake Protocol, trng thi treo c v ghic to ra.Da trn kt lun thnh cng ca Handshake Protocol,cc trng thi treo tr thnh trng thi hin thi.-Mt trng thi phin c nh ngha bi cc thng s sau (cc nh ngha ly t c trng SSL):Session Identifier : 1 chui byte bt k c chn bi server nhn dng trng thi phin l hot ng(active) hay phc hi li (resumable).Peer certificate: mt chng ch X509.v3.Thnh phn ny ca trng thi c th l null.Compression method: thut ton c dng nn d liu trc khi m ha.Secure Socket Layer 9 10. PTIT 2009 ti mn Bo mt thng tinCypher spec : ch ra thut ton m ha d liu (nh rng,AES) v thut ton bm (nh MD5 hay SHA-1) s dng tnh ton MAC.N cng nh ngha cc thuc tnh m ha nh hash-size.Master secret : 48 byte b mt c chia s gia client v server.Is resumable : mt c ch ra rng phin ny c th c dng khi to cc kt ni khc hay khng.-Mt trng thi kt ni c nh ngha bi cc tham s sau:Server and client random: cc chui byte c chn bi server v client cho mi kt ni.Server write MAC secret: kha b mt c s dng bi php tnh MAC trn d liu, c gi bi server.Client write MAC secret: kha b mt c s dng bi php tnh MAC trn d liu,c gi bi client.Server write key: kha m ha quy c cho d liu c m ha bi server v gii m bi client.Client write key :kha m ha quy c cho d liu c m ha bi client v gii m bi server.Initialization vectors: khi 1 khi m trong mode CBC c dng, mt vector khi to (IV) c duy trcho mi key.Phn ny c khi to trc tin bi SSL Handshake Protocol.Sau ,khi m ha cui cngt mi record c dnh li dng lm IV cho record sau .Sequence number : mi bn duy tr cc sequence number ring cho mi message c truyn hoc cnhn trong mi kt ni.Khi 1 bn gi hoc nhn mt change cypher spec message,sequence number thchhp c thit lp v 0.Sequence number khng th vt qu 264-1.I.3 Giao thc SSL Record :SSL Record Protocol cung cp 2 dch v cho kt ni SSL:Confidentiality (tnh cn mt): Handshake Protocol nh ngha 1 kha b mt c chia s, kha ny cs dng cho m ha quy c cc d liu SSL.Message integrity (tnh ton vn thng ip):Handshake Protocol cng nh ngha 1 kha b mt c chias, kha ny c s dng hnh thnh MAC (m xc thc message).Hnh sau ch ra ton b hot ng ca SSL Record Protocol.SSL Record Protocol nhn 1 message ng dng spc truyn i,phn mnh d liu thnh nhiu block,nn d liu 1 cch ty chn,p dng vo 1 MAC,m ha,thmvo header,v truyn khi kt qu thu c trong 1 segment TCP.D liu nhn c c gii m,kim tra ,giinn,sp xp li v phn phi n ngi s dng lp cao hn.Secure Socket Layer10 11. PTIT 2009 ti mn Bo mt thng tin Hnh I.2 : Hot ng ca SSL Record ProtocolD liu ng dng:Phn mnh:Nn:Thm MAC:M ha:Gn SSL Record header:Bc u tin l phn mnh.Mi message ca lp bn trn c phn mnh thnh cc block ,mi block l 214byte (16384 byte) hoc t hn.Tip theo,nn c p dng 1 cch ty chn.Nn phi l khng mt mt thng tin v c th khng lm tng chiudi ni dung nhiu hn 1024 byte (D nhin,ngi ta mong mun nn lm co li d liu hn l ni rng d liu.Tuynhin ,vi nhng block ngn,c th ,do nh dng quy c,thut ton nn thc s lm cho output di hninput).Trong SSLv3 (cng nh phin bn hin ti ca TLS),khng c thut ton nn no c ch r,v vy thutton nn mc nh l null.Bc x l k tip l tnh ton MAC (m xc thc message) trn d liu c nn. thc hin cn dng n1kha b mt c chia s.Php tnh c nh ngha nh sau: hash(MAC_write_secret || pad_2 || hash(MAC_write_secret || pad_1 ||seq_num ||SSLCompressed.type ||SSLCompressed.length || SSLCompressed.fragment))trong : || : php ni/hoc. MAC_write_secret: kha b mt c chia s. hash: thut ton bm m ha, MD5 hoc SHA-1. pad_1: byte 0x36 (0011 0110) c lp li 48 ln (384 bit) cho MD5 v 40 ln (320 bit) cho SHA-1. pad_2: byte 0x5c (0101 1100) c lp li 48 ln cho MD5 v 40 ln cho SHA-1. seq_num: sequence number cho message ny. Secure Socket Layer11 12. PTIT 2009 ti mn Bo mt thng tin SSLCompressed.type: giao thc lp trn c dng x l phn mnh ny. SSLCompressed.length: chiu di ca phn mnh c nn. SSLCompressed.fragment: phn mnh c nn (nu nn khng c dng, phn mnh dng plaintext).Ch rng,ci ny tng t nh thut ton HMAC.im khc bit l 2 phn m (pad) c || trong SSLv3 vc XOR trong HMAC.Thut ton MAC trong SSLv3 c da trn bn phc tho Internet ban u choHMAC.Phin bn gn nht ca HMAC c nh ngha trong RFC 2104,s dng XOR.K tip, message nn cng thm MAC c m ha theo phng php m ha i xng.M ha c thkhng lm tng chiu di ni dung hn 1024 byte,v vy chiu di tng cng khng vt qu 214+2048. Cc thutton m ha sau c cho php: Block cipher (M ha khi) Stream cipher (M ha lung)Thut ton Kch thc kha Thut tonKch thc kha AES 128,256RC4-4040IDEA 128RC4-128128 RC2-40 40 DES-40 40 DES563DES 168 Fortezza 80Fortezza c th c s dng trong mc tiu m ha smart card.Vi m ha stream (lung),message nn cng thm MAC c m ha.Ch rng MAC c tnh ton trckhi m ha xy ra v MAC c m ha cng vi plaintext hoc l plaintext nn.Vi m ha block (khi),MAC c th c m thm trc khi m ha.Phn m thm (padding) c dng gmnhiu byte m c theo sau bi 1 byte ch r chiu di ca phn m.Tng s lng m vo l lng nh nhtsao cho tng kch thc d liu c m ha (plaintext +MAC + padding) l 1 bi s ca chiu di khi m ha.Vd, plaintext (hoc text nn nu nn c dng) l 58 byte, vi MAC l 20 byte (dng SHA-1), c m ha vichiu di block l 8 byte (nh DES..).Cng vi byte padding.length ,n sinh ra tng cng 79 byte. to ra 1 snguyn l bi ca 8,1 byte m c thm vo.Bc cui cng ca x l SSL Record Protocol l gn thm vo1 header ,bao gm cc mc sau: Content Type (8 bit): giao thc lp trn c dng x l phn mnh i km. Major Version (8 bit): ch ra phin bn SSL ti a c dng. V d, SSLv3,gi tr ny l 3. Minor Version (8 bit) : ch ra phin bn ti thiu c dng.V d, SSLv3 ,gi tr ny l 0. Compressed Length (16 bit) : chiu di theo byte ca phn mnh plaintext (hoc chiu di theo byte ca phn mnh nn nu nn c dng).Ga tr ln nht l 214+2048.Cc loi ni dung c nh ngha l change_cipher_spec,alert,handshake, v application_data.Ba ci u tin lcc giao thc c trng-SSL,c bn n trong phn k tip.Ch rng khng c s khc bit no c to ragia cc ng dng (nh HTTP..) c th dng SSL,ni dung d liu c to ra bi cc ng dng th khng trongsut i vi SSL.Secure Socket Layer12 13. PTIT 2009 ti mn Bo mt thng tinHnh sau minh ha nh dng SSL record.I.4 Giao thc SSL Change Cipher Spec :Giao thc SSL Change Cipher Spec l giao thc n gin nht trong ba giao thc c trng ca SSL m s dnggiao thc SSL Record . Giao thc ny bao gm mt message n 1 byte gi tr l 1. Mc ch chnh ca messageny l sinh ra trng thi tip theo gn vo trng thi hin ti,v trng thi hin ti cp nht li b m ha sdng trn kt ni ny.I.5 Giao thc SSL Alert :Giao thc SSL Alert c dng truyn cnh bo lin kt SSL vi u cui bn kia.Nh vi nhng ng dngkhc s dng SSL, alert messages c nn v m ha, c ch nh bi trng thi hin ti.Mi message trong giao thc ny gm 2 bytes .Byte u tin gi gi tr cnh bo(1) hoc nguy him(2) thngbo nghim ngt ca message.Nu mc l nguy him,SSL lp tc chp dt kt ni.Nhng kt ni cng phinkhc vn c th tip tc nhng s khng kt ni no khc trn phin ny c khi to thm.Byte th hai cha mtm ch ra cnh bo c trng.u tin , chng ta lit k nhng cnh bo m lun mc nguy him ( c nhngha t nhng thng s SSL):unexpected_message: message khng thch hp.bad_record_mac: MAC khng chnh xc.decompression_failure: vic gii nn nhn input khng thch hp(v d nh khng th gii nn hoc giinn ln hn di ti a cho php).handshake_failure: bn gi khng th thng lng mt b chp nhn c ca cc thng s bo mtc a ra t nhng la chn c sn.Secure Socket Layer13 14. PTIT 2009 ti mn Bo mt thng tinillegal_parameter: mt trng trong mt handshake message th vt khi dy hoc tri vi nhng trngkhcPhn cn li ca cnh bo th nh sau:close_notify: thng bo cho bn nhn rng bn gi s khng gi thm message no na trong kt niny.Mi nhm th c yu cu gi mt close_notify cnh bo trc khi kt thc phn ghi ca mt kt ni.no_certificate: c th c gi tr li cho mt yu cu certificate nu khng certificate thch hp no csn.bad_certificate: certificate nhn c th khng hp l(v d nh cha mt ch k khng xc minh).unsupported_certificate: dng certificate nhn c th khng h tr.certificate_revoked: certificate b thu hi bi nh cung cp.certificate_expired: certificate ht hn ng k.certificate_unknown: mt s pht sinh khng ni r xut hin trong qu trnh x k certificate lm cho nkhng th chp nhn. Secure Socket Layer 14 15. PTIT 2009 ti mn Bo mt thng tinI.6 Giao thc SSL Handshake :Phn kh nut nht ca SSL l giao thc Handshake.Giao thc ny cho php server v client chng thc vi nhauv thng lng c ch m ha , thut ton MAC v kha mt m c s dng bo v d liu c gi trongSSL record.Giao thc SSL Handshake thng c s dng trc khi d liu ca ng dng c truyn i.Giao thc SSL Handshake bao gm mt lot nhng message trao i gia client v server .Mi message c batrng:Type (1 byte): ch ra mt trong mi dng message .Length (3 bytes): di ca message theo bytes.Content (>=0 bytes): tham s i km vi message ny, c lit k trong Hnh I.5aHnh I.5a Cc kiu message giao thc SSL handshake Kiu messageThng sHello_requestNullClient_hello version, random, session id, cipher suite, compression methodServer_hello version, random, session id, cipher suite, compression methodCertificatechain of X.509v3 certificatesServer_key_exchangeparameters, signatureCertificate_requesttype, authoritiesServer_doneNullCertificate_verify signatureClient_key_exchangeparameters, signatureFinished hash valueHnh I.5b th hin trao i lc ban u cn c thit lp mt kt ni logic gia client v server.Vic trao i c thxem nh c bn giai on.Secure Socket Layer15 16. PTIT 2009 ti mn Bo mt thng tinHnh I.5b C ch giao thc SSL HandshakeI.6.1 Giai on 1 Thit lp kh nng bo mt :Giai on ny c dung bt u mt kt ni logic v thit lp kh nng bo mt m s lin kt vi n.Vic traoi th c khi to bi client bng vic gi mt client_hello message vi nhng thng s sau y:Version: version SSL mi nht m client bit.Random: mt cu trc sinh ra ngu nhin t client, bao gm mt nhn thi gian 32 bit v 28 bytes sinh bimt b sinh s ngu nhin an ton. Nhng gi tr ny phc v cho ln ny v s dng sut qu trnh trao ikha ngn tn cng lp li. Secure Socket Layer 16 17. PTIT 2009 ti mn Bo mt thng tin Session ID: mt ID ca phin c chiu di thay i c.SessionID khc 0 ngha l client mun cp nht tham s ca mt kt ni ang tn ti hay to mt kt ni mi trn phin ny.SessionID = 0 ch ra rng client mun thit lp mt kt ni mi trn mt phin mi. CipherSuite: y l 1 danh sch m cha nhng b bin dch ca nhng thut ton m ha c h tr bi client, tham kho theo th t gim dn. Mi thnh phn trong danh sch (mi b m ha) nh ngha c mt kha trao i v mt CipherSpec, nhng thng s ny s c bn n sau. Compression Method: y l danh sch ca nhng phng thc nn m client h tr.Sau khi gi client_hello message, client ch nhn server_hello message m cha cng thng s vi client_hellomessage.Vi server_hello message, nhng tha thun km theo c p dng. Trng Version cha version thphn c ngh bi client v cao nht c h tr bi sever.Trng Random c sinh ra bi server v c lpvi trng Random ca client. Nu trng SessionID ca client khc 0, th gi tr tng t c dng bi server,ngc li th trng SessionID ca server cha gi tr ca mt phin mi. Trng CipherSuite cha b m ha chnbi server t nhng xut ca client. Trng Compression cha phng thc nn chn bi server t nhng xut ca client.Thnh phn u tin ca thng s Cipher Suite l phng thc trao i kha (v d nh bng cch no nhng kham ha cho vic m ha thng thng v MAC c trao i ). Nhng phng thc trao i kha sau c h tr: RSA: kha b mt c m ha vi kha cng khai RSA ca bn nhn. Mt public-key certificate cho kha bn nhn phi c to sn. Fixed Diffie-Hellman: y l s trao i kha Diffie-Hellman trong certificate ca server cha cc thng s cng khai Diffie-Hellman c k bi Certificate Authority (CA) .Ngha l certificate kha cng khai cha cc thng s kha cng khai Diffie-Hellman. Client cha sn cc thng s kha cng khai Diffie- Hellman trong certificate nu chng thc client c yu cu hoc trong mt message trao i kha.Phng thc ny mang li kt qu mt kha b mt c nh gia hai u, da trn tnh ton Diffie- Hellman s dng kha cng khai c nh. Ephemeral Diffie-Hellman: Phng php c s dng to kha ephemeral(tm thi,1 ln) kha tm thi. Trong trng hp ny, kha cng khai Diffie-Hellman c trao i,c k s dng kha b mt RSA hoc DSS ca bn gi.Bn nhn c th s dng kha cng khai tng ng xc minh ch k. Certificate c s dng xc thc kha cng khai. iu ny nh l s bo m nht ca ba la chn Diffie-Hellman bi v n l kt qu ca s tm thi v kha xc thc. Anonymous Diffie-Hellman: thut ton Diffie-Hellman c bn c s dng, khng chng thc.Ngha l mi ln mt bn gi thng s Diffie-Hellman cng khai ca n cho bn kia th khng xc thc.iu ny gn nh l c th b tn cng bi tn cng Man-in-the-middle ,trong k tn cng iu khin c nhm anonymous Diffie-Hellman. Fortezza: phng php nh ngha cho lc Fortezza.nh ngha km theo cho mt phng php trao i kha l CipherSpec , bao gm nhng trng sau : CipherAlgorithm: mt vi thut ton k n : RC4, RC2, DES, 3DES, DES40, IDEA, Fortezza. MACAlgorithm: MD5 hoc SHA-1. CipherType: lung hoc khi. Secure Socket Layer 17 18. PTIT 2009 ti mn Bo mt thng tinIsExportable: True hoc False.HashSize: 0, 16 (cho MD5), hay 20 (cho SHA-1) bytes.Key Material: th t ca cc bytes m cha d liu c dng trong sinh kha .IV Size: kch thc ca gi tr khi to cho m ha Cipher Block Chaining (CBC).I.6.2 Giai on 2 Xc thc server v trao i kha :Server bt u giai on ny bng cch gi certificate ca n nu n cn c xc thc; thng ip chamt hoc mt chui certificate(chng thc) X.509. Thng ip chng thc c yu cu cho bt k mtphng php trao i kha no c tha thun, ngoi tr anonymous Diffie-Hellman.Ch rng nu fixedDiffie-Hellman c dng,th thng ip chng thc c chc nng nh l thng ip trao i kha caserver v n cha cc tham s Diffie-Hellman cng khai ca server.Sau mt thng ip server_key_exchange c gi i nu n c yu cu.N khng c yu cutrong 2 trng hp sau: (1) Server gi mt certificate vi cc tham s fixed Diffie-Hellman. (2) Trao i kho RSA c dng.Thng ip server_key_exchange cn cho cc trng hp sau:-Anonymous Diffie-Hellman : Ni dung thng ip bao gm hai gi tr Diffie-Hellman ton cc(mt s nguyn t v mt s nguyn t cng nhau vi s ) cng vi kha Diffie- Hellman ca server.- Ephemeral Diffie-Hellman : ni dung thng ip bao gm 3 tham s Diffie-Hellman cung cp cho anonymous Diffie-Hellman,cng vi mt ch k ca cc tham s ny.- Trao i kha RSA,m theo server s dng RSA nhng c mt kha ch k ch ca RSA. Theo ,client khng th gi i cch n gin mt kha b mt c m ha vi kha cng khai/b mt RSA ph v s dng thng ip server_key_exchanged gi kha cng khai.Ni dung thng ip bao gm hai tham s ca kha cng khai RSA ph(s m v s d) cng vi mt ch k ca cc tham s ny.- Fortezza: mt vi chi tit thm v ch k c m bo. Nh thng l,mt ch k c to ra bi vic ly m bm ca mt thng ip v m ha n vi kha b mt ca bn gi.Trong trng hp ny m bm c nh ngha:Hash (ClientHello.random||ServerHello.random||ServerParams)V vy m bm bao gm khng ch cc thng s Diffie-Hellman hay RSA,m cn c hai s ngu nhin t thngip hello khi to.iu ny m bo chng li tn cng replay v misrepresentation(gi dng).Trong trng hpch k DSS,m bm c biu din s dng gii thut SHA-1.Trong trng hp ch k RSA,c m bm MD5 v SHA-1 u c tnh ton, v s ni nhau ca hai m bm(36byte) c m ho vi kha b mt ca server.K n, mt nonanonymous server(server khng dng anonymous Diffie-Hellman) c th yu cu mtcertificate t client.Mt thng ip certificate_request bao gm hai thng s certificate_type vcertificate_authorities. Kiu certificate ch ra gii thut kha cng khai,v n dng:- RSA,ch dng ch k- DSS,ch dng ch k- RSA cho Diffie-Hellman thch hp, trong trng hp ny ch k c dng ch xc thc,bng cch gi dng certificate c k vi RSA. Secure Socket Layer18 19. PTIT 2009 ti mn Bo mt thng tin- DSS cho fixed Diffie-Hellman, mt ln na,ch dng xc thc.- RSA cho ephemeral Diffie-Hellman.- DSS cho ephemeral Diffie-Hellman.- Fortezza. Thng s th 2 ca thng ip certificate_request l mt danh sch cc tn ca nhng CA c bit c chp nhn. Thng ip cui cng trong giai on 2, v l mt phn lun c yu cu,l thng ip Server_done,m c gi cho server ch ra im cui ca thng ip cui ca server_hello v cc message i km.Sau khi gi thng ip,server s ch hi p ca client.Thng ip ny khng c tham s. I.6.3 Giai on 3 Xc thc client v trao i kha : Trong khi nhn thng ip server_done, client s xc nhn xem server cung cp mt chng ch hp l hay cha nuc yu cu v kim tra xem cc thng s ca server_hello c chp nhn hay khng.Nu tt c u tho mn,client gi mt hay nhiu message tr li cho server. Nu server yu cu mt certificate,client bt u giai on nybng cch gi 1 thng ip certificate.Nu khng c certificate ph hp no hp l, client gi mt cnh bono_certificate thay th. K n l thng ip client_key_exchange phi c gi i trong giai on ny.Ni dung ca thng ip ph thucvo kiu trao i kha. Nh sau:- RSA: client sinh mt trng 48 byte pre-master secret v m ha vi kha cng khai t chng thc ca serverhoc kha RSA ph t thng ip server_key_exchange. N dng tnh ton mt master secret(s c nisau).- Ephemeral hoc Anonymous Diffie-Hellman: cc tham s Diffie-hellman cng khai ca client c gi i.- Fixed Diffie-Hellman: cc tham s Diffie-Hellman cng khai ca client c gi i trong mt thng ipcertificate,v vy ni dung ca thng ip l null.- Fortezza: cc tham s Fortezza ca client c gi i. Cui cng,trong giai on ny,client s gi 1 message certificate_verify cung cp xc thc tng minh ca mtchng ch client.Thng ip ny ch c gi theo sau bt k mt client certificate no nh du l c khnng(ngha l tt c certificate ngoi tr nhng ci cha tham s fixed Diffie-Hellman). Thng ip ny nh dumt m bm da trn cc thng ip c trc,c nh ngha nh sau:CertificateVerify.signature.md5_hashMD5(master_secret || pad_2 || MD5(handshake_messages || master_secret || pad_1));Certificate.signature.sha_hashSHA(master_secret || pad_2 || SHA(handshake_messages || master_secret || pad_1)); Vi pad_1 v pad_2 l cc gi tr c nh ngha sm hn cho MAC, handshake_messages xem xt n tt c ccthng ip giao thc bt tay c gi i hay c nhn bt u t client_hello nhng khng bao gm thng ipny,v master_secret l kha b mt c tnh ton m qu trnh xy dng s c tm hiu sau. Nu kha b mtca user l DSS, th n c dng m ha m bm SHA-1. Nu kha b mt ca user l RSA, n c dng m ha chui m bm MD5 v SHA-1. Trong trng hp khc, mc ch l xc minh quyn s hu ca client vi kha b mt cho chng thcclient.Cho d l bt c ai ang lm dng certificate ca client th cng s khng th gi message ny. I.6.4 Giai on 4 Kt thc : Giai on ny hon thnh thit lp ca mt kt ni an ton,Client gi mt thng ip change_cipher_spec v chpCipherSpec m vo CipherSpec hin ti.Ch rng thng ip ny khng c xem l mt phn ca giao thc bttay nhng c gi i s dng giao thc Change Cipher Spec. Client sau ngay lp tc gi thng ip kt thctheo gii thut mi, vi cc kha v cc b mt.Thng ip kt thc xc minh xem qu trnh trao i kha v xcthc c thnh cng hay khng.ni dung ca thng ip hon tt l mt chui ca hai gi tr bm : Secure Socket Layer19 20. PTIT 2009 ti mn Bo mt thng tin MD5(master_secret || pad2 || MD5(handshake_messages || Sender || master_secret || pad1)) SHA(master_secret || pad2 || SHA(handshake_messages || Sender || master_secret || pad1)) Ti bn gi l mt m m xc nh rng bn gi l client , v handshake_messages l tt c d liu t tt cthng ip bt tay tr ln nhng khng bao gm thng ip ny. Khi p li hai thng ip ny,server gi thng ip change_cipher_spec ca chnh n, chuyn i trng thi treocho cipherSpec hin ti v gi thng ip kt thc ca n i. im ny qu trnh bt tay hon thnh v client vserver c th bt u trao i d liu lp ng dng. I.7 Tnh ton m ha : Gm vic to ra 1 shared master secret bng cch trao i kha, v s sinh ra cc tham s mt m t master secret. I.7.1 Vic to Master Secret : Shared master secret l 1 gi tr one-time 48 byte (384 bits) c sinh ra cho phin ny bng cch trao i kha an ton.Vic to ra gm hai bc:-u tin, mt pre-master-secret c trao i-Th hai, master_secret c tnh ton bng c hai nhm. i vi trao i pre_master_secret, c hai kh nng xy ra: RSA: 48 byte pre_master_secret c sinh ra bi client, m ha vi kha RSA cng khai caserver, v gi cho server.Server gii m ciphertext s dng kha b mt ca n phc hi lipre_master_secret. Diffie-Hellman: c client v server sinh ra kha cng khai Diffie-Hellman. Sau , nhng kha nyc trao i, mi bn biu din vic tnh ton Diffie-Hellman to ra shared_pre_master_secret. C 2 bn tnh ton master_secret nh sau: master_secret = MD5 (pre_master_secret || SHA (A || pre_master_secret ||ClientHello.random || ServerHello.random)) || MD5 (pre_master_secret || SHA (BB || pre_master_secret || ClientHello.random || ServerHello.random)) || MD5 (pre_master_secret || SHA (CCC || pre_master_secret || ClientHello.random || ServerHello.random)) Vi ClientHello.random v ServerHello.random l 2 gi tr s ngu nhin c trao i trong thng ip hello khi to ban u. Secure Socket Layer 20 21. PTIT 2009 ti mn Bo mt thng tinI.7.2 Vic sinh cc tham s m ha :CipherSpec yu cu mt kha xc thc ca client, mt kha xc thc ca server, v mt kha mt m ca client,mt kha mt m ca server, mt vector khi to IV ca client, mt vector khi to IV ca server, m c sinh rat master_secret theo th t .Nhng tham s ny c sinh ra t master_secret bng cch bm master_secretthnh chui lin tc cc byte bo mt vi chiu di va ca nhng tt c cc tham s cn thit .Vic sinh nguyn liu kha t master_secret s dng cng nh dng cho vic sinh ra master_secret tpre_master_secret:key_block = MD5(master_secret || SHA(A || master_secret || ServerHello.random || ClientHello.random)) || MD5(master_secret || SHA(BB || master_secret || ServerHello.random || ClientHello.random)) || MD5(master_secret || SHA(CCC || master_secret || ServerHello.random || ClientHello.random)) || . .Cho n khi s output c pht sinh.Kt qu ca cu trc gii thut ny l hm sinh s ngu nhin.Ta c th xem master_secret nh gi tr ngu nhin a ht ging sinh s ngu nhin vo trong hm sinh s ngunhin.Cc s ngu nhin client v server c th c nhn nh l cc gi tr khng ng tin cy(salt value) lm phctp s gii m cc mt m.Secure Socket Layer 21 22. PTIT 2009 ti mn Bo mt thng tin I.8 Transport Layer Security : I.8.1 Version Number :nh dng ca mt record TLS ging nh dng ca record SSL, v cc trng trong phn header cng c nghaging nhau.Mt s khc bit l trong cc gi tr phin bn TLS hin ti,bn chnh l 3 v bn ph l 1. I.8.2 Message Authentication Code :C 2 im khc bit gia SSLv3 v TLS MAC schemes: gii thut thc t v phm vi ca php tnh MAC.TLS to ra vic s dng gii thut HMAC c nh ngha trong RFC 2104.Nh li,HMAC c nh ngha nhsau:HMACK(M) = H[(K+ opad)||H[(K+ ipad)||M]] Vi : H: hm bm nhng(dnh cho TLS, hoc MD5 hoc SHA-1) M: thng ip u ra i vi HMACK+ : kha b mt m cc s 0 vo pha bn tri kt qu bng vi chiu di khi m bm(i vi MD5, v SHA-1, chiu di khi bng 512 bits) Secure Socket Layer 22 23. PTIT 2009 ti mn Bo mt thng tinIpad =00110110(36H) lp li 64 ln (512 bits)Opad =01011100(5CH) lp li 64 ln (512 bits)SSLv3 dng cng gii thut, ngoi tr cc byte m c ni vo vo kha b mt hn l c XOR vi kha bmt c m vo chiu di khi.Mc an ton cng ging trong c 2 trng hp.i vi TLS, php tnh ton MAC hon thnh cc trng hp c ch ra trong ng thc sau:HMAC_hash(MAC_write_secret, seq_num || TLSCompressed.type || TLSCompressed.version ||TLSCompressed.length || TLSCompressed.fragment)Php ton MAC bao gm tt c cc trng c hm cha bi php tnh ton SSLv3, cng vi trngTLSCompresses.version, m l version ca giao thc ang c dng.I.8.3 Hm tnh s nhu nhin :TLS to cch s dng hm to s ngu nhin dng cho PRF m rng cc secret(phn b mt) thnh cc khi dliu cho mc ch sinh kha hay ph chun.i tng l to ra cch s dng cc gi tr shared secret nh c linh vi nhau, nhng pht sinh cc khi di hn theo cch an ton khi s tn cng da trn hm bm vMACx.PRF da trn hm m rng d liu sau:P_hash(secret, seed) = HMAC_hash(secret, A(1) || seed) ||HMAC_hash(secret, A(2) || seed) || HMAC_hash(secret, A(3) || seed) || ...Vi A() c nh ngha:A(0)=seedA(i) =HMAC_hash(secret,A(i-1))Secure Socket Layer 23 24. PTIT 2009 ti mn Bo mt thng tinHm m rng d liu to cch s dng gii thut HMAC, vi hoc MD5 hoc SHA-1 nh l trn c s hmbm.Nh ta c th thy,P_hash c th lp i lp li nhiu ln nh s cn thit to ra s lng d liu c yucu.V d, nu P_SHA-1 c dng sinh ra 64 byte d liu,n s c lp i lp li 4 ln to ra 80 byte dliu,m 16 byte cui b loi b.Trong trng hp ny,P_MD5 cng s c lp li 4 ln,to ra chnh xc 64 bytesd liu.Ch rng mi ln lp li s gi 2 hm thc thi HMAC, mi mt ci s quay sang gi 2 hm thc thi trn cs gii thut hm bm. to ra PRF an ton n mc c th,n s dng 2 gii thut bm theo cch m s m bo s an ton ca n nugii thut vn cn bo mt.PRF c nh ngha :hash(ClientHello.random || ServerHello.random || ServerParams)PRF ly khi u vo mt gi tr b mt, mt nhn xc nh, v mt gi tr ht ging(seed) v to ra mt output cchiu di ty .Output c to bng cch phn ct gi tr b mt thnh hai na (S1 v S2 v biu din P_hash mina,s dng MD5 mt na v SHA-1 na khc.Hai kt qu c thc hin bi php XOR to ra output, chomc ch ny,P_MD5 nhn chung phi lp li nhiu ln hn P_SHA-1 to mt lng d liu ngang bng choinput bng hm XOR)I.8.4 M cnh bo :TLS h tr tt c cc m alert code c nh ngha trong SSLv3 vi ngoi l no_certificate. Mt s cc code thmvo c nh ngha trong TLS, sau y l mt s cnh bo mc nguy him: decryption_failed : mt cipher text c gii m theo cch sai, hoc n khng phi l php nhn ca chiu dikhi hoc gi tr m ca n,khi kim tra l khng ng. Secure Socket Layer 24 25. PTIT 2009 ti mn Bo mt thng tin record_overflow:mt TLS record c nhn vi mt payload(ciphertext) c chiu di 214+2048 bytes, hocciphertext c gii m vi chiu di ln hn 214+1024 byte. unknown_ca : mt chui certificate hp l hoc 1 phn chui c nhn,nhng certificate khng c chpnhn bi v CA certificate khng th c cp pht hoc khng th to ra kt ni vi 1 CA hiu bit,tin cy. access_defined: mt certificate hp l c nhn, v khi access_control c tha nhn, sender quyt nhkhng thc thi vi tha thun. decord_error : mt thng ip khng th c gii m v 1 trng b thiu range c bit hoc chiu di camessage khng ng. export_restriction : mt tha thun khng c chp nhn vi vic xut ra cc hn ch trn chiu di kha bpht hin. protocol_version: phin bn giao thc m client n lc tha thun c nhn thy nhng khng h tr. insufficient_security: tr v thay th handshake_failure khi tha thun b tht bi 1 cch c bit bi v serveryu cu cipher nhiu bo mt hn nhng ci khc c h tr bi client. internal_error: mt li bn trong khng lin h vi cp tng ng hoc s sa li ca giao thc to rakhng th tip tc.Phn cn li ca cc cnh bo mi bao gm: decrypt_error: ton hng m ha bt tay b h, bao gm khng th xc minh 1 ch k,m ha 1 trao i khahay cng nhn 1 thng ip hon tt. user_canceled: qu trnh bt tay ny b hon li v 1 s l do khng lin quan n s tht bi giao thc. no_renegotiation: gi i bi client trong phn p li client hello sau khi thit lp bt tay.hoc nhng thngip ny s c kt qu bnh thng trong vic tha thun li,nhng cnh bo ny ch ra rng sender khng ththa thun.Thng ip ny lun lun l 1 cnh bo(warning).I.8.5 Cipher suite :C nhiu s khc nhau nh gia cc cipher suite sn c di SSLv3 v di TLS: Trao i kha:TLS h tr tt c cc cng ngh trao i kha ca SSLv3 vi ngoi l ca Fortezza. Cc gii thut m ha i xng:TLS bao gm tt c cc gii thut m ha i xng c tm thy trongSSLv3,vi ngoi l ca Fortezza.I.8.6 Cc dng client certificate :TLS nh ngha c kiu certificate sau y c yu cu trong thng ipcertificate_request:rsa_sign,dss_sign,rsa_fixed_dh, v dss_fixed_dh. Tt c nhng kiu ny c nh ngha trongSSLv3. Thm vo ,SSLv3 bao gm rsa_ephemeral_dh, dss_ephemeral_dh v fortezza_kea.Ephemeral Diffie-Hellman bao gm nh du cc tham s Difie-Hellman vi hoc RSA hoc DSS, vi TLS,rsa_sign v kiu nh du ring khng cn thit nh du cc tham s Diffie-Hellman.TLS khng bao gm hthng Fortezza. Secure Socket Layer 25 26. PTIT 2009 ti mn Bo mt thng tinI.8.7 Certificate Verify v Finished Message :Trong thng ip TLS_certificate_verify, m bm MD5 v SHA-1 c tnh ton ch trn cc thng ip bttay(handshake_message).Nh li rng SSLv3 tnh ton hm bm cn bao gm master_secret v m.Cc trngthm v ny tht bi trong vic cng thm bo mt khng c thm vo.Khi cc thng ip hon tt trong SSLv3, thng ip kt thc trong TLS l 1 m bm da trnshared_master_secret, thng ip bt tay trc, v mt nhn xc nh client hay server, vic tnh ton c i chtkhc bit.i vi TLS ta c:PRF(master_secret, finished_label, MD5(handshake_messages)|| SHA-1(handshake_messages))Vi finished_label l chui client_finished i vi client v server finished i vi server.I.8.8 Tnh ton m ha :Pre_master_secret i vi TLS c tnh ton cng 1 cch nh trong SSLv3.Nh trong SSLv3, master_secret trongTLS c tnh ton nh 1 hm bm ca pre_master_secret v hai s ngu nhin hello.Cng thc ca php tnh tonTLS khc vi cng thc tnh ca SSLv3,c nh ngha nh sau:master_secret = PRF(pre_master_secret, "master secret", ClientHello.random || ServerHello.random)Gii thut biu din cho n khi 48 byte ca output s ngu nhin c to ra.Php tnh ton ca khi vt liukey(MAC secret keys,kha m ha phin, v ma trn khi to IVs) c nh ngha nh sau:key_block = PRF(master_secret,"key expansion",SecurityParameters.server_random ||SecurityParameters.client_random)Cho n khi output c sinh ra.Nh vi SSLv3,key_block l 1 hm ca master_secret v client v serverrandom numbers, nhng vi TLS gii thut thc t l khc bit.I.8.9 Phn m :Trong SSL, phn m thm vo trc m ha d liu user l s lng nh nht c yu cu m kch thctng ca d liu c m ha l mt php nhn ca chiu di khi ca cipher.Trong TLS, padding c th l bt ks lng no m c kt qu trong mt tng m l mt php nhn ca chiu di khi ca cipher ln n 1 gi tr lnnht l 255 byte.V d, nu 1 plaintext (hoc vn bn nn c dng) cng vi MAC+padding length byte l di 79byte.Sau chiu di padding,tnh theo byte, c th l 1,9,17 v hn na,n 249. Chiu di phn m ty bin cth chng li cc tn cng da trn mt php phn tch cc chiu di ca cc thng ip trao i.Secure Socket Layer26 27. PTIT 2009 ti mn Bo mt thng tinChng II : II.1 Quan h gia cc Class : lin lc mt cch bo mt, c hai u ca kt ni phi kch hot SSL. Trong JSSE API, nhng lp u cui cakt ni l SSLSocket v SSLEngine . Trong biu bn di, nhng class ln c dng toSSLSocket/SSLEngines c sp xp theo trt t logic.Mt SSLSocket th c to bi mt SSLSocketFactory hoc mt SSLServerSocket cho vic nhn vomt kt ni inbound.( mt khc, mt SSLServerSocket c to bi mt SSLServerSocketFactory) . Ccc i tng SSLSocketFactory v SSLServerSocketFactory c to bi SSLContext. MtSSLEngine c to mt cch trc tip bi SSLContext, v da vo ng dng qun l tt c I/O.Ghi ch: Khi s dng SSLSockets/SSLEngines ta nn kim tra xc thc u cui trc khi gi d liu. LpSSLSocket/SSLEngine s khng t ng xc minh, v d hostname trong mt URL trng vi hostname trongxc thc u cui. ng dng c th b li dng URL spoofing nu hostname khng c xc minhC hai cch s dng v khi to mt SSLContext: Secure Socket Layer 27 28. PTIT 2009 ti mn Bo mt thng tinn gin nht l gi phng thc tnh getDefault trn lp SSLSocketFactory hocSSLServerSocketFactory . Nhng phng thc ny to mt SSLContext mc nh vi mtKeyManager, TrustManager v mt b khi to s b mt ngu nhin. (MtKeyManagerFactory v TrustManagerFactory mc nh c s dng to KeyManager vTrustManager tng ng.) Key material c tm thy trong keystore/truststore mc nh, c nh rbi tnh cht h thng m t trong Customizing the Default Key and Trust Stores, Store Types, and StorePasswords.Phng thc trao i bn gi phn ln iu khin cch hot ng ca context c to th gi l phngthc tnh getInstance trn lp SSLContext , sau khi to context bng cch gi phng thcring init ca trng hp . Mt thc th ca phng thc init mang ba phn sau: mt dy i tngKeyManager, mt dy i tng TrustManager v mt b sinh s b mt ngu nhinSecureRandom. i tng KeyManager v TrustManager c to bi vic b sung ccinterface(s) thch hp hoc dng lp KeyManagerFactory v TrustManagerFactory pht sinhcc b sung. KeyManagerFactory v TrustManagerFactory c th c khi to vi mi keymaterial cha trong KeyStore qua phng thc TrustManagerFactory/KeyManagerFactoryinit. Cui cng phng thc getTrustManagers (trong TrustManagerFactory) v phngthc getKeyManagers (trong KeyManagerFactory) c th c gi s dng nhng chui catrust hoc key managers,mt cho mi loi ca trust hoc key material.Mi mt kt ni SSL c khi to th mt SSLSession c to cha cc thng tin a dng, nh l ID khito, b m ha c dng , .v.v. . SSLSession khi c dng th hin mi lin h xy ra bn trn v thng tintrng thi gia hai thc th . Mi kt ni SSL bao gm 1 phin ti mt thi im nhng phin th li c th cdng bi nhiu kt ni gia nhng thc th ,ng thi hoc theo th t.II.2 Cc Class v Interface chnh :II.2.1 Lp SocketFactory v ServerSocketFactory :Lp tru tng javax.net.SocketFactory c dng to socket. N phi l subclassed ca cc factorieskhc, m to nhng subclasses ring bit ca sockets v v vy cung cp mt framework tng qut cho phn thmvo ca chc nng public socket-level. (xem v d SSLSocketFatory )Lp javax.net.ServerSocketFactory th tng t lp SocketFactory, nhng n ch dnh ring chovic to server sockets.Socket factories l cch n gin cc chnh sch lin quan n sockets c xy dng,vic thit lp sockets theomt cch no th khng yu cu cu hnh ring bit cho code m i hi:V s a hnh ca factories v sockets, nhng dng khc nhau ca sockets c th cng dng code ng dngm b qua cc dng khc nhau ca factories.Factories c th t ty chnh thng s vi cc thng s s dng trong xy dng socket. V d factories tiu chnh tr v sockets vi nhng timeouts mng khc nhau hoc thng s security cu hnh .Sockets tr v ng dng subclasses ca java.net.Socket (hay javax.net.ssl.SSLSocket), chonn ta c th trnh by mt APIs mi cho nhng c trng nh nn , bo mt ,nh du record,la chn thngk, hay vt tng la.II2.2 Lp SSLSocketFactory v SSLServerSocketFactory :Mt javax.net.ssl.SSLSocketFactory hot ng nh mt factory cho vic to secure sockets. Lp nyl mt phn lp tru tng ca javax.net.SocketFatorySecure Socket Layer 28 29. PTIT 2009 ti mn Bo mt thng tinSecure socket factories ng gi chi tit ca vic to v cu hnh ban u secure sockets. Bao gm xc thc keys,cng nhn certificate u bn kia, kch hot b m ha v tng t.Lp javax.net.ssl.SSLServerSocketFactory th tng t lp SSLSocketFactory, nhng c sdng ring cho vic to server sockets.To mt SSLSocketFactory :C ba cch c bn to SSLSocketFactory:Ly factory mc nh bng vic gi phng thc tnh SSLSocketFactory.getDefault.Nhn mt factory nh l 1 thng s API . l code cn to sockets nhng khng quan tm chi tit nh thno sockets c cu hnh c th bao gm 1 phng thc vi 1 thng s SSLSocketFactory c gibi clients ch r SSLSocketFactory dng to sockets,vd : javax.net.ssl.HttpsURLConnection.Xy dng mt factory mi vi cch chy c cu hnh ring bit.Factory mc nh c cu hnh c trng h tr chng thc server ch khi sockets c to bi mt factory mcnh khng r r bt c thng tin no v v client hn mt TCP socket bnh thng lm.Nhiu lp to v dng sockets th khng cn bit chi tit ca cch to sockets.Vic to sockets qua mt socketsfactory c lt qua nh mt thng s nh l mt cch tt cch ly chi tit ca cu hnh socket v tng s tidng ca lp m to v dng sockets.Bn c th to mt socket factory mi bng vic trin khai socket factory subclass ca bn hay s dng lp khc mhot ng nh mt factory cho socket factories. Mt v d l lp SSLContext m c cung cp trong JSSEnh l mt lp cung cp cu hnh c s.II.2.3 Lp SSLSocket v SSLServerSocket :Lp javax.net.ssl.SSLSocket l mt subclass ca lp chun java.net.Socket . N h tr tt cphng thc socket chun v thm nhng phng thc b sung c trng vo secure sockets. C bit ca lp ny lng gi SSLContext bn di nhng g m n to. C nhng APIs iu khin vic to secure socket sessions chomt socket ring bit nhng vic qun l trust v key khng c che y mt cch trc tip.Lp javax.net.ssl.SSLServerSocket th tng t lp SSLSocket ,nhng c dng c trng chocho vic to server sockets. ngn spoofing u bn,bn nn lun xc minh u cui cho mt SSLSocket.Ghi ch b sung : do s phc tp ca giao thc SSL v TLS ,n kh d on c hay khng bytes vo trn mtkt ni l handshake hay d liu ng dng,v nh th no d liu c th tc ng trng thi kt ni hin ti (ngoitr trng hp qu trnh b block). Trong thc thi ca Sun JSSE, phng thc available()trn i tng tc t SSLSocket.getInputStream()tr v tng s ca bytes d liu ng dng gii m thnh cng tkt ni kt ni SSL nhng lc ny cha c bi ng dng.To mt SSLSocket :SSLSocket c th to c bng hai cch. Th nht, mt SSLSocket c th to bi SSLSocketFactory qua mtvi phng thc createSocket trn lp . Cch th hai to SSLSockets qua phng thc accept trn lpSSLServerSocket . Secure Socket Layer 29 30. PTIT 2009 ti mn Bo mt thng tin II.2.4 Non-blocking I/O vi SSLEngine :SSL/TLS ang ngy cng ph bin. N c dng trong cc ng dng a dng trn mt din rng cc nn my tnh. Theo s ph bin hin nay dn n yu cu s dng n vi nhng I/O v m hnh chui khc nhau m thamn hiu sut , kh nng , theo di v nhng yu cu khc ca ng dng. l s i hi s dng n trong trongnhng knh I/O blocking v non-blocking , I/O khng ng b, cc lung input v output a dng , v nhng bm byte. l s yu cu n trong mi trng nhy cm c bin i v hiu sut cao m yu cu qun l hngngn network connections.Trc J2SE 5 , JSSE API h tr ch mt khi nim tru tng transport n : lung sockets nn thng quaSSLSocket. Trong khi dng ny tng thch vi nhiu ng dng , n khng gp phi nhng yu cu ca ng dngm cn dng I/O khc nhau hay m hnh lin kt. Trong 1.5.0 , mt khi nim tru tng mi c gii thiu cho php ng dng s dng giao thc SSL/TLS trong mt ng vn chuyn c lp , v vy nhng ng dng tdo chn cch thc vn chuyn v m hnh tnh ton tt nht m n cn. N cn thch nghi vi nhiu m hnh linkt. iu ny cho php mt cch hiu qu I/O v lin kt vo ng dng . Bi v tnh linh hot ny , ng dng bygi phi qun l I/O v lin kt ( nhng topic phc tp vo trong chnh n) cng nh nm r giao thc SSL/TLS.Mt khi nim tru tng mi cho ra mt API cao cp : ngi dng nn s dng SSLSocket.Mt ngi mi tip xc API c th t hi Ti sao khng ch c mt SSLSocketChannel m thucjava.nio.channels.SocketChannel?" C hai l do chnh sau :C nhiu cu hi kh v mt SSLSocketChannel th nn nh th no gm c h thng phn lp ca n v n nn lin kt vi Selectors v nhng dng khc ca SocketChannels nh th no.Mi xut th mang li nhiu cu hi hn l tr li . N c gii thch rng khi nim tru thng API mi m rng lm vic vi SSL/TLS yu cu cng mt cc php phn tch quan trng v c th dn n nhng APIs ln v phc tp.Bt k vic thc thi JSSE no cho mt API mi s t do chn la I/O v chin lc tnh ton tt nht , nhng n i nhng chi tit khng thch hp cho yu cu iu khin ng dng . Bt k s thc thi c trng nn tch ri vi cc phn on ng dng.Bng vic tru tng I/O v d liu x l nh nhng chui bytes, kt qu c gii quyt v API mi c th sdng vi bt c m hnh I/O no hin nay v sp ti.Trong khi gii php ny lm I/O v CPU chuyn giao trchnhim cho ngi lp trnh , vic thc thi JSSE th b ngn khng cho tr nn khng s dng c bi v nhng chitit bn trong khng th cu hnh hay thay i.Ngi dng nhng API ngn ng lp trnh lp trnh Java khc nh JGSS v SASL s thng bo nhng iu tngt rng ng dng th cng chu trch nhim cho d liu vn chuyn.SSLEngineLp chnh trong khi nim mi ny l javax.net.ssl.SSLEngine .N ng gi mt SSL/TLS c ch trng thi vcch vn hnh trn b m byte inbound v outbound h tr bi ngi dng ca SSLEngine. Lc sau s minhha lung d liu ca data t ng dng , n SSLEngine , n c ch vn chuyn v quay vSecure Socket Layer 30 31. PTIT 2009 ti mn Bo mt thng tinTng ng dng bn tri cung cp d liu ng dng (plaintext) trong mt application buffer v chuyn n choSSLEngine . SSLEngine x l d liu cha trong buffer hoc bt c d liu handshaking no to ra d liu m ha SSL/TLS vo t vo network buffer cung cp bi ng dng. ng dng th sau chu trch nhim chovic vn chuyn tng ng (bn phi) gi ni dung ca network buffer n u bn.Lc nhn d liu m haSSL/TLS t u bn ( thng qua tng vn chuyn) , ng dng a d liu vo trong network buffer v chuyn nn SSLEngine . SSLEngine x l ni dung network buffer to ra d liu handshaking hay d liu ng dng.V tng th , SSLEngine c th l mt trong nm trng thi : 1. Creation sn sng cu hnh. 2. Initial handshaking - thc thi chng thc v thng lng thng s truyn thng. 3. Application data sn sng cho trao i d liu. 4. Rehandshaking - ti thng lng thng s truyn thng / chng thc;d liu handshaking c th cgn vo d liu ng dng. 5. Closure sn sng ng kt ni.Nm trng thi ny c miu t chi tit hn trong ti liu lp SSLEngine II.2.5 Qu trnh khi ng : to mt SSLEngine , bn s dng phng thc SSLContext.createSSLEngine() . Bn phi cu hnh c ch hotng nh mt client hoc mt server, cng nh t cc thng s cu hnh khc nh l cipher suites c dng v cyu cu chng thc client khng.y l mt v d m to mt SSLEngine . Ch rng tn server v s port th khng c dng cho lin lc viserver tt cc vn chuyn l trch nhim ca ng dng.Chng gi cho ngi cung cp JSSE s dng vic cacheSSL session, v cho vic thc thi Kerberos-cipher suite c bn nh r y quyn server no nn c chn.import javax.net.ssl.*;import java.security.*;// Khi to SSLContext vi key materialchar[] passphrase = "passphrase".toCharArray();// Khi to ln u key v trust material.KeyStore ksKeys = KeyStore.getInstance("JKS");Secure Socket Layer31 32. PTIT 2009 ti mn Bo mt thng tinks.load(new FileInputStream("testKeys"), passphrase);KeyStore ksTrust = KeyStore.getInstance("JKS");ks.load(new FileInputStream("testTrust"), passphrase);// KeyManagers quyt nh key material no c dng.KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");kmf.init(ksKeys, passphrase);// TrustManagers quyt nh c cho php kt ni khng.TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");tmf.init(ksTrust);sslContext = SSLContext.getInstance("TLS");sslContext.init( kmf.getKeyManagers(), tmf.getTrustManagers(), null);// Chng ta sn sng cho mt engineSSLEngine engine = sslContext.createSSLengine(hostname, port);// S dng nh mt clientengine.setUseClientMode(true); II.2.6 Pht sinh v x l d liu SSL/TLS :Hai phng thc chnh SSLEngine wrap() v unwrap() th chu trch nhim cho vic pht sinh v s dngd liu network tng ng. ph thuc vo trng thi SSLEngine, d liu ny c th l d liu handshake hay ngdng.Mi SSLEngine c mt vi giai on trong sut thi gian sng ca n. Trc khi d liu ng dng c th cgi/nhn , giao thc SSL/TLS yu cu mt handshake khi to thng s m ha. Handshake ny yu cu mtlot cc bc ti v lui bi SSLEngine. SSL Process c th cung cp thm chi tit v handshake ca chnh n.Sut qu trnh handshacking ban u, wrap() v unwrap() khi to v s dng d liu handshake, v ngdng th chu trch nhim cho vic vn chuyn d liu. Chui wrap()/unwrap() c lp li cho n khihanshake c hon tt. Mi qu trnh hot ng SSLEngine khi to mt SSLEngineResult, ca trngSSLEngineResult.HandshakeStatus no c dng xc nh c ch no cn xy ra tip theo tinti handshake .Mt handshake in hnh c th nh sau:ClientSSL/TLS messageHSStatuswrap()ClientHelloNEED_UNWRAPunwrap()ServerHello/Cert/ServerHelloDone NEED_WRAPwrap()ClientKeyExchangeNEED_WRAPwrap()ChangeCipherSpec NEED_WRAPwrap()Finished NEED_UNWRAPunwrap()ChangeCipherSpec NEED_UNWRAPunwrap()Finished FINISHEDBy gi th vic handshaking hon thnh, trng thi tip theo s gi wrap() th dng d liu ng dng vpackages cho vn chuyn. unwrap()th lm ngc li. gi d liu n u bn , ng dng trc ht phi cung cp d liu m n mun gi n SSLEngine thngqua SSLEngine.wrap() thu c d liu m ha SSL/TLS tng ng.ng dng sau gi d liu chou bn theo c ch vn chuyn m n chn . Khi ng dng nhn c d liu m ha SSL/TLS qua c chSecure Socket Layer 32 33. PTIT 2009 ti mn Bo mt thng tinvn chuyn, n cung cp d liu ny cho SSLEngine thng qua SSLEngine.unwrap() thu c d liuplaintext m u kia mun gi.y l mt th d ca mt ng dng SSL m s dng mt non-blocking SocketChannel lin lc vi bnkia(N c th c to thng v c th hay i bng vic dng mt Selector vi non-blockingSocketChannel.) on code sau s gi chui "hello" n u bn kia, bng vic vit m n s dngSSLEngine to trong v d trc.N s dng thng tin t SSLSession nh ngha ln ca bytebuffers l bao nhiu.// To mt non-blocking socket channelSocketChannel socketChannel = SocketChannel.open();socketChannel.configureBlocking(false);socketChannel.connect(new InetSocketAddress(hostname, port));// Hon tt vic kt niwhile (!socketChannel.finishedConnect()) {// lm bt c g cho n khi kt ni hon tt}// To byte buffers cho vic gi ng dng v d liu m haSSLSession session = engine.getSession();ByteBuffer myAppData =ByteBuffer.allocate(session.getApplicationBufferSize());ByteBuffer myNetData = ByteBuffer.allocate(session.getPacketBufferSize());ByteBuffer peerAppData =ByteBuffer.allocate(session.getApplicationBufferSize());ByteBuffer peerNetData = ByteBuffer.allocate(session.getPacketBufferSize());// Lm Handshake ban udoHandshake(socketChannel, engine, myNetData, peerNetData);myAppData.put("hello".getBytes());myAppData.flip();while (myAppData.hasRemaining()) {// Sinh ra d liu m ha SSL/TLS (d liu handshake hoc ng dng)SSLEngineResult res = engine.wrap(myAppData, myNetData); // X l trng thi ca bn gi if (res.getStatus() == SSLEngineResult.Status.OK) { myAppData.compact();// Gi d liu m ha SSL/TLS cho u bn kiawhile(myNetData.hasRemaining()) { int num = socketChannel.write(myNetData); if (num == -1) {// iu khin ng channel } else if (num == 0) {// Nu khng byte no c vit th th li ln na }} } // iu khin nhng trng thi khc: BUFFER_OVERFLOW, CLOSED ...Secure Socket Layer33 34. PTIT 2009 ti mn Bo mt thng tin}on code sau c d liu t cng non-blocking SocketChannel v ly d liu plaintext ra t n bng cchdng SSLEngine to trc .Mi vng lp ca on code c th hoc khng sinh ra bt c d liu paintextno,ph thuc vo c hay khng handshaking th ang c x l.// c d liu m ha SSL/TLS t u bnint num = socketChannel.read(peerNetData);if (num == -1) {// iu khin ng channel} else if (num == 0) {// Khng c c bytes no ,th li . . .} else {// X l d liu vopeerNetData.flip();res = engine.unwrap(peerNetData, peerAppData);if (res.getStatus() == SSLEngineResult.Status.OK) {peerNetData.compact();if (peerAppData.hasRemaining()) {// Dng peerAppData}}// iu khin cc trng thi khc: BUFFER_OVERFLOW, BUFFER_UNDERFLOW,CLOSED...} II.2.7 Trng thi ca qu trnh hot ng : ch ra trng thi ca engine v nhng hnh ng m ng dng nn c , phng thc SSLEngine.wrap() vSSLEngine.unwrap()tr li mt SSLEngineResult c th,nh trong v d trc. SSLEngineResult chahai phn ca thng tin trng thi : trng thi tng th ca b my v trng thi handshaking.Nhng trng thi tng th c th c c biu din bi SSLEngineResult.Status enum. Mt vi v d catrng thi ny bao gm Ok, c ngha la khng c li, v BUFFER_UNDERFLOW, c ngha l input buffer c d liucha , ch ra rng ng dng cn thu thm d liu t u bn (v d nh c thm d liu t network).Nhng trng thi handshaking c th c th c biu din bi the SSLEngineResult.HandshakeStatusenum.Chng biu din vic handshaking c hon thnh hay cha, c hay khng bn gi cn thu thm d liuhandshaking t u bn, gi thm d liu handshaking cho u bn v vn vn.Mi kt qu ca hai trng thi cho php engine ch ra rng ng dng phi mang hai hnh ng : mt l tr lihandshaking v mt l biu din trng thi tng th ca phng thc wrap()/unwrap() .Cho mt v d ,c thengine , nh l mt kt qu ca lnh gi n SSLEngine.unwrap() , tr vSSLEngineResult.Status.OK ch ra rng d liu nhn vo x l thnh cng vSSLEngineResult.HandshakeStatus.NEED_UNWRAP ch ra rng ng dng cn thu thm d liu m haSSL/TLS t u bn v cung cp n cho SSLEngine.unwrap() ln na m handshaking c th tip tc.Nhbn thy , v d trc th c n gin rt nhiu, chng cn c pht trin y iu khin chnh xc tt ctrng thi ny. Secure Socket Layer 34 35. PTIT 2009 ti mn Bo mt thng tin II.2.8 Blocking Tasks :Sut qu trnh Handshaking, SSLEngine c th bt gp cc tasks m c th block hay chim mt thi giandi.Cho v d nh mt TrustManager c th cn kt ni n mt dch v ph chun certificate t xa, hay mtKeyManager c th cn thc gic user xc nh certificate no dng chng thc client. gi cho trng thit nhin ca SSLEngine, khi engine gp phi vic, n s tr vSSLEngineResult.HandshakeStatus.NEED_TASK. Trong lc nhn trng thi ny,ng dng cn giSSLEngine.getDelegatedTask() ly task, sau s dng kiu threading dnh ring cho yu cu ca n,x l task.ng dng c th thu thread t mt thread pool x l task m thread chnh thng l ang i iukhin I/O khc.y l mt v d m thc thi mi task trong mt thread c to mi.if (res.getHandshakeStatus() == SSLEngineResult.HandshakeStatus.NEED_TASK) {Task c th hot ng;while ((task=engine.getDelegatedTask()) != null) {new Thread(task).start();}}Engine s block nhng lnh call wrap/unwrap s c cho n khi tt tasks ang ng bn ngoi c hon tt . II.2.9 Kt thc :Cho mt shutdown c trt t ca mt kt ni SSL/TLS , giao thc SSL/TLS yu cu chuyn giao ca closemessage.V vy, khi mt ng dng c thc hin vi kt ni SSL/TLS,n nn thu close message trc tin tSSLEngine, sau truyn chng cho u bn dng c ch vn chuyn, v cui cng shut down c ch vnchuyn.y l mt th d// Ch ra ng dng c thc hin vi engineengine.closeOutbound();while (!engine.isOutboundDone()) { // Nhn close message SSLEngineResult res = engine.wrap(empty, myNetData); // Kin tra trng thi // Gi close message cho u bn while(myNetData().hasRemaining()) { int num = socketChannel.write(myNetData); if (num == -1) { // iu khin ng channel } else if (num == 0) { // khng c c byte no,th li ln na } myNetData().compact(); }}// ng transportsocketChannel.close();Thm vo ng dng kt thc SSLEngine mt cch dt khot , SSLEngine c th c ng bi u bn kia( thng qua vic nhn mt close message trong khi n x l d liu handshake) hoc bng cch SSLEngine btgp mt li trong khi x l ng dng hoc d liu handshake, ch ra bi mt SSLException..Trong trng hpnh th ,ng dng nn gi SSLEngine.wrap() ly close message v gi n cho u bn n khiSSLEngine.isOutboundDone() tr v true, nh trong v d trc , hocSSLEngineResult.getStatus() tr v CLOSED. Secure Socket Layer35 36. PTIT 2009 ti mn Bo mt thng tinThm vo vic shutdown c th t th cng c kt thc khng theo th t m lin kt vn chuyn c ct ttrc khi close message c trao i.Trong v d trc, ng dng c th nhn -1 khi th c hoc vit non-blocking SocketChannel. Khi ly ht d liu nhn vo, bn nn gi engine.closeInbound(), m s xc minh viSSLEngine rng u bn kia ng hon ton phi cnh SSL/TLS ,v khi ng dng s vn th shutdown honton bng vic dng kt qu trn.Hin nhin, khng ging nh SSLSocket, ng dng dng SSLEngine phidnh lu ti nhiu chuyn tip trng thi, tnh trng v lp trnh hn vic dng SSLEngine. Hy xem NIO-basedHTTPS server bit thm thng tin v vic vit mt ng dng SSLEngine c bn . II.2.10 SSLSession Interface :Mt javax.net.ssl.SSLSession biu din mt ng cnh bo mt c thng lng gia hai u ca mtkt ni SSLSocket/SSLEngine. Mi mt session th c sp xp, n c th c chia s biSSLSocket/Engines sp ti kt ni gia cng c hai bn. Session cha cipher suite m s c dng cho linlc mt secure socket cng nh mt non-authoritative gi n a ch network ca u bn, v thng tin qun lnh thi gian khi to v ln dng sau cng. Session cng cha mt shared master secret thng lng gia ccbn v to kha b mt cho vic m ha v m bo s ton vn ca lin lc thng qua mtSSLSocket/SSLEngine. Gi tr ca master secret ny c bit ch c bit cho vic thc thi secure socketbn di v n khng b l qua SSLSession API. II.2.11 Lp HttpsURLConnection :Giao thc https th tng t nh http, nhng https trc ht khi to mt secure channel thng qua SSL/TLSsockets v xc thc u cui trc khi yu cu hoc nhn d liu . javax.net.ssl.HttpsURLConnectionm rng lp java.net.HttpsURLConnection, v thm vo h tr cho c trng ring https . Xem lpjava.net.URL ,java.net.URLConnection,java.net.HttpURLConnection , vjavax.net.ssl.HttpURLConnection , bit thm thng tin v nh th no https URLs c xy dngv s dng .Trong lc nhn mt HttpsURLConnection, bnc th cu hnh mt s thng s ca http/https trc khi khito kt ni network trn thc t thng qua phng thc URLConnection.connect. Nhng ch chi tit l: Ty chnh SSLSocketFatory ch nh Ty chnh HostnameVerifier ch nhTy chnh SSLSocketFactory ch nhTrong mt vi trng hp , n th mun ch nh SSLSocketFactory rng mt HttpsURLConnection sdng ring. V d bn c th mun o xuyn qua mt dng proxy m khng c h tr bi vic thc thi khngy . SSLSocketFactory mi c th tr v nhng sockets m ng vai tr tt c cc tunneling cn thit , vvy cho php HttpsURLConnection dng cc proxy b sung.Lp HttpsURLConnection c mt SSLSocketFactory mc nh m ch nh khi no lp c load .(Trong trng hp n l factory c tr v t phng thc SSLSocketFactory.getDefault.) Trng hpc bit c th c ca HttpsURLConnection s tha hng SSLSocketFactory mc nh ca hin ti chon khi mt SSLSocketFactory mc nh mi c ch nh cho lp thng qua phng thc tnhHttpsURLConnection.setDefaultSSLSocketFactory. Mi trng hp ca HttpsURLConnectionth c to , SSLSocketFactory c k tha trong trng hp ny c th c gi qua bn gi qua phngthc setSSLSocketFactory .Lu rng vic thay i SSLSocketFactory tnh mc nh th khng tc ng ln trng hp ang c caHttpsURLConnections, mt lnh gi phng thc setSSLSocketFactory th cn thit thay itrng hp ang c.Secure Socket Layer36 37. PTIT 2009 ti mn Bo mt thng tinMt cch khc c th thu mi trng hp hoc mi lp SSLSocketFactory bng vic to mt lnh gi phngthc getSSLSocketFactory/getDefaultSSLSocketFactory , tng ng tng ci mt.Ty chnh HostnameVerifier ch nhNu hostname ca URL khng trng vi hostname trong xc minh c nhn nh mt phn ca SSL/TLShandshake, n c th xy ra URL spoofing.Nu vic thc thi khng th xc minh hostname vi l do chc chn,vic thc thi SSL s thc thi mt lnh gi li HostnameVerifier ch nh ca trng hp cho kim tra. Vicxc nhn hostname c th thc thi bt c bc no cn thit lm quyt nh, nh l thc thi vic so snh muhostname xen k hay c l pop up mt dialog box tng tc. Mt vic xc minh khng thnh cng bi vic kim trahostname s ng kt ni s ng kt ni.(Xem RFC 2818 bit thm thng tin lin quan n vic xc minhhostname.)Phng thc setHostnameVerifier/setDefaultHostnameVerifier hot ng cng mt kiu phngthc setSSLSocketFactory/setDefaultSSLSocketFactory , trong c ch nh trn mi trnghp v mi lp c bn, v gi tri hin thi c th c thu bi mt lnh gi phng thcgetHostnameVerifier/getDefaultHostnameVerifier .II.3 Cc Class v Interface h tr :Cc lp h tr v giao din trong section ny c cung cp h tr vic to ra v thit lp cc i tngSSLContext,m c dng to cc i tng SSLSocketFactory,SSLServerSocketFactory,v SSLEngine.Cclp h tr v cc giao din l 1 phn ca gi javax.net.ssl3 trong s cc lp ny m t trong section ny(SSLContext,KeyManagerFactory,v TrustManagerFactory) l cclp engine(c cu).1 lp engine l 1 lp API dng cho cc gii thut xc nh(hoc cc giao thc,trong trng hpca SSLContext),cho ci m cc cng c c th c cung cp trong mt hay nhiu gi Cryptographic ServiceProvider(nh cung cp).Nh cung cp SunJSSE em n nhiu tiu chun vi JSSE cung cp SSLContext,KeyManagerFactory,v cc cngc TrustManagerFactory,cng nh cc cng c cho cc lp engine theo chun bo mt Java(java.security) API.Cccng c c cung cp bi SunJSSE l :Lp engine c thc hin Gii thut hoc giao thcKeyFactoryRSAKeyPairGeneratorRSAKeyStorePKCS12Signature MD2withRSA,MD5withRSA,SHA1withRSAKeyManagerFactory SunX509,NewSunX509TrustManagerFactorySunPKIX(aka X509/PKIX),SunX509SSLContextSSLv3(aka SSL),TSLv1(aka TLS) Secure Socket Layer37 38. PTIT 2009 ti mn Bo mt thng tinII.3.1 Lp SSLContext :Javax.net.ssl.SSLContext l 1 lp engine cho vic thc thi ca 1 giao thc SSL.Mt thc th ca lp ny hnh ngnh 1 factory cho cc SSL socket factories v SSL engine.Mt SSLContext gi tt c cc thng tin trng thi cchia s qua tt c cc i tng c to di ng cnh ny.V d,trng thi phin c kt hp vi SSLContextkhi n tha thun thng qua giao thc bt tay bng socket c to bi socket factories cung cp bi ngcnh.Nhng phin c lu c th c ti s dng v chia s bi cc socket khc c to di cng ng cnh.Mi thc th c cu hnh thng qua phng thc khi to init vi cc kha,chui chng thc,v cc chng thcCA gc c tin cy m n cn biu din xc thc.Cu hnh ny c cung cp di dng cc manager ng tincy v kha.Nhng manager ny cung cp h tr cho vic xc thc v cc kha cnh tha thun kha ca cc ciphersuite c h tr bi ng cnh.Hin ti ch h tr X509 da trn cc manager .Vic to 1 i tng SSLContextGing nh cc provider JCA da trn cc lp engine,cc i tng SSLContext c to s sng phng thcfactory getInstanse ca lp SSLContext.Nhng phng thc tnh ny mi ci tr v 1 thc th m thc hin t nht1 giao thc SSL c yu cu.Thc th tr v cng c th thc hin giao thc khc.V d,getInstance(SSLv3) cth tr v 1 thc th m thc hin SSLv3 v TLSv1.Phng thc getSupportedProtocols tr v 1 danh sc ccgiao thc h tr khi 1 SSLSocket,SSLServerSocket hoc SSLEngine c to t ng cnh ny.Bn c th kimsot ci m cc giao thc thc s dng cho kt ni SSL bng cch s dng phng thcsetEnabledProtocols(String[] protocols).Note: 1 i tng SSLContext c to ra t ng,c khi to v nh du tnh i vi lp SSLSocketFactorykhi bn gi SSLSocketFactory.getDefault.V vy,bn khng cn phi to trc tip v khi to 1 i tngSSLContext(nu bn khng mun ghi ln thuc tnh mc nh). to 1 i tng SSLContext bng cch gi 1 phng thc factory getInstance,bn c th xc nh tn giaothc.bn cng c th xc nh cc m nh cung cp mun bn cung cp cch thc hin giao thc yu cu:public static SSLContext getInstance(String protocol);public static SSLContext getInstance(String protocol,String provider);public static SSLContext getInstance(String protocol,Provider provider);Nu ch c 1 tn giao thc c xc nh,h thng s xc nh nu c 1 cch thc hin ca giao thc c yu cusn c trong mi trng,v nu c nhiu hn 1,nu c 1 ci l c thch hp hn cNu c 1 tn giao thc v nh cung cp u c ch nh,h thng s xc nh nu c 1 cch thc thi ln cc giaothc trong provider c yu cu, v a ra 1 ngoi l nu khng c.Mt giao thc l 1 chui(nh SSL) m t giao thc SSL mong mun.Tn giao thc chung danh cho cc i tngSSLContext: Secure Socket Layer 38 39. PTIT 2009 ti mn Bo mt thng tin Protocol Comment SSLH tr nhng version ca SSL; c th h tr mt s version khc SSLv2H tr SSL version 2 hoc cao hn SSLv3H tr SSL version 3; c th h tr mt s version khc TLSH tr nhng version ca TLS; c th h tr mt s version khc TLSv1H tr TLS version 1; c th h tr mt s version khcSau y l 1 vi v d v thu c 1 SSLContext:SSLContext sc = SSLContext.getInstance("SSL"); SSLContext c to mi nn c khi to bng cch gi phng thc init:public void init(KeyManager[] km , TrustManager[] tm , SecureRandom random);Nu tham s KeyManager[] l null,th 1 KeyManager rng s c nh ngha cho ng cnh ny.Nu tham sTrustManager[] l null,cc provider bo mt c ci t s c tm kim cho vic thc hin c u tin caonht ca TrustManagerFactory,t 1 TrustManager thch hp s c thu cc.Theo cch ,tham sSecureRandom s l null,trong trng hp ta thc hin mc nh.Nu ta dng ng cnh c khi to mc nh(nh SSLContext c to bi SSLSocketFactory .getDefault() hocSSLServerSocketFactory.getDefault()),1 KeyManager mc nh v 1 TrustManager c to ra.Ta chon vic thchin SecureRandom mc nh.II.3.2 TrustManager Interface :Trch nhim c bn ca TrustManager l xc nh th xem giy y quyn xc thc c a ra c phi l ng tincy.Nu giy y quyn khng ng tin,kt ni s b kt thc. xc thc thc th t xa ca 1 im u cui socketbo mt,bn cn phi khi to 1 i tng SSLContext vi 1 hoc nhiu TrustManager.Bn cn vt qua 1TrustManager cho mi c ch xc thc m c h tr.Nu gi tr null c gi vo vic khi to,1 trust managers c to ra cho bn.Thng thng,c 1 trust manager n h tr xc thc da trn chng thc kha cng khaiX.509 (nh X509TrustManager).Mt vi secure socket implement cng h tr xc thc da trn vic chia s khab mt,nh Kerberos,hoc 1 vi c ch khc.TrustManager c to hoc l bng TrustManagerFactory,hoc bng vic cung cp 1 thc hin c th cainterface.II.3.3 Lp TrustManagerFactory :Javax.net.ssl.TrustManagerFactory l 1 lp engine dng cho 1 provider da trn dch v m hnh ng nh 1factory cho 1 hay nhiu kiu i tng TrustManager .V n l provider c s,cc factory b sung c th c thchin v cu hnh m cung cp cc trust manager thm vo v lun phin m cung cp nhiu dch v phc tp hocthc hin cc policy xc thc c ci t c th.To 1 TrustManagerFactory: Secure Socket Layer39 40. PTIT 2009 ti mn Bo mt thng tinBn to 1 thc th ca lp ny theo kiu tng t vi SSLContext,ngoi tr vic thng qua 1 chui tn gii thutthay v tn 1 giao thc vi phng thc getInstance:public static TrustManagerFactory getInstance(String algorithm);public static TrustManagerFactory getInstance(String algorithm, String provider);public static TrustManagerFactory getInstance(String algorithm, Provider provider);Chui tn gii thut mu l: PKIXGi hm theo mu sau :TrustManagerFactory tmf = TrustManagerFactory.getInstance("PKIX", "SunJSSE");Vic gi trn s to ra 1 thc th ca trust manager factory PKIX ca nh cung cp SunJSSE.Factory ny sau c th dng to trust manager m cung cp kim tra tnh hp l ng dn chng thc X.509 PKIX c s.Khi khi to 1 SSLContext,bn c th dng cc trust manager c to ra t 1 trust manager factory,hoc bn cth vit trust manager ca chnh bn,c th s dng CertPath API.Bn khng cn phi dng trust manager factorynu bn thc hin 1 trust manager s dng giao din X509TrustManager.1 factory c to mi nn c khi to bng cch gi 1 trong nhng phng thc init:public void init(KeyStore ks);public void init(ManagerFactoryParameters spec);Bn nn gi bt ca phng thc init no ph hp vi TrustManagerFactory bn ang dng(Hi nh cungcp).i vi nhiu factory,nh SunX509 TrustManagerFactory t nh cung cp SunJSSE,KeyStore ch lthng tin c yu cu khi to TrustManagerFactory v v vy phng thc init u tin l phng thc phhp gi.TrustManagerFactory s truy vn KeyStore cho thng tin theo chng thc t xa nn c tin cytrong sut qu trnh kim tra xc thc. Trong 1 vi trng hp nh cung cp cn cc tham s khi to KeyStore.Cc user ca nh cung cp c bitc mong i thng qua vic thc hin ManagerFactoryParameters ph hp nh nh ngha bi nh cungcp.Nh cung cp sau c th gi cc phng thc c th trong vic thc hin ManagerFactoryParameters thuc thng tin cn thit. V d,gi s nh cung cp TrustManagerFactory yu cu cc tham s khi to B,R v S t bt c ng dngno m mong dng nh cung cp .Ging nh tt c cc nh cung cp yu cu cc tham s khi to nhKeyStore,nh cung cp s yu cu ng dng cung cp cc thc th ca 1 lp m vic thc hin 1 sub-interfaceManagerFactoryParameters ring bit.Trong v d ca chng ta,gi s nh cung cp yu cu rng vic thc hinng dng gi v to thc th ca MyTrustManagerFactoryParams v gi n vo phng thc init th 2. y lnhng g MyTrustManagerFactoryParams c th th hin:public interface MyTrustManagerFactoryParams extends ManagerFactoryParameters {public boolean getBValue(); public float getRValue(); public String getSValue(): } Secure Socket Layer 40 41. PTIT 2009 ti mn Bo mt thng tin Mt vi trustmanager c th to 1 quyt nh ng tin cy m khng phi khi to tng minh vi 1 itng KeyStore hoc bt k tham s no khc.v d,chng c th truy cp nguyn liu ng tin cy t dch v danhmc cc b thng qua LDAP,c th s dng 1 trng thi chng thc trc tuyn t xa hoc c th truy cp nguynliu tin cy mc nh t 1 v tr cc b chun.H tr PKIX TrustManager: Trust manager factory CertPath da trn X.509 c gi l SunPKIX c thm vo.SunPKIX l csn cng vi trust manager factory X.509 mc nh m n gin c bit nh l SunX509.Trong J2SE 5,by gi SunPKIX l X509TrustManagerFactory mc nh.N c chn bi cc thuc tnhssl.TrustManagerFactory.algorithm trong file java.security( tr li s dng trust manager c,theo th tc trongCustomizing the Default Key and Trust Manager thay i thuc tnh t PKIX n SunX5.09).Ch rng s thayi ny ch nh hng n cc ng dng m s dng trust mananager mc nh,n ko nh hng n cc ng dngm trust manager c th tng minh vi SSLContext.init(,TrustManager[],).Cch khc,SunPKIX factory c thc truy cp mt cch c lp trnh bng cch gi TrustManagerFactory.getInstance(SunPKIX).PKIX trust manager factory s dng CertPath PKIX implementation t 1 nh cung cp bo mt c ci t.,1 nhcung cp SUN CertPath c cung cp vi b J2SE 5 Development Kit.Trust manager factory c th c khito s dng phng thc init(KeyStore ks) thng thng,hoc bng cch gi vo cc tham s CertPath cho PKIXtrust manager s dng lp c gii thiu mi javax.net.ssl.CertpathTrustmanagerparameters.y l v d v lam cch no ly trust manager s dng 1 lu tr chng thc LDAP ring bit v kch hot bkim tra thu hi.import javax.net.ssl.*;import java.security.cert.*;import java.security.KeyStore;...// To tham s PKIXKeyStore anchors = KeyStore.getInstance("JKS");anchors.load(new FileInputStream(anchorsFile));CertPathParameters pkixParams = new PKIXBuilderParameters(anchors,new X509CertSelector());// Ch nh ni LDAP certificate dngLDAPCertStoreParameters lcsp = new LDAPCertStoreParameters("ldap.imc.org", 389);pkixParams.addCertStore(CertStore.getInstance("LDAP", lcsp));// Ch nh rng vic kim tra thu hi th c kch hotpkixParams.setRevocationEnabled(true);// Gi chng li nh thng s Trust managerManagerFactoryParameters trustParams =Secure Socket Layer41 42. PTIT 2009 ti mn Bo mt thng tin new CertPathTrustManagerParameters(pkixParams);// To TrustManagerFactory cho PKIX phc v cho trust managerTrustManagerFactory factory = TrustManagerFactory.getInstance("PKIX");// Chuyn thng s cho factory c chuyn cho vic thc thi CertPathfactory.init(trustParams);// Dng factorySSLContext ctx = SSLContext.getInstance("TLS");ctx.init(null, factory.getTrustManagers(), null);Nu phng thc init(KeyStore ks) c dng,cc tham s PKIX mc nh c dng vi ngoi l rng b kim trathu hi b v hiu.N c th c kch hot bng cch lp thuc tnh h thng com.sun.net.ssl.checkRevocationthnh true.Ch rng vic thit lp ny yu cu CertPath implementation t n c th xc nh v tr thng tin thuhi.PKIX implementation trong nh cung cp SUN c th lm nhng iu ny trong nhiu trng hp nhng yucu rng thuc tnh h thng com.sun.security.enableCRLDP c lp thnh true.II.3.4 X509TrustManager Interface :Interface javax.net.ssl.X509TrustManager l m rng ca interface c bn TrustManger .Interface ny phi cthc hin bng 1 trust manager khi s dng X.509 da trn xc thc. h tr xc thc X.509 ca im u cui socket xa thng qua JSSE,v thc th ca interface ny phic gi vo phng thc init ca i tng SSLContext.To mt X509TrustManager Bn c th hoc l t bn thc hin giao din ny trc tip hoc thu nhn 1 t 1 nh cung cp datrnTrustManagerFactory (nh c cung cp bi nh cung cp SunJSSE).bn c th cng thc hin giao din cabn m y quyn cho 1 factory to ra trust manager.V d,bn c th lm iu ny lc kt qu quyt nh tin cyv truy vn 1 user u cui thng qua 1 giao din ha ngi dng.Ch : nu 1 tham s null KeyStore c gi vo SunJSSE SunX509 hoc SunPKIXTrustManagerFactory,factory s dng cc bc theo sau c gng tm kim nguyn liu tin cy:1.Nu l thuc tnh h thng:javax.net.ssl.trustStorec nh ngha,sau TrustManagerFactory n lc tm 1 file s dng tn file c th bng thuc tnh hthng,v s dng file cho KeyStore.Nu thuc tnh h thng javax.net.ssl.trustStorePassword cng c nhngha,gi tr ca n c dng kim tra tnh ton vn d liu trong truststore trc khi m n.Nu javax.net.ssl.trustStore c nh ngha nhng cc file xc nh khng tn ti,th 1 TrustManager mcnh s dng 1 keystore rng c to.2. Nu thuc tnh h thng javax.net.ssl.trustStore khng c xc nh,th nu file:/lib/security/jssecacertstn ti,file c dng. Secure Socket Layer 42 43. PTIT 2009 ti mn Bo mt thng tin3. Nu file:/lib/security/cacertstn ti,file c dng. (Nu cc file ny u khng tn ti,iu ny c th xy ra n tha,v c cc cipher suite SSL m ngmnh,m khng lm bt c xc thc no v v vy khng cn 1 truststore.)Factory tm kim 1 file c th cng vi thuc tnh bo mt javax.net.ssl.trustStore hoc cho file jssecacertstrc khi kim tra 1 file cacerts m bn c th cung cp 1 tp JSSE c th ca chng thc gc ng tin cy mrng t chng m c th c trnh din trong cacerts cho cc mc ch code-signing.To ra X509TrustManager ca ring bn:Nu hnh vi c cung cp X509TrustManager khng ph hp vi tnh hung ca bn,bn c th to raX509TrustManager ca ring bn bng cch hoc l to v ng k TrustManagerFactory ca ring bn hoc lbng cch thc hin giao din X509TrustManager trc tip.Lp MyX509TrustManager sau y lm tng hnh vi SunJSSE X509 TrustManager mc nh bng cchcung cp xc thc c th thay i 1 cch logic khi SunJSSE X509 TrustManager mc nh hng:class MyX509TrustManager implements X509TrustManager {/* * X509TrustManager mc nh c tr v bi SunX509. Chng ta s y quyn * quyt nh cho n, v phi dng n tnh logic trong Class nu * X509TrustManager mc nh khng tin tng n. */X509TrustManager sunJSSEX509TrustManager;MyX509TrustManager() throws Exception {// To mt JSSE X509TrustManager mc nh.KeyStore ks = KeyStore.getInstance("JKS");ks.load(new FileInputStream("trustedCerts"),"passphrase".toCharArray());TrustManagerFactory tmf =TrustManagerFactory.getInstance("SunX509", "SunJSSE");tmf.init(ks);TrustManager tms [] = tmf.getTrustManagers();/** Lp li trustmanagers c tr v, tm kim* mt trng hp ca X509TrustManager. Nu tm thy,* dng n nh l trust manager mc nh ca chng ta.*/for (int i = 0; i < tms.length; i++) { if (tms[i] instanceof X509TrustManager) { sunJSSEX509TrustManager = (X509TrustManager) tms[i]; return; }}/* * Tm vi cch khc khi to hoc l chng ta s phi lm hng * vic xy dng. */throw new Exception("Couldnt initialize");}/*Secure Socket Layer 43 44. PTIT 2009 ti mn Bo mt thng tin* y nhim n trust manager mc nh.*/public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { try { sunJSSEX509TrustManager.checkClientTrusted(chain, authType); } catch (CertificateException excep) { // Lm bt c x l c bit y hoc xem li ngoi l }}/** y quyn cho trust manager mc nh.*/public void checkServerTrusted(X509Certificate[] chain, String authType)throws CertificateException { try { sunJSSEX509TrustManager.checkServerTrusted(chain, authType); } catch (CertificateException excep) { /* * C th pop up mt dialog box hi c hay khng tin tng * chui cert */ }}/** Ch n gin thng qua vic ny.*/public X509Certificate[] getAcceptedIssuers() { return sunJSSEX509TrustManager.getAcceptedIssuers();}}Mt khi bn to ra 1 trust manager nh th,gn n cho 1 SSLContext thng qua phng thc khito.SocketFactories tng lai c to t SSLContext ny s s dng TrustManager mi ca bn khi to cc quytnh ng tin cy.TrustManager[] myTMs = new TrustManager []{new MyX509TrustManager() };SSLContext ctx = SSLContext.getInstance("TLS");ctx.init(null, myTMs, null);Cp nht keyStore ng:Bn c th lm tng MyX509TrustManager iu khin cp nht keystore ng.Khi mt checkClientTrustedhoc checkServerTrusted kim tra c li v khng thit lp 1 chui chng thc ng tin cy,bn c th thm vochng thc ng tin cy c yu cu cho keystore.Bn cn to 1 sunX509TrustManager mi tTrustManagerFactory c khi to vi keystore c cp nht.Khi bn thit lp 1 kt ni mi(s dngSSLContext khi to trc ),chng ch thm vo mi s c gi to cc quyt nh ng tin cy. II.3.5 KeyManager Interface :Trch nhim chnh ca ca KeyManager l chn giy y quyn chng thc m s kt lun cui cng rng c gii n host xa. xc thc bn thn bn(im u cui socket bo mt cc b) n 1 im u cui xa,bn cnkhi to 1 i tng SSLContext vi 1 hoc nhiu KeyManagers.Bn cn gi 1 KeyManager i vi mi c chxc thc s c h tr.Nu gi tr null c gi vo vic khi to SSLContext,1 KeyManager rng s cto.Nu ng cnh mc nh bn trong c dng(nh SSLContext c to bi SSLSocketFactory.getDefalut()hoc SSLServerSocketFactory.getDefault()),1 KeyManager mc nh c to.in hnh,c 1 key manager n hSecure Socket Layer44 45. PTIT 2009 ti mn Bo mt thng tintr xc thc da trn cc chng thc kha cng khai X.509.Mt vi secure socket implement cng c th h tr xcthc da trn cc kha b mt c chia s,Kerberos,hay cc c ch khc.Cc KeyManager c to ra hoc bng KeyManagerFactory,hoc bng vic cung cp 1 thc thi c th cainterface.II.3.6 Lp KeyManagerFactory :Javax.net.ssl.KeyManagerFactory l 1 lp engine cho ngi cung cp da trn dch v m hnh ng nh 1 factorycho 1 hoc nhiu kiu i tng KeyManager.Ngi cung cp SunJSSE thc thi 1 factory c th tr v 1 keymanager X.509 c s.V l nh cung cp c s,cc factory thm vo c th c thc hin v cu hnh cungcp cc key manager c th thm vo hay thay i.To 1 KeyManagerFactoryBn to 1 thc th ca lp ny theo 1 kiu tng t nh SSLContext,ngoi tr gi vo chui tn gii thut thay vtn ca giao thc phng thc getInstance:public static KeyManagerFactory getInstance(String algorithm);public static KeyManagerFactory getInstance(String algorithm, String provider);public static KeyManagerFactory getInstance(String algorithm,Provider provider);1 chui tn gii thut mu nh sau: SunX509Gi phng thc nh sau:KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509", "SunJSSE");Cch gi trn s to ra 1 thc th ca key manager factory mc nh ca nh cung cp SunJSSE, m cungcp X509 c s da trn cc kha xc thc.1 factory c to mi nn c khi to bng cch gi 1 trong nhng phng thc init sau:public void init(KeyStore ks, char[] password);public void init(ManagerFactoryParameters spec); Bn nn gi bt c ci g m phng thc init ph hp cho KeyManagerFactory bn ang s dng.(Hi nhcung cp )i vi nhiu factory,nh SunX509 mc nh KeyManagerFactory t nh cung cp SunJSSE, KeyStorev mt khu ch l thng tin c yu cu khi to KeyManagerFactory v v vy phng thc init u tin lphng thc thch hp gi.KeyManagerFactory s truy vn KeyStore v cc thng tin trn kha b mt v linkt cc chng ch kha cng khai nn c dng cho vic xc thc n 1 im u cui socket t xa.Tham spassword xc nh mt khu s dng vi cc phng thc cho truy cp kha t KeyStore.Tt c cc kho trongKeyStore phi c bo v bng mt khu ging nhau. Trong 1 vi trng hp,cc tham s khi to nh KeyStore v mt khu c th cn thit i vi nh cungcp.Ngi s dng ca nh cung cp ring bit c mong i vt qua vic thc thi caManagerFactoryParameters ph hp nh c nh ngha b