- 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