Anda di halaman 1dari 62

HC VIN CNG NGH BU CHNH VIN THNG TPHCM

KHOA CNG NGH THNG TIN II

TI MN BO MT THNG TIN

Gio vin hng dn :

Ths.L Phc

Sinh vin thc hin

Hunh Anh Ho

V Th Thu Nguyt
L Thanh Phong
Nguyn Th Thanh Tho

Thnh ph H Ch Minh
12/2009

PTIT 2009

ti mn Bo mt thng tin

MC LC

Gii Thiu
CHNG I : SECURE SOCKET LAYER & TRANSPORT LAYER SECURITY ........................................... 5
I.1 Ti sao s dng SSL ............................................................................................................................................ 5
I.2 Kin trc SSL....................................................................................................................................................... 9
I.3 Giao thc SSL Record ....................................................................................................................................... 10
I.4 Giao thc SSL Change Cipher Spec .................................................................................................................. 13
I.5 Giao thc SSL Alert........................................................................................................................................... 13
I.6 Giao thc SSL Handshake ................................................................................................................................. 15
I.6.1 Giai on 1 : Thit lp kh nng bo mt .............................................................................................. 16
I.6.2 Giai on 2 : Xc thc server v trao i kha...................................................................................... 18
I.6.3 Giai on 3 : Xc thc client v trao i kha ...................................................................................... 19
I.6.4 Giai on 4 : Kt thc ............................................................................................................................ 19
I.7 Tnh ton m ha ............................................................................................................................................... 20
I.7.1 Vic to Master Secret ........................................................................................................................... 20
I.7.2 Vic sinh cc tham s m ha ................................................................................................................ 21
I.8 Transport Layer Security ................................................................................................................................... 22
I.8.1 Version number ..................................................................................................................................... 22
I.8.2 Message Authentication Code ............................................................................................................... 22
I.8.3 Hm tnh s ngu nhin ......................................................................................................................... 23
I.8.4 M cnh bo........................................................................................................................................... 24
I.8.5 Cipher suite ............................................................................................................................................ 25
I.8.6 Cc dng client certificate ..................................................................................................................... 25
I.8.7 Certificate Verify v Finished Message................................................................................................. 26
I.8.8 Tnh ton m ha ................................................................................................................................... 26
I.8.9 Phn m ............................................................................................................................................... 26
CHNG II : JAVA SECURE SOCKET EXTENSION API ............................................................................. 27
II.1 Quan h gia cc Class ..................................................................................................................................... 27
II.2 Cc Class v Interface chnh ............................................................................................................................. 28
II.2.1 Lp SocketFactory v ServerSocketFactory ........................................................................................ 28
II.2.2 Lp SSLSocketFactory v SSLServerSocketFactory .......................................................................... 28
II.2.3 Lp SSLSocket v SSLServerSocket ................................................................................................... 29

Secure Socket Layer

PTIT 2009

ti mn Bo mt thng tin

II.2.4 Non-blocking I/O vi SSLEngine ........................................................................................................ 30


II.2.5 Qu trnh khi ng.............................................................................................................................. 31
II.2.6 Pht sinh v x l d liu SSL/TLS ..................................................................................................... 32
II.2.7 Trng thi hot ng............................................................................................................................. 34
II.2.8 Blocking Tasks ..................................................................................................................................... 35
II.2.9 Kt thc ................................................................................................................................................ 35
II.2.10 SSLSession Interface .......................................................................................................................... 36
II.2.11 Lp HttpsURLConnection ................................................................................................................. 36
II.3 Cc Class v Interface h tr ............................................................................................................................ 37
II.3.1 Lp SSLContext ................................................................................................................................... 38
II.3.2 TrustManager Interface ........................................................................................................................ 39
II.3.3 Lp TrustManagerFactory.................................................................................................................... 39
II.3.4 X509TrustManager Interface ............................................................................................................... 42
II.3.5 KeyManager Interface .......................................................................................................................... 44
II.3.6 Lp KeyManagerFactory ..................................................................................................................... 45
II.3.7 X509KeyManager Interface ................................................................................................................. 46
II.3.8 Mi lin h TrustManagers v KeyManagers ..................................................................................... 46
II.4 Cc Class v Interface h tr th cp................................................................................................................ 47
II.4.1 SSLSessionContext Interface ............................................................................................................... 47
II.4.2 SSLSessionBindingListener Interface .................................................................................................. 47
II.4.3 Lp SSLSessionBindingEvent ............................................................................................................. 47
II.4.4 HandShakeCompletedListener Interface .............................................................................................. 47
II.4.5 Lp SSLHandShakeCompletedEvent .................................................................................................. 47
II.4.6 HostnameVerifier Interface .................................................................................................................. 47
II.4.7 Lp X509Certificate ............................................................................................................................. 48
CHNG III : SSL ATTACK ................................................................................................................................ 49
III.1 Cc phng php tn cng SSL da trn k thut tn cng MITM ................................................................ 49
III.1.1 Diffie Hellman MITM Attack ............................................................................................................. 49
III.1.2 SSL Sniff & SSLSTrip MITM Attack ................................................................................................ 46
III.2 Demo tn cng SSL Strip ................................................................................................................................ 51
CHNG IV : SSL CAPABILITY ........................................................................................................................ 52
IV.1 Cc ng dng ph bin ca SSL ..................................................................................................................... 52
IV.2 Trin khai SSL ................................................................................................................................................ 54

Tham kho

Secure Socket Layer

ti mn Bo mt thng tin

PTIT 2009

Gii 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

PTIT 2009

ti mn Bo mt thng tin

Chng 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 hay
doanh nghip . Vi s pht trin nhanh chng ca cng ngh mang li nhiu tin ch cho ngi dng nhng ng
thi 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 nay
p 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 rng
ri.Version 2.0 c cng b vo thng 2/1995 nhng cha nhiu l hng bo mt v sau cng a n m hnh
SSL version 3.0 c ban hnh nm 1996.Bn sau cng ny c dng cho TLS version 1.0 v c IETF xc nh
nh mt giao thc chun trong RFC 2246 vo thng 1/1999. Ngy nay Visa, MasterCard, American Express cng
nh nhiu cng ty gii php ti chnh hng u khc trn th gii v ang ng dng SSL trong thng mi in
t.
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 n
nh 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 i
c 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 trong
qu trnh trao i thng tin gia 2 bn cung cp s ring t b mt,v vy m gii quyt c vn th 2.Thut
ton m ha c s dng vi SSL bao gm hm bm m ha,tng t nh 1 checksum.N m bo rng d liu
khng 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 phn
gia 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 (ecommerce).Trong trao i e-commerce,tht di dt khi gi nh rng bn c th chc chn v nh danh ca server
m bn ang trao i thng tin.Ai c th d dng to ra 1 Website gi ha hn cc dch v tuyt vi ,ch cho
bn nhp vo s ti khon.SSL cho php bn, client,xc thc v nh danh ca server.N cng cho php server
xc thc nh danh ca client,mc d trong cc giao tc Internet,vic ny him khi c lm.

Secure Socket Layer

PTIT 2009

ti mn Bo mt thng tin

Mt khi client v server hi lng vi nh danh ca mi bn i tc.SSL cung cp tnh bo mt v tnh ton vn
thng qua cc thut ton m ha m n s dng.iu ny cho php cc thng tin nhy cm,nh s ti khon,c
truyn 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 (tnh
khng t chi).Non-repudiation c ngha l khi 1 i tng gi i 1 message ,th sau khng th ph nhn vic
mnh gi message .Khi 1 ch k s tng ng c lin kt vi 1 message,vic trao i ny sau c th
c 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 i
thng 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.Mt
cipher suite l 1 tp cc thut ton m ha v kch thc kha m my tnh c th dng m ha d liu.Mt
cipher suite bao gm thng tin v cc thut ton trao i kha cng khai v cc thut ton tha thun kha,v cc
hm bm m ha.Client ni vi server cc cipher suite no n c sn v server la chn cipher suite tt nht c th
chp 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 thng
s mun xc thc server.Vic xc thc server cho php client chc chn rng chnh server ny i din cho i
tng 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 cng
khai 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,vi
RSA,client dng kha cng khai ca server,c c t chng ch kha cng khai, m ha thng tin kha b
mt.Client gi thng tin kha b mt c m ha n server.Ch c server mi c th gii m ci message ny
bi 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 m
ha, c chn trong bc th nht ca tin trnh ny,v chia s thng tin b mt, tnh ton 1 HMAC ni thm
vo message.Sau ,chng dng kha b mt v thut ton kha b mt c m phn bc u tin ca tin
trnh ny m ha d liu v HMAC an ton.Client v server gi y c th trao i thng tin vi nhau 1 cch an
ton vi cc d liu bm v m ha.
Giao thc SSL:

Secure Socket Layer

PTIT 2009

ti mn Bo mt thng tin

Phn trc cung cp s m t s lc v SSL handshake, l s trao i thng tin gia client v server trc khi gi
cc message c m ha.Phn ny m t chi tit hn.Hnh sau minh ha chui tun t cc message c trao
i trong SSL handshake.Cc message m ch c gi trong 1 trng hp no c nh du l ty chn.
Hnh II: Cc message SSL
Client

Server

1.Client hello
2.Server hello
3.Certificate

ty chn

4.Certificate request

ty chn

5.Server key exchange

ty chn

6.Server hello done


7.Certificate

ty chn

8.Client key exchange


9.Certificate verify

ty chn

10.Change cipher spec


11.Finish
12.Change cipher spec
13.Finished
14.Encrypted data

14.Encrypted data

15.Close messages

15.Close message

Cc 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 Layer

PTIT 2009

ti mn Bo mt thng tin

5) 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 SSL
handshake.
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 ni
b 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 cho
cc phin SSL sau.Vic lu li cc tham s phin SSL cho php cc trao i bo mt v sau c bt u nhanh
chng 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 la
chn Cipher suite s tc ng trc tip n loi bo mt m kt ni c c.V d,nu 1 cipher suite nc danh c
chn,ng dng khng c cch no kim tra nh danh ca u xa.Nu 1 suite-khng c m ha, c chn,tnh
b mt ca d liu khng th c bo v.Thm vo ,giao thc SSL/TLS khng ch r rng nhng ti liu chng
nhn nhn c phi khp vi nhng ci m u kia gi.Nu kt ni theo cch no m b redirect n 1 k
xu,nhng ti liu chng nhn ca k xu ny khi trnh ra th c chp nhn da trn nhng t liu tin tng hin
ti,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 liu
no.Cc lp SSLSockets v SSLEngines khng t ng kim tra hostname trong URL c khp vi hostname trong
ti liu chng nhn ca u kia hay khng.Mt ng dng c th b khai thc bng URL spoofing nu hostname
khng c kim tra.
Cc giao thc nh HTTPS cn thit phi kim tra hostname.Cc ng dng c th dng HostnameVerifier vit
chng ln lut hostname HTTPS mc nh .

Secure Socket Layer

PTIT 2009

ti mn Bo mt thng tin

I.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 l
mt giao thc n m l 2 lp giao thc,nh minh ha di y.
Hnh I.1 : Chng giao thc SSL
SSL Handshake
Protocol

SSL Change Cypher


Spec Protocol

SSL Alert Protocol

HTTP

SSL Record Protocol


TCP
IP

SSL Record Protocol cung cp cc dch v bo mt c bn cho nhiu giao thc khc nhau cc lp trn.Trong thc
t, Hyper Text Transfer Protocol (HTTP),cung cp dch v trao i cho tng tc Web client/server,c th hot
ng 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 phn
qun 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 nh
sau:
Connection ( kt ni): 1 kt ni l 1 transport _ trong nh ngha m hnh phn lp OSI_ cung cp 1 loi
dch v thch hp.Vi SSL,nhng kt ni nh vy l nhng mi quan h ngang hng.Cc kt ni th trao
i 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 Handshake
Protocol (giao thc bt tay).Cc phin nh ngha 1 tp cc tham s bo mt bng mt m,c th c chia
s gia nhiu kt ni.Cc phin c dng trnh nhng m phn tn km_v cc tham s bo mt
mi_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 cho
c c v ghi, (nh nhn v gi..).Thm vo , trong sut qu trnh Handshake Protocol, trng thi treo c v ghi
c 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

PTIT 2009

ti mn Bo mt thng tin

Cypher spec : ch ra thut ton m ha d liu (nh rng,AES) v thut ton bm (nh MD5 hay SHA1) 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 tr
cho mi key.Phn ny c khi to trc tin bi SSL Handshake Protocol.Sau ,khi m ha cui cng
t 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 c
nhn trong mi kt ni.Khi 1 bn gi hoc nhn mt change cypher spec message,sequence number thch
hp 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 c
s 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 chia
s, 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 sp
c truyn i,phn mnh d liu thnh nhiu block,nn d liu 1 cch ty chn,p dng vo 1 MAC,m ha,thm
vo header,v truyn khi kt qu thu c trong 1 segment TCP.D liu nhn c c gii m,kim tra ,gii
nn,sp xp li v phn phi n ngi s dng lp cao hn.

Secure Socket Layer

10

PTIT 2009

ti mn Bo mt thng tin
Hnh I.2 : Hot ng ca SSL Record Protocol

D 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 214
byte (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 chiu
di ni dung nhiu hn 1024 byte (D nhin,ngi ta mong mun nn lm co li d liu hn l ni rng d liu.Tuy
nhin ,vi nhng block ngn,c th ,do nh dng quy c,thut ton nn thc s lm cho output di hn
input).Trong SSLv3 (cng nh phin bn hin ti ca TLS),khng c thut ton nn no c ch r,v vy thut
ton 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 n1
kha 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 Layer

11

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 v
c XOR trong HMAC.Thut ton MAC trong SSLv3 c da trn bn phc tho Internet ban u cho
HMAC.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 th
khng lm tng chiu di ni dung hn 1024 byte,v vy chiu di tng cng khng vt qu 214+2048. Cc thut
ton m ha sau c cho php:
Block cipher (M ha khi)
Thut ton
Kch thc kha
AES
128,256
IDEA
128
RC2-40
40
DES-40
40
DES
56
3DES
168
Fortezza
80

Stream cipher (M ha lung)


Thut ton
Kch thc kha
RC4-40
40
RC4-128
128

Fortezza 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 trc
khi 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 gm
nhiu byte m c theo sau bi 1 byte ch r chiu di ca phn m.Tng s lng m vo l lng nh nht
sao cho tng kch thc d liu c m ha (plaintext +MAC + padding) l 1 bi s ca chiu di khi m ha.V
d, plaintext (hoc text nn nu nn c dng) l 58 byte, vi MAC l 20 byte (dng SHA-1), c m ha vi
chiu di block l 8 byte (nh DES..).Cng vi byte padding.length ,n sinh ra tng cng 79 byte. to ra 1 s
nguyn 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 l
cc giao thc c trng-SSL,c bn n trong phn k tip.Ch rng khng c s khc bit no c to ra
gia cc ng dng (nh HTTP..) c th dng SSL,ni dung d liu c to ra bi cc ng dng th khng trong
sut i vi SSL.

Secure Socket Layer

12

PTIT 2009

ti mn Bo mt thng tin

Hnh 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 dng
giao thc SSL Record . Giao thc ny bao gm mt message n 1 byte gi tr l 1. Mc ch chnh ca message
ny l sinh ra trng thi tip theo gn vo trng thi hin ti,v trng thi hin ti cp nht li b m ha s
dng 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 dng
khc 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) thng
bo nghim ngt ca message.Nu mc l nguy him,SSL lp tc chp dt kt ni.Nhng kt ni cng phin
khc vn c th tip tc nhng s khng kt ni no khc trn phin ny c khi to thm.Byte th hai cha mt
m ch ra cnh bo c trng.u tin , chng ta lit k nhng cnh bo m lun mc nguy him ( c nh
ngha 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 gii
nn 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 mt
c a ra t nhng la chn c sn.

Secure Socket Layer

13

PTIT 2009

ti mn Bo mt thng tin

illegal_parameter: mt trng trong mt handshake message th vt khi dy hoc tri vi nhng trng
khc
Phn 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 ni
ny.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 c
sn.
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 n
khng th chp nhn.

Secure Socket Layer

14

PTIT 2009

ti mn Bo mt thng tin

I.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 nhau
v thng lng c ch m ha , thut ton MAC v kha mt m c s dng bo v d liu c gi trong
SSL 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 ba
trng:
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.5a
Hnh I.5a Cc kiu message giao thc SSL handshake
Kiu message
Hello_request
Client_hello
Server_hello
Certificate
Server_key_exchange
Certificate_request
Server_done
Certificate_verify
Client_key_exchange
Finished

Thng s
Null
version, random, session id, cipher suite, compression
method
version, random, session id, cipher suite, compression
method
chain of X.509v3 certificates
parameters, signature
type, authorities
Null
signature
parameters, signature
hash value

Hnh 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 th
xem nh c bn giai on.

Secure Socket Layer

15

PTIT 2009

ti mn Bo mt thng tin

Hnh I.5b C ch giao thc SSL Handshake

I.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 trao
i 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 bi
mt b sinh s ngu nhin an ton. Nhng gi tr ny phc v cho ln ny v s dng sut qu trnh trao i
kha ngn tn cng lp li.

Secure Socket Layer

16

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_hello
message.Vi server_hello message, nhng tha thun km theo c p dng. Trng Version cha version thp
hn c ngh bi client v cao nht c h tr bi sever.Trng Random c sinh ra bi server v c lp
vi 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 chn
bi 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 kha
m 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 DiffieHellman 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 DiffieHellman 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

PTIT 2009

ti mn Bo mt thng tin

IsExportable: 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 cha
mt hoc mt chui certificate(chng thc) X.509. Thng ip chng thc c yu cu cho bt k mt
phng php trao i kha no c tha thun, ngoi tr anonymous Diffie-Hellman.Ch rng nu fixed
Diffie-Hellman c dng,th thng ip chng thc c chc nng nh l thng ip trao i kha ca
server 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 cu
trong 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 DiffieHellman 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 thng
ip hello khi to.iu ny m bo chng li tn cng replay v misrepresentation(gi dng).Trong trng hp
ch 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(36
byte) c m ho vi kha b mt ca server.
K n, mt nonanonymous server(server khng dng anonymous Diffie-Hellman) c th yu cu mt
certificate t client.Mt thng ip certificate_request bao gm hai thng s certificate_type v
certificate_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 Layer

18

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 nu
c 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 ny
bng cch gi 1 thng ip certificate.Nu khng c certificate ph hp no hp l, client gi mt cnh bo
no_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 thuc
vo 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 server
hoc kha RSA ph t thng ip server_key_exchange. N dng tnh ton mt master secret(s c ni
sau).
- 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 ip
certificate,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 mt
chng ch client.Thng ip ny ch c gi theo sau bt k mt client certificate no nh du l c kh
nng(ngha l tt c certificate ngoi tr nhng ci cha tham s fixed Diffie-Hellman). Thng ip ny nh du
mt m bm da trn cc thng ip c trc,c nh ngha nh sau:
CertificateVerify.signature.md5_hash
MD5(master_secret || pad_2 || MD5(handshake_messages || master_secret || pad_1));
Certificate.signature.sha_hash
SHA(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 cc
thng ip giao thc bt tay c gi i hay c nhn bt u t client_hello nhng khng bao gm thng ip
ny,v master_secret l kha b mt c tnh ton m qu trnh xy dng s c tm hiu sau. Nu kha b mt
ca 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 thc
client.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 chp
CipherSpec m vo CipherSpec hin ti.Ch rng thng ip ny khng c xem l mt phn ca giao thc bt
tay nhng c gi i s dng giao thc Change Cipher Spec. Client sau ngay lp tc gi thng ip kt thc
theo gii thut mi, vi cc kha v cc b mt.Thng ip kt thc xc minh xem qu trnh trao i kha v xc
thc c thnh cng hay khng.ni dung ca thng ip hon tt l mt chui ca hai gi tr bm :

Secure Socket Layer

19

ti mn Bo mt thng tin

PTIT 2009

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 c
thng 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 treo
cho cipherSpec hin ti v gi thng ip kt thc ca n i. im ny qu trnh bt tay hon thnh v client v
server 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 ca
server, v gi cho server.Server gii m ciphertext s dng kha b mt ca n phc hi li
pre_master_secret.
Diffie-Hellman: c client v server sinh ra kha cng khai Diffie-Hellman. Sau , nhng kha ny
c 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

PTIT 2009

ti mn Bo mt thng tin

I.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 ra
t master_secret theo th t .Nhng tham s ny c sinh ra t master_secret bng cch bm master_secret
thnh 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 t
pre_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 ngu
nhin.Cc s ngu nhin client v server c th c nhn nh l cc gi tr khng ng tin cy(salt value) lm phc
tp s gii m cc mt m.

Secure Socket Layer

21

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 ngha
ging 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 nh
sau:
HMACK(M) = H[(K+
Vi :

opad)||H[(K+

ipad)||M]]

H: hm bm nhng(dnh cho TLS, hoc MD5 hoc SHA-1)


M: thng ip u ra i vi HMAC

K+ : 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

PTIT 2009

ti mn Bo mt thng tin
Ipad =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 b
mt 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 trng
TLSCompresses.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 d
liu cho mc ch sinh kha hay ph chun.i tng l to ra cch s dng cc gi tr shared secret nh c lin
h vi nhau, nhng pht sinh cc khi di hn theo cch an ton khi s tn cng da trn hm bm v
MACx.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)=seed
A(i) =HMAC_hash(secret,A(i-1))

Secure Socket Layer

23

PTIT 2009

ti mn Bo mt thng tin

Hm m rng d liu to cch s dng gii thut HMAC, vi hoc MD5 hoc SHA-1 nh l trn c s hm
bm.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 yu
cu.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 d
liu,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 bytes
d 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 c
s 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 nu
gii 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 c
chiu di ty .Output c to bng cch phn ct gi tr b mt thnh hai na (S1 v S2 v biu din P_hash mi
na,s dng MD5 mt na v SHA-1 na khc.Hai kt qu c thc hin bi php XOR to ra output, cho
mc ch ny,P_MD5 nhn chung phi lp li nhiu ln hn P_SHA-1 to mt lng d liu ngang bng cho
input 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 thm
vo 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 di
khi hoc gi tr m ca n,khi kim tra l khng ng.

Secure Socket Layer

24

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, hoc


ciphertext 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 chp
nhn 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 nh
khng 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 ca
message khng ng.
export_restriction : mt tha thun khng c chp nhn vi vic xut ra cc hn ch trn chiu di kha b
pht 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 server
yu 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 ra
khng 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 kha
hay 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 thng
ip ny s c kt qu bnh thng trong vic tha thun li,nhng cnh bo ny ch ra rng sender khng th
tha 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 trong
SSLv3,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 ip
certificate_request:rsa_sign,dss_sign,rsa_fixed_dh, v dss_fixed_dh. Tt c nhng kiu ny c nh ngha trong
SSLv3. 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 h
thng Fortezza.

Secure Socket Layer

25

PTIT 2009

ti mn Bo mt thng tin

I.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 bt
tay(handshake_message).Nh li rng SSLv3 tnh ton hm bm cn bao gm master_secret v m.Cc trng
thm 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 trn
shared_master_secret, thng ip bt tay trc, v mt nhn xc nh client hay server, vic tnh ton c i cht
khc 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 trong
TLS c tnh ton nh 1 hm bm ca pre_master_secret v hai s ngu nhin hello.Cng thc ca php tnh ton
TLS 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 liu
key(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 server
random 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 thc
tng ca d liu c m ha l mt php nhn ca chiu di khi ca cipher.Trong TLS, padding c th l bt k
s 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 ln
nht l 255 byte.V d, nu 1 plaintext (hoc vn bn nn c dng) cng vi MAC+padding length byte l di 79
byte.Sau chiu di padding,tnh theo byte, c th l 1,9,17 v hn na,n 249. Chiu di phn m ty bin c
th chng li cc tn cng da trn mt php phn tch cc chiu di ca cc thng ip trao i.

Secure Socket Layer

26

PTIT 2009

ti mn Bo mt thng tin

Chng 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 ca
kt ni l SSLSocket v SSLEngine . Trong biu bn di, nhng class ln c dng to
SSLSocket/SSLEngines c sp xp theo trt t logic.

Mt SSLSocket th c to bi mt SSLSocketFactory hoc mt SSLServerSocket cho vic nhn vo


mt kt ni inbound.( mt khc, mt SSLServerSocket c to bi mt SSLServerSocketFactory) . C
cc i tng SSLSocketFactory v SSLServerSocketFactory c to bi SSLContext. Mt
SSLEngine 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. Lp
SSLSocket/SSLEngine s khng t ng xc minh, v d hostname trong mt URL trng vi hostname trong
xc thc u cui. ng dng c th b li dng URL spoofing nu hostname khng c xc minh
C hai cch s dng v khi to mt SSLContext:

Secure Socket Layer

27

PTIT 2009

ti mn Bo mt thng tin

n gin nht l gi phng thc tnh getDefault trn lp SSLSocketFactory hoc


SSLServerSocketFactory . Nhng phng thc ny to mt SSLContext mc nh vi mt
KeyManager, TrustManager v mt b khi to s b mt ngu nhin. (Mt
KeyManagerFactory v TrustManagerFactory mc nh c s dng to KeyManager v
TrustManager tng ng.) Key material c tm thy trong keystore/truststore mc nh, c nh r
bi tnh cht h thng m t trong Customizing the Default Key and Trust Stores, Store Types, and Store
Passwords.
Phng thc trao i bn gi phn ln iu khin cch hot ng ca context c to th gi l phng
thc tnh getInstance trn lp SSLContext , sau khi to context bng cch gi phng thc
ring init ca trng hp . Mt thc th ca phng thc init mang ba phn sau: mt dy i tng
KeyManager, mt dy i tng TrustManager v mt b sinh s b mt ngu nhin
SecureRandom. i tng KeyManager v TrustManager c to bi vic b sung cc
interface(s) thch hp hoc dng lp KeyManagerFactory v TrustManagerFactory pht sinh
cc b sung. KeyManagerFactory v TrustManagerFactory c th c khi to vi mi key
material cha trong KeyStore qua phng thc TrustManagerFactory/KeyManagerFactory
init. Cui cng phng thc getTrustManagers (trong TrustManagerFactory) v phng
thc getKeyManagers (trong KeyManagerFactory) c th c gi s dng nhng chui ca
trust 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 khi
to, b m ha c dng , .v.v. . SSLSession khi c dng th hin mi lin h xy ra bn trn v thng tin
trng thi gia hai thc th . Mi kt ni SSL bao gm 1 phin ti mt thi im nhng phin th li c th c
dng 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 factories
khc, m to nhng subclasses ring bit ca sockets v v vy cung cp mt framework tng qut cho phn thm
vo ca chc nng public socket-level. (xem v d SSLSocketFatory )
Lp javax.net.ServerSocketFactory th tng t lp SocketFactory, nhng n ch dnh ring cho
vic to server sockets.
Socket factories l cch n gin cc chnh sch lin quan n sockets c xy dng,vic thit lp sockets theo
mt 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 dng
m 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 t
iu 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), cho
nn ta c th trnh by mt APIs mi cho nhng c trng nh nn , bo mt ,nh du record,la chn thng
k, 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 ny
l mt phn lp tru tng ca javax.net.SocketFatory

Secure Socket Layer

28

PTIT 2009

ti mn Bo mt thng tin

Secure 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 s
dng 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 th
no sockets c cu hnh c th bao gm 1 phng thc vi 1 thng s SSLSocketFactory c gi
bi 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 mc
nh 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 sockets
factory c lt qua nh mt thng s nh l mt cch tt cch ly chi tit ca cu hnh socket v tng s ti
dng 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 m
hot ng nh mt factory cho socket factories. Mt v d l lp SSLContext m c cung cp trong JSSE
nh 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 c
phng thc socket chun v thm nhng phng thc b sung c trng vo secure sockets. C bit ca lp ny l
ng gi SSLContext bn di nhng g m n to. C nhng APIs iu khin vic to secure socket sessions cho
mt 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 cho
cho 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 mt
kt ni l handshake hay d liu ng dng,v nh th no d liu c th tc ng trng thi kt ni hin ti (ngoi
tr trng hp qu trnh b block). Trong thc thi ca Sun JSSE, phng thc available()trn i tng t
c t SSLSocket.getInputStream()tr v tng s ca bytes d liu ng dng gii m thnh cng t
kt 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 mt
vi phng thc createSocket trn lp . Cch th hai to SSLSockets qua phng thc accept trn lp
SSLServerSocket .

Secure Socket Layer

29

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 tha
mn hiu sut , kh nng , theo di v nhng yu cu khc ca ng dng. l s i hi s dng n trong trong
nhng knh I/O blocking v non-blocking , I/O khng ng b, cc lung input v output a dng , v nhng b
m byte. l s yu cu n trong mi trng nhy cm c bin i v hiu sut cao m yu cu qun l hng
ngn network connections.
Trc J2SE 5 , JSSE API h tr ch mt khi nim tru tng transport n : lung sockets nn thng qua
SSLSocket. Trong khi dng ny tng thch vi nhiu ng dng , n khng gp phi nhng yu cu ca ng dng
m 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 t
do chn cch thc vn chuyn v m hnh tnh ton tt nht m n cn. N cn thch nghi vi nhiu m hnh lin
kt. iu ny cho php mt cch hiu qu I/O v lin kt vo ng dng . Bi v tnh linh hot ny , ng dng by
gi 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 thuc
java.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 s
dng 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 trch
nhim cho ngi lp trnh , vic thc thi JSSE th b ngn khng cho tr nn khng s dng c bi v nhng chi
tit 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 tng
t rng ng dng th cng chu trch nhim cho d liu vn chuyn.
SSLEngine
Lp chnh trong khi nim mi ny l javax.net.ssl.SSLEngine .N ng gi mt SSL/TLS c ch trng thi v
cch vn hnh trn b m byte inbound v outbound h tr bi ngi dng ca SSLEngine. Lc sau s minh
ha lung d liu ca data t ng dng , n SSLEngine , n c ch vn chuyn v quay v

Secure Socket Layer

30

PTIT 2009

ti mn Bo mt thng tin

Tng ng dng bn tri cung cp d liu ng dng (plaintext) trong mt application buffer v chuyn n cho
SSLEngine . 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 cho
vic vn chuyn tng ng (bn phi) gi ni dung ca network buffer n u bn.Lc nhn d liu m ha
SSL/TLS t u bn ( thng qua tng vn chuyn) , ng dng a d liu vo trong network buffer v chuyn n
n 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 :
Creation sn sng cu hnh.
Initial handshaking - thc thi chng thc v thng lng thng s truyn thng.
Application data sn sng cho trao i d liu.
Rehandshaking - ti thng lng thng s truyn thng / chng thc;d liu handshaking c th c
gn vo d liu ng dng.
5. Closure sn sng ng kt ni.
1.
2.
3.
4.

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 hot
ng nh mt client hoc mt server, cng nh t cc thng s cu hnh khc nh l cipher suites c dng v c
yu 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 vi
server tt cc vn chuyn l trch nhim ca ng dng.Chng gi cho ngi cung cp JSSE s dng vic cache
SSL 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 material
char[] passphrase = "passphrase".toCharArray();
// Khi to ln u key v trust material.
KeyStore ksKeys = KeyStore.getInstance("JKS");

Secure Socket Layer

31

PTIT 2009

ti mn Bo mt thng tin

ks.load(new FileInputStream("testKeys"), passphrase);


KeyStore ksTrust = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("testTrust"), passphrase);
// KeyManager's quyt nh key material no c dng.
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ksKeys, passphrase);
// TrustManager's 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 engine
SSLEngine engine = sslContext.createSSLengine(hostname, port);
// S dng nh mt client
engine.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 dng
d liu network tng ng. ph thuc vo trng thi SSLEngine, d liu ny c th l d liu handshake hay ng
dng.
Mi SSLEngine c mt vi giai on trong sut thi gian sng ca n. Trc khi d liu ng dng c th c
gi/nhn , giao thc SSL/TLS yu cu mt handshake khi to thng s m ha. Handshake ny yu cu mt
lot 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 ng
dng th chu trch nhim cho vic vn chuyn d liu. Chui wrap()/unwrap() c lp li cho n khi
hanshake c hon tt. Mi qu trnh hot ng SSLEngine khi to mt SSLEngineResult, ca trng
SSLEngineResult.HandshakeStatus no c dng xc nh c ch no cn xy ra tip theo tin
ti handshake .
Mt handshake in hnh c th nh sau:
Client
wrap()
unwrap()
wrap()
wrap()
wrap()
unwrap()
unwrap()

SSL/TLS message
ClientHello
ServerHello/Cert/ServerHelloDone
ClientKeyExchange
ChangeCipherSpec
Finished
ChangeCipherSpec
Finished

HSStatus
NEED_UNWRAP
NEED_WRAP
NEED_WRAP
NEED_WRAP
NEED_UNWRAP
NEED_UNWRAP
FINISHED

By gi th vic handshaking hon thnh, trng thi tip theo s gi wrap() th dng d liu ng dng v
packages 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 thng
qua SSLEngine.wrap() thu c d liu m ha SSL/TLS tng ng.ng dng sau gi d liu cho
u bn theo c ch vn chuyn m n chn . Khi ng dng nhn c d liu m ha SSL/TLS qua c ch

Secure Socket Layer

32

PTIT 2009

ti mn Bo mt thng tin

vn chuyn, n cung cp d liu ny cho SSLEngine thng qua SSLEngine.unwrap() thu c d liu
plaintext 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 bn
kia(N c th c to thng v c th hay i bng vic dng mt Selector vi non-blocking
SocketChannel.) on code sau s gi chui "hello" n u bn kia, bng vic vit m n s dng
SSLEngine to trong v d trc.N s dng thng tin t SSLSession nh ngha ln ca byte
buffers l bao nhiu.
// To mt non-blocking socket channel
SocketChannel socketChannel = SocketChannel.open();
socketChannel.configureBlocking(false);
socketChannel.connect(new InetSocketAddress(hostname, port));
// Hon tt vic kt ni
while (!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 ha
SSLSession 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 u
doHandshake(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 kia
while(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 Layer

33

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 cch
dng SSLEngine to trc .Mi vng lp ca on code c th hoc khng sinh ra bt c d liu paintext
no,ph thuc vo c hay khng handshaking th ang c x l.
// c d liu m ha SSL/TLS t u bn
int 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 vo
peerNetData.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() v
SSLEngine.unwrap()tr li mt SSLEngineResult c th,nh trong v d trc. SSLEngineResult cha
hai 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 ca
trng thi ny bao gm Ok, c ngha la khng c li, v BUFFER_UNDERFLOW, c ngha l input buffer c d liu
cha , 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.HandshakeStatus
enum.Chng biu din vic handshaking c hon thnh hay cha, c hay khng bn gi cn thu thm d liu
handshaking 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 li
handshaking v mt l biu din trng thi tng th ca phng thc wrap()/unwrap() .Cho mt v d ,c th
engine , nh l mt kt qu ca lnh gi n SSLEngine.unwrap() , tr v
SSLEngineResult.Status.OK ch ra rng d liu nhn vo x l thnh cng v
SSLEngineResult.HandshakeStatus.NEED_UNWRAP ch ra rng ng dng cn thu thm d liu m ha
SSL/TLS t u bn v cung cp n cho SSLEngine.unwrap() ln na m handshaking c th tip tc.Nh
bn thy , v d trc th c n gin rt nhiu, chng cn c pht trin y iu khin chnh xc tt c
trng thi ny.

Secure Socket Layer

34

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 gian
di.Cho v d nh mt TrustManager c th cn kt ni n mt dch v ph chun certificate t xa, hay mt
KeyManager c th cn thc gic user xc nh certificate no dng chng thc client. gi cho trng thi
t nhin ca SSLEngine, khi engine gp phi vic, n s tr v
SSLEngineResult.HandshakeStatus.NEED_TASK. Trong lc nhn trng thi ny,ng dng cn gi
SSLEngine.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 iu
khin 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 close
message.V vy, khi mt ng dng c thc hin vi kt ni SSL/TLS,n nn thu close message trc tin t
SSLEngine, sau truyn chng cho u bn dng c ch vn chuyn, v cui cng shut down c ch vn
chuyn.y l mt th d
// Ch ra ng dng c thc hin vi engine
engine.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 transport
socketChannel.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 bt
gp mt li trong khi x l ng dng hoc d liu handshake, ch ra bi mt SSLException..Trong trng hp
nh th ,ng dng nn gi SSLEngine.wrap() ly close message v gi n cho u bn n khi
SSLEngine.isOutboundDone() tr v true, nh trong v d trc , hoc
SSLEngineResult.getStatus() tr v CLOSED.

Secure Socket Layer

35

PTIT 2009

ti mn Bo mt thng tin

Thm vo vic shutdown c th t th cng c kt thc khng theo th t m lin kt vn chuyn c ct t


trc khi close message c trao i.Trong v d trc, ng dng c th nhn -1 khi th c hoc vit nonblocking SocketChannel. Khi ly ht d liu nhn vo, bn nn gi engine.closeInbound(), m s xc minh vi
SSLEngine rng u bn kia ng hon ton phi cnh SSL/TLS ,v khi ng dng s vn th shutdown hon
ton bng vic dng kt qu trn.Hin nhin, khng ging nh SSLSocket, ng dng dng SSLEngine phi
dnh lu ti nhiu chuyn tip trng thi, tnh trng v lp trnh hn vic dng SSLEngine. Hy xem NIO-based
HTTPS 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 mt
kt ni SSLSocket/SSLEngine. Mi mt session th c sp xp, n c th c chia s bi
SSLSocket/Engines sp ti kt ni gia cng c hai bn. Session cha cipher suite m s c dng cho lin
lc mt secure socket cng nh mt non-authoritative gi n a ch network ca u bn, v thng tin qun l
nh thi gian khi to v ln dng sau cng. Session cng cha mt shared master secret thng lng gia cc
bn v to kha b mt cho vic m ha v m bo s ton vn ca lin lc thng qua mt
SSLSocket/SSLEngine. Gi tr ca master secret ny c bit ch c bit cho vic thc thi secure socket
bn 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/TLS
sockets v xc thc u cui trc khi yu cu hoc nhn d liu . javax.net.ssl.HttpsURLConnection
m rng lp java.net.HttpsURLConnection, v thm vo h tr cho c trng ring https . Xem lp
java.net.URL ,java.net.URLConnection,java.net.HttpURLConnection , v
javax.net.ssl.HttpURLConnection , bit thm thng tin v nh th no https URLs c xy dng
v s dng .
Trong lc nhn mt HttpsURLConnection, bnc th cu hnh mt s thng s ca http/https trc khi khi
to 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 nh
Ty chnh SSLSocketFactory ch nh
Trong mt vi trng hp , n th mun ch nh SSLSocketFactory rng mt HttpsURLConnection s
dng ring. V d bn c th mun o xuyn qua mt dng proxy m khng c h tr bi vic thc thi khng
y . SSLSocketFactory mi c th tr v nhng sockets m ng vai tr tt c cc tunneling cn thit , v
vy 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 hp
c bit c th c ca HttpsURLConnection s tha hng SSLSocketFactory mc nh ca hin ti cho
n khi mt SSLSocketFactory mc nh mi c ch nh cho lp thng qua phng thc tnh
HttpsURLConnection.setDefaultSSLSocketFactory. Mi trng hp ca HttpsURLConnection
th c to , SSLSocketFactory c k tha trong trng hp ny c th c gi qua bn gi qua phng
thc setSSLSocketFactory .
Lu rng vic thay i SSLSocketFactory tnh mc nh th khng tc ng ln trng hp ang c ca
HttpsURLConnections, mt lnh gi phng thc setSSLSocketFactory th cn thit thay i
trng hp ang c.

Secure Socket Layer

36

PTIT 2009

ti mn Bo mt thng tin

Mt cch khc c th thu mi trng hp hoc mi lp SSLSocketFactory bng vic to mt lnh gi phng
thc getSSLSocketFactory/getDefaultSSLSocketFactory , tng ng tng ci mt.
Ty chnh HostnameVerifier ch nh
Nu hostname ca URL khng trng vi hostname trong xc minh c nhn nh mt phn ca SSL/TLS
handshake, 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. Vic
xc nhn hostname c th thc thi bt c bc no cn thit lm quyt nh, nh l thc thi vic so snh mu
hostname xen k hay c l pop up mt dialog box tng tc. Mt vic xc minh khng thnh cng bi vic kim tra
hostname s ng kt ni s ng kt ni.(Xem RFC 2818 bit thm thng tin lin quan n vic xc minh
hostname.)
Phng thc setHostnameVerifier/setDefaultHostnameVerifier hot ng cng mt kiu phng
thc setSSLSocketFactory/setDefaultSSLSocketFactory , trong c ch nh trn mi trng
hp v mi lp c bn, v gi tri hin thi c th c thu bi mt lnh gi phng thc
getHostnameVerifier/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 tng
SSLContext,m c dng to cc i tng SSLSocketFactory,SSLServerSocketFactory,v SSLEngine.Cc
lp h tr v cc giao din l 1 phn ca gi javax.net.ssl
3 trong s cc lp ny m t trong section ny(SSLContext,KeyManagerFactory,v TrustManagerFactory) l cc
lp engine(c cu).1 lp engine l 1 lp API dng cho cc gii thut xc nh(hoc cc giao thc,trong trng hp
ca SSLContext),cho ci m cc cng c c th c cung cp trong mt hay nhiu gi Cryptographic Service
Provider(nh cung cp).
Nh cung cp SunJSSE em n nhiu tiu chun vi JSSE cung cp SSLContext,KeyManagerFactory,v cc cng
c TrustManagerFactory,cng nh cc cng c cho cc lp engine theo chun bo mt Java(java.security) API.Cc
cng c c cung cp bi SunJSSE l :
Lp engine c thc hin

Gii thut hoc giao thc

KeyFactory

RSA

KeyPairGenerator

RSA

KeyStore

PKCS12

Signature

MD2withRSA,MD5withRSA,SHA1withRSA

KeyManagerFactory

SunX509,NewSunX509

TrustManagerFactory
SSLContext

SunPKIX(aka X509/PKIX),SunX509
SSLv3(aka SSL),TSLv1(aka TLS)

Secure Socket Layer

37

PTIT 2009

ti mn Bo mt thng tin
II.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 ng
nh 1 factory cho cc SSL socket factories v SSL engine.Mt SSLContext gi tt c cc thng tin trng thi c
chia s qua tt c cc i tng c to di ng cnh ny.V d,trng thi phin c kt hp vi SSLContext
khi n tha thun thng qua giao thc bt tay bng socket c to bi socket factories cung cp bi ng
cnh.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 thc
CA gc c tin cy m n cn biu din xc thc.Cu hnh ny c cung cp di dng cc manager ng tin
cy v kha.Nhng manager ny cung cp h tr cho vic xc thc v cc kha cnh tha thun kha ca cc cipher
suite c h tr bi ng cnh.
Hin ti ch h tr X509 da trn cc manager .
Vic to 1 i tng SSLContext
Ging nh cc provider JCA da trn cc lp engine,cc i tng SSLContext c to s sng phng thc
factory getInstanse ca lp SSLContext.Nhng phng thc tnh ny mi ci tr v 1 thc th m thc hin t nht
1 giao thc SSL c yu cu.Thc th tr v cng c th thc hin giao thc khc.V d,getInstance(SSLv3) c
th tr v 1 thc th m thc hin SSLv3 v TLSv1.Phng thc getSupportedProtocols tr v 1 danh sc cc
giao thc h tr khi 1 SSLSocket,SSLServerSocket hoc SSLEngine c to t ng cnh ny.Bn c th kim
sot ci m cc giao thc thc s dng cho kt ni SSL bng cch s dng phng thc
setEnabledProtocols(String[] protocols).
Note: 1 i tng SSLContext c to ra t ng,c khi to v nh du tnh i vi lp SSLSocketFactory
khi bn gi SSLSocketFactory.getDefault.V vy,bn khng cn phi to trc tip v khi to 1 i tng
SSLContext(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 giao
thc.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 cu


sn c trong mi trng,v nu c nhiu hn 1,nu c 1 ci l c thch hp hn c
Nu 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 giao
thc 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 tng
SSLContext:

Secure Socket Layer

38

PTIT 2009

ti mn Bo mt thng tin
Protocol

Comment

SSL

H tr nhng version ca SSL; c th h tr mt s version khc

SSLv2

H tr SSL version 2 hoc cao hn

SSLv3

H tr SSL version 3; c th h tr mt s version khc

TLS

H tr nhng version ca TLS; c th h tr mt s version khc

TLSv1

H tr TLS version 1; c th h tr mt s version khc

Sau 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 s
TrustManager[] l null,cc provider bo mt c ci t s c tm kim cho vic thc hin c u tin cao
nht ca TrustManagerFactory,t 1 TrustManager thch hp s c thu cc.Theo cch ,tham s
SecureRandom 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() hoc
SSLServerSocketFactory.getDefault()),1 KeyManager mc nh v 1 TrustManager c to ra.Ta chon vic thc
hin 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 tin
cy.Nu giy y quyn khng ng tin,kt ni s b kt thc. xc thc thc th t xa ca 1 im u cui socket
bo mt,bn cn phi khi to 1 i tng SSLContext vi 1 hoc nhiu TrustManager.Bn cn vt qua 1
TrustManager cho mi c ch xc thc m c h tr.Nu gi tr null c gi vo vic khi to,1 trust manager
s c to ra cho bn.Thng thng,c 1 trust manager n h tr xc thc da trn chng thc kha cng khai
X.509 (nh X509TrustManager).Mt vi secure socket implement cng h tr xc thc da trn vic chia s kha
b 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 ca
interface.
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 1
factory cho 1 hay nhiu kiu i tng TrustManager .V n l provider c s,cc factory b sung c th c thc
hin v cu hnh m cung cp cc trust manager thm vo v lun phin m cung cp nhiu dch v phc tp hoc
thc hin cc policy xc thc c ci t c th.
To 1 TrustManagerFactory:

Secure Socket Layer

39

PTIT 2009

ti mn Bo mt thng tin

Bn to 1 thc th ca lp ny theo kiu tng t vi SSLContext,ngoi tr vic thng qua 1 chui tn gii thut
thay 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: PKIX


Gi 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 c
th vit trust manager ca chnh bn,c th s dng CertPath API.Bn khng cn phi dng trust manager factory
nu 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 cung


cp).
i vi nhiu factory,nh SunX509 TrustManagerFactory t nh cung cp SunJSSE,KeyStore ch l
thng tin c yu cu khi to TrustManagerFactory v v vy phng thc init u tin l phng thc ph
hp gi.TrustManagerFactory s truy vn KeyStore cho thng tin theo chng thc t xa nn c tin cy
trong 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 bit
c mong i thng qua vic thc hin ManagerFactoryParameters ph hp nh nh ngha bi nh cung
cp.Nh cung cp sau c th gi cc phng thc c th trong vic thc hin ManagerFactoryParameters thu
c 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 dng
no m mong dng nh cung cp .Ging nh tt c cc nh cung cp yu cu cc tham s khi to nh
KeyStore,nh cung cp s yu cu ng dng cung cp cc thc th ca 1 lp m vic thc hin 1 sub-interface
ManagerFactoryParameters ring bit.Trong v d ca chng ta,gi s nh cung cp yu cu rng vic thc hin
ng dng gi v to thc th ca MyTrustManagerFactoryParams v gi n vo phng thc init th 2. y l
nhng g MyTrustManagerFactoryParams c th th hin:
public interface MyTrustManagerFactoryParams extends
ManagerFactoryParameters {
public boolean getBValue();
public float getRValue();
public String getSValue():
}

Secure Socket Layer

40

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 i


tng KeyStore hoc bt k tham s no khc.v d,chng c th truy cp nguyn liu ng tin cy t dch v danh
mc cc b thng qua LDAP,c th s dng 1 trng thi chng thc trc tuyn t xa hoc c th truy cp nguyn
liu 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 c
sn 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 tnh
ssl.TrustManagerFactory.algorithm trong file java.security( tr li s dng trust manager c,theo th tc trong
Customizing the Default Key and Trust Manager thay i thuc tnh t PKIX n SunX5.09).Ch rng s thay
i ny ch nh hng n cc ng dng m s dng trust mananager mc nh,n ko nh hng n cc ng dng
m trust manager c th tng minh vi SSLContext.init(,TrustManager[],).Cch khc,SunPKIX factory c th
c 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 nh
cung cp SUN CertPath c cung cp vi b J2SE 5 Development Kit.Trust manager factory c th c khi
to s dng phng thc init(KeyStore ks) thng thng,hoc bng cch gi vo cc tham s CertPath cho PKIX
trust 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 b
kim tra thu hi.
import javax.net.ssl.*;
import java.security.cert.*;
import java.security.KeyStore;
...
// To tham s PKIX
KeyStore anchors = KeyStore.getInstance("JKS");
anchors.load(new FileInputStream(anchorsFile));
CertPathParameters pkixParams = new PKIXBuilderParameters(anchors,
new X509CertSelector());
// Ch nh ni LDAP certificate dng
LDAPCertStoreParameters lcsp = new LDAPCertStoreParameters("ldap.imc.org", 389);
pkixParams.addCertStore(CertStore.getInstance("LDAP", lcsp));
// Ch nh rng vic kim tra thu hi th c kch hot
pkixParams.setRevocationEnabled(true);
// Gi chng li nh thng s Trust manager
ManagerFactoryParameters trustParams =

Secure Socket Layer

41

PTIT 2009

ti mn Bo mt thng tin

new CertPathTrustManagerParameters(pkixParams);
// To TrustManagerFactory cho PKIX phc v cho trust manager
TrustManagerFactory factory = TrustManagerFactory.getInstance("PKIX");
// Chuyn thng s cho factory c chuyn cho vic thc thi CertPath
factory.init(trustParams);
// Dng factory
SSLContext 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 tra
thu hi b v hiu.N c th c kch hot bng cch lp thuc tnh h thng com.sun.net.ssl.checkRevocation
thnh true.Ch rng vic thit lp ny yu cu CertPath implementation t n c th xc nh v tr thng tin thu
hi.PKIX implementation trong nh cung cp SUN c th lm nhng iu ny trong nhiu trng hp nhng yu
cu 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 c
thc 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 phi
c 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 da
trnTrustManagerFactory (nh c cung cp bi nh cung cp SunJSSE).bn c th cng thc hin giao din ca
bn m y quyn cho 1 factory to ra trust manager.V d,bn c th lm iu ny lc kt qu quyt nh tin cy
v 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 SunPKIX
TrustManagerFactory,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.trustStore
c nh ngha,sau TrustManagerFactory n lc tm 1 file s dng tn file c th bng thuc tnh h
thng,v s dng file cho KeyStore.Nu thuc tnh h thng javax.net.ssl.trustStorePassword cng c nh
ngha,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 mc
nh s dng 1 keystore rng c to.
2. Nu thuc tnh h thng javax.net.ssl.trustStore khng c xc nh,th nu file:
<java-home>/lib/security/jssecacerts

tn ti,file c dng.

Secure Socket Layer

42

PTIT 2009

ti mn Bo mt thng tin

3. Nu file:
<java-home>/lib/security/cacerts

tn 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 ngm


nh,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 jssecacerts
trc khi kim tra 1 file cacerts m bn c th cung cp 1 tp JSSE c th ca chng thc gc ng tin cy m
rng 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 ra
X509TrustManager ca ring bn bng cch hoc l to v ng k TrustManagerFactory ca ring bn hoc l
bng cch thc hin giao din X509TrustManager trc tip.
Lp MyX509TrustManager sau y lm tng hnh vi SunJSSE X509 TrustManager mc nh bng cch
cung 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("Couldn't initialize");
}
/*

Secure Socket Layer

43

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 khi
to.SocketFactories tng lai c to t SSLContext ny s s dng TrustManager mi ca bn khi to cc quyt
nh 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 checkClientTrusted
hoc checkServerTrusted kim tra c li v khng thit lp 1 chui chng thc ng tin cy,bn c th thm vo
chng thc ng tin cy c yu cu cho keystore.Bn cn to 1 sunX509TrustManager mi t
TrustManagerFactory c khi to vi keystore c cp nht.Khi bn thit lp 1 kt ni mi(s dng
SSLContext 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 gi
i n host xa. xc thc bn thn bn(im u cui socket bo mt cc b) n 1 im u cui xa,bn cn
khi to 1 i tng SSLContext vi 1 hoc nhiu KeyManagers.Bn cn gi 1 KeyManager i vi mi c ch
xc thc s c h tr.Nu gi tr null c gi vo vic khi to SSLContext,1 KeyManager rng s c
to.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 h

Secure Socket Layer

44

PTIT 2009

ti mn Bo mt thng tin

tr xc thc da trn cc chng thc kha cng khai X.509.Mt vi secure socket implement cng c th h tr xc
thc 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 ca
interface.
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 factory
cho 1 hoc nhiu kiu i tng KeyManager.Ngi cung cp SunJSSE thc thi 1 factory c th tr v 1 key
manager X.509 c s.V l nh cung cp c s,cc factory thm vo c th c thc hin v cu hnh cung
cp cc key manager c th thm vo hay thay i.
To 1 KeyManagerFactory
Bn to 1 thc th ca lp ny theo 1 kiu tng t nh SSLContext,ngoi tr gi vo chui tn gii thut thay v
tn 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: SunX509


Gi 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 cung


cp 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 nh


cung cp )
i vi nhiu factory,nh SunX509 mc nh KeyManagerFactory t nh cung cp SunJSSE, KeyStore
v mt khu ch l thng tin c yu cu khi to KeyManagerFactory v v vy phng thc init u tin l
phng thc thch hp gi.KeyManagerFactory s truy vn KeyStore v cc thng tin trn kha b mt v lin
kt cc chng ch kha cng khai nn c dng cho vic xc thc n 1 im u cui socket t xa.Tham s
password xc nh mt khu s dng vi cc phng thc cho truy cp kha t KeyStore.Tt c cc kho trong
KeyStore 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 cung
cp.Ngi s dng ca nh cung cp ring bit c mong i vt qua vic thc thi ca
ManagerFactoryParameters ph hp nh c nh ngha bi nh cung cp.Sau nh cung cp c th gi cc
phng thc c th trong vic thc thi ManagerFactoryParameters thu c thng tin cn thit.

Secure Socket Layer

45

PTIT 2009

ti mn Bo mt thng tin

Mt vi factory c th cung cp truy cp n nguyn liu xc thc m khng phi khi to vi 1 i tng
KeyStore hoc bt k tham s no khc.V d,h c th truy cp nguyn liu kha nh l 1 phn ca c ch login
nh l 1 c ch da trn JAAS(Java Authentication and Authorization Service)
Nh dn trn, nh cung cp SunJSSE h tr 1 factory SunX509 m phi c khi to vi 1 tham
s KeyStore.
II.3.7 X509KeyManager Interface :
Interface javax.net.ssl.X509Manager m rng interface c s KeyManager.N phi c thc hin bi 1 key
manager cho X509 da trn xc thc. h tr xc thc X509 iu khin cc im u cui socket thng qua
JSSE, 1 thc th ca interface ny phi c gi vo phng thc init ca i tng SSLContext.
To 1 X509KeyManager:
Bn c th hoc l thc thi interface ny 1 cch trc tip hoc nhn n t 1 nh cung cp da trn
KeyManagerFactory(nh cc interface c cung cp bi nh cung cp SunJSSE).Bn cng c th thc thi ca
ring bn y quyn n 1 factory sinh ra key manger.V d,bn c th lm iu ny lc cc key kt qu v truy
vn user u cui thng qua 1 interface ha ngi dng.
Ch : Nu khng c tham s KeyStore c gi qua SunJSSE mc nh SunX509
KeyManagerFactory,factory c gng tm nguyn liu kha bng cch tham kho cc thuc tnh h thng:
javax.net.ssl.keyStore
javax.net.ssl.keyStorePassword

Nu nhng thuc tnh ny xc nh 1 file vi 1 password ph hp,factory s dng file ny cho


KeyStore.Nu file ko tn ti,th 1 KeyManager mc nh s dng 1 keystore rng c to.
Thng thng,qua trnh din ra trn server trong giao thc bt tay s cn 1 keystore cho KeyManager ca
n nhn giy y nhim xc thc vi client.Tuy nhin,nu 1 trong s cipher suite ngm nh c
chn,keystore KeyManager ca server khng cn thit.V,nu server khng yu cu client xc thc,qu trnh din ra
khi client khng cn keystore KeyManager.V vy,trong nhng tnh hung ny n c th n nu khng c gi tr
thuc tnh h thng javax.net.ssl.keyStore no c nh ngha.
To X509KeyManager ca ring bn:
Nu hnh vi mc nh X509KeyManager khng ph hp vi tnh hung ca bn,bn c th to
X509KeyManager ca mnh theo cch tng t vi vic to X509TrustManager.
II.3.8 Mi lin h TrustManagers v KeyManagers :
Tm li,sau y l cc trch nhim s kho ca mi kiu manager:
Type
TrustManager
KeyManager

Function
Xc nh th xem xc thc credentials xa no(v c
kt ni) nn c tin cy
Xc nh xc thc credentials no gi cho host xa.

Secure Socket Layer

46

PTIT 2009

ti mn Bo mt thng tin

II.4 Cc Class v Interface h tr th cp :


Nhng lp ny c cung cp nh l 1 phn ca JSSE API h tr vic to,s dng v qun l cc socket bo
mt.Chng hu nh khng c s dng bi nhng ng dng socket bo mt hn l cc lp h tr v cc lp
li.Cc lp v cc interface h tr th cp l 1 phn ca cc gi javax.net.ssl v javax.security.cert
II.4.1 SSLSessionContext Interface :
Javax.net.ssl.SSLSessionContext l 1 nhm ca SSLSession kt hp vi 1 thc th n.Th d,n c th kt
hp vi 1 server hay client tham gia vo nhiu session ng thi.Cc phng thc trn giao din ny kch hot s
lit k cc session trong 1 context v cho php kim tra cc session c bit vi session id ca chng.
1 SSLSessionContext c th c nhn t 1 SSLSession bng cch gi SSLSession phng thc
getSessionContext. Context c th khng hp l trong 1 vi mi trng,m trong trng hp phng thc
getSessionContext tr v gi tr null.
II.4.2 SSLSessionBindingListener Interface :
Javax.net.ssl.SSLSessionBindingListener l 1 interface c thc hin bi cc i tng mun c ch khi
chng c kt ni hoc khng c kt ni t 1 SSLSession.
II.4.3 Lp SSLSessionBindingEvent :
Javax.net.ssl.SSLSessionBindingEvent l 1 s kin giao tip vi 1 SSLSessionBindingListener khi n c kt ni
hoc khng kt ni t 1 SSLSession.
II.4.4 HandShakeCompletedListener Interface :
javax.net.ssl.handShakeCompletedListener l 1 interface c thc hin bi bt k lp no mun nhn thng tin
ch ca vic hon thnh giao thc bt tay SSL trn kt ni SSLSocket c a ra.
II.4.5 Lp SSLHandShakeCompletedEvent :
Javax.net.ssl.HandShakeCompletedEvent l 1 s kin giao tip vi HandShakeCompletedListener nh vo s hon
thnh ca 1 giao thc bt tay SSL trn 1 kt ni SSLSocket c a ra.
II.4.6 HostnameVerifier Interface :
Nu vic xc nhn hostname chun ca SSL/TLS implementation tht bi theo kiu logic,th implementation s gi
phng thc verify ca lp m thc hin interface ny v c nh du vi thc th HttpsURLConnection.Nu
lp gi li c th xc nh hostname c chp nhn c a ra cc tham s,n s ghi li kt ni c cho
php.Hi p khng c chp nhn s l cho kt ni b hy b.
V d:
public class MyHostnameVerifier implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session) {
// pop up mt dialog box tng tc
// hay thm mt logic theo di b sung
if (good_address) {
return true;
} else {
return false;
}
}
}
//... hy...
HttpsURLConnection urlc = (HttpsURLConnection)

Secure Socket Layer

47

PTIT 2009

ti mn Bo mt thng tin

(new URL("https://www.sun.com/")).openConnection();
urlc.setHostnameVerifier(new MyHostnameVerifier());

II.4.7 Lp X509Certificate :
Nhiu giao thc socket bo mt biu din xc thc s dng cc chng thc kha cng khai, cng c gi l cc
chng thc X.509 .y l c ch xc thc mc nh dnh cho giao thc SSL v TLS.
Lp tru tng java.security.cert.X509Certificate cung cp 1 cch chun truy cp cc thuc tnh ca cc
chng thc X.509
Ch : lp javax.security.cert.X509Certificate c h tr ch tng thch tr li vi phin bn c (1.0.x
, 1.1.x) ca JSSE. Cc ng dng mi nn s dng java.security.cert.X509Certificate, khng phi
javax.security.cert.X509Certificate

Secure Socket Layer

48

PTIT 2009

ti mn Bo mt thng tin

Chng III :

III.1 Cc phng php tn cng SSL da trn k thut tn cng MITM


III.1.1 Diffie Hellman MITM Attack :
Trong qu trnh HankShake, nu Client v Server quyt nh s dng thut ton trao i kha Anonymous Diffie
Hellman th trong phase 2 v phase 3 bc Server Key Exchange v Client Key Exchange s xy ra s trao i
cc tham s (g,p,gamod p) ca thut ton tng t nh sau:

v khng c bt k s xc thc no.Do attacker c th li dng im yu ny thc hin tn cng:

Lc ny attaker s dng 2 kha, 1 kha giao dch vi Client v kha cn li giao dch vi Server.C Client v
Server u khng nhn thy c s thay i bt thng

Secure Socket Layer

49

PTIT 2009

ti mn Bo mt thng tin

III.1.2 SSLSniff & SSLStrip MITM Attack :


y l 2 kiu tn cng nh vo tm l ngi dng

Giao dch https thng thng

SSLSniff MITM Attack


Vi Client, Attaker s to ra 1 digital certificate gi mo Server,digital certificate ny kh ging vi digital
certificate ca Server v ch khc 1 s trng.c bit l trng PU,attacker thay th PU ca Server bng PU ca
mnh.Vi Server, attacker tin hnh giao dch nh 1 Client thng thng.Khi giao dch,trn Client s xut hin
nhng warning nhng hu ht ngi dng u b qua nhng cnh bo ny.Kt qu l mi thng tin trong qu trnh
giao dch u b nghe ln bi attacker

SSL Strip MITM Attack


i a s ngi dng khi truy cp web u khng g chui k t http:// hoc https:// .V vy ngi dng
thng s dng SSL 1 cch gin tip thng qua cc HyperLinks v Redirection Messages(c x l bi
browser).Attacker can thip vo kt ni gia Client v Server,thay th cc HyperLinks https://.... thnh http://....
v cc Redirection Messages ti cc trang https://.... thnh cc trang http://....Kt qu l attacker thc hin kt
ni http thng thng vi Client v https vi Server,v khng c SSL trong kt vi Client nn attacker c th c
mi thng tin

Secure Socket Layer

50

PTIT 2009

ti mn Bo mt thng tin

III.2 Demo tn cng SSLStrip :

My Server chy chng trnh ClassFileServer:


a. Chng trnh c vit theo dng TCP Server
b. X l a lung
c. Dng JSSE h tr bi ngn ng Java m SSLServerSocket cho yu cu kt ni port 443
My attacker s dng Cain tn cng
Cain dng phng php arp poisoning, gi lin tc cc gi arp reply v pha Victim v Gateway Router mi
30s.iu ny lm sai lch bng arp trn victim v Client:
i. Trn my Victim bng arp xut hin entry c thng tin:
Internet Address : 1.1.1.1 (Gateway)
Physical Address : 00-0c-29-61-2e-d3 (Attacker)
ii. Trn Gateway Router bng arp xut hin entry c thng tin:
Internet Address : 1.1.1.2 (Victim)
Physical Address : 00-0c-29-61-2e-d3 (Attacker)
Lc ny mi thng tin qua li gia Victim v GateWay u qua Attacker.Khi Victim thc hin kt ni https vi
Server th trong qu trnh HandShake ti phase 2 bc certifiate,chng trnh Cain trn my Attacker to ra 1
certificate gi mo v gi cho Client ng thi tip nhn Servers certificate nh Client bnh thng.Khi nhn
certificate gi mo,browser trn Client s thng bo sercurity alert nhng phn ln ngi dng u b qua dn n
vic Attacker c th d dng can thip vo qu trnh HankShake gia Client v Server.Kt qu l Attacker c th
c c mi thng tin m ha ca Client v Server.
Tuy nhin nu Client t a ch gateway l chnh n 1.1.1.2 v Gateway bt c ch ARP Proxy th lc ny qu
trnh tn cng b tht bi . Attacker ch nhn c nhng gi tin t Gateway tr v cho Client ,cn nhng gi tin c
a ch ch l webserver th Client s gi i vi destination mac address l ca Gateway v vy Attacker khng th
thu c.Nhn chung cch phng trnh tt nht nhm hn ch tn cng MITM chnh l s thn trng ca ngi
dng u cui v s thng xuyn kim tra gim st trong mng ni b.

Secure Socket Layer

51

PTIT 2009

ti mn Bo mt thng tin

Chng IV :

IV.1 Cc ng dng ph bin ca SSL :


Tuy n nay vn cn tn ti mt s l hng c th b khai thc nhng SSL vn l giao thc bo mt cao nht m
cha mt giao thc bo mt no c th thay th vai tr ca n . N ph bin n mc nu thy tn mt giao thc c
hu t s th ngi ta bit ngay giao thc ng dng c kt hp km vi SSL. Sau y l mt s port ph bin
ca nhng ng dng i km SSL c IANA cng nhn :
Name
Nsiiop
Https
Smtps
Nntps
Ldaps
Ftps-data
Ftps
Telnets
Imaps
Pop3s

Port
261
443
465
563
636
989
990
992
994
995

Description
Dch v IIOP trn TLS/SSL
HTTP trn TLS/SSL
SMTP trn TLS/SSL
NNTP trn TLS/SSL
LDAP trn TLS/SSL
FTP-d liu trn TLS/SSL
FTP-iu khin trn TLS/SSL
TELNET trn TLS/SSL
IRC trn TLS/SSL
POP3 trn TLS/SSL

Ngoi mt s ng dng ph bin hin nay ca SSL nh bo mt trong Remote Desktop Protocol cho kt ni
Terminal Service, Http cho Outlook Web Access hay Smtp/Imap/Pop3 cho mail , ng dng quan trng ca SSL m
khng th khng nhc ti l SSL VPN. l l do ti sao khng ch cc nh cung cp thit b mng phn cng
ang ua nhau trong vic pht trin cc sn phm h tr SSL VPN m c nhng nh cung cp thit b mng mm
nh Microsoft cng a n vo sn phm Windows Server 2008 v Windows Vista Service Pack 1 ca mnh vi c
ch Secure Socket Tunneling Protocol (SSTP).

Secure Socket Layer

52

PTIT 2009

ti mn Bo mt thng tin

Sau y chng ta s tm hiu mt vi im c bn ca SSTP:

SSTP l c ch kt ni VPN client to gateway bng HTTP over Secure Socket Layer (HTTP over SSL) port
443. Thng thng, trong mt h thng mng hin nay d l cc Firewall hay Proxy server u cho php truy
cp HTTP v HTTPS. V vy, d bt c u cc my Client u c th kt ni VPN bng c ch SSTP v
m bo bo mt c gi tin v p dng phng php m ha SSL.
SSTP c tch hp h tr NAP bo v ngun ti nguyn mng tt hn bng cch thi hnh cc chnh
sch v system health.
SSTP h tr IPV6 - ng hm SSTP v IPV6 da trn vic kt ni SSTP thng qua IPV6.
Hn na, SSTP thit lp HTTP ring l thng qua session SSL t SSTP client n SSTP server. Dng
HTTP thng qua SSL Session s gim thiu c chi ph v cn bng ti tt hn.
SSTP khng h tr site to site.
Sau y l bng so snh tm tt SSTP vi 2 c ch VPN ph bin hin nay PPTP v L2TP/IPSec :

Thuc tnh
Dng kt ni

C nh

L2TP/IPSec
C nh

Tm thi

Kiu thit b

Qun l c

Qun l c

Khng qun l c

Kim sot truy cp

Khng chi tit

Khng chi tit

Chi tit

Dng kt ni thch hp

Client-to-Site

Site-to-Site

Client-to-Site

Yu cu Client

Phn mm Client

Phn mm Client

Browser

Tng thch
Firewall/NAT

Km

Km

Tt

ng gi

GRE

L2TP over UDP

SSTP over TCP

C ch m ha

Microsoft Point to Point


Encryption (MPPE) vi
RC4
PPTP

IPSec ESP vi 3DES hoc


AES

SSL vi RC4 hoc AES

L2TP

SSTP

C ch xc thc

Radius,CHAP,PAP,
MS-CHAP,MS-MAP

Radius, Active Directory


,RSA,Secure ID, X509

Radius, Active Directory


,RSA,Secure ID, X509

Qu trnh chng thc


user

Trc khi qu trnh m


ha bt u

Sau khi IPSec session


c khi to

Sau khi SSL session c


khi to

Yu cu certificate cho
khi to VPN tunnel

Khng

Certificate ca c VPN
server v client

ng dng

Mi ng dng trn nn IP

Mi ng dng trn nn IP

Certificate ca VPN server


v root CA certificate trn
client
Trn nn web, mail,
TerminalService,CIFS

Tunnel maintenance
protocol

PPTP

SSTP

Secure Socket Layer

53

PTIT 2009

ti mn Bo mt thng tin

IV.2 Trin khai SSL :


Nhn chung khi la chn gii php SSL cho bo mt th ngi qun tr phi xem xt n nhiu kha cnh
nh : kh thi ,chi ph trin khai , nhn s , kh nng duy tr , nh hng n h thng , .v.v.
Khi trin khai ta cn chc chn chng trnh qun l ng dng ca server v client u h tr SSL v
cp nht nhng update / bn v m bo khng b k xu li dng . ng k certificate nn la chn t nhng
CA ln v c uy tn.
Sau y l trnh by tm tt cc bc cu hnh chnh ca mt webserver IIS 6.0 ca Microsoft chy SSL vi
certificate ng k t VeriSign ,t ta c th p dng trin khai cho cc ng dng khc :
1. To Request Certificate
2. ng k SSL Certificate t VeriSign.com
3. Cu hnh Trusted Root Certification Authority
4. Import SSL Certificate cho Web Server

1.To Request Certificate :


Trong IIS 6.0 Manager , m Folder WebSites , right click website mun xin certificate ( v d chn Default Web
Site
=> Properties
=> Tab Directory Security
=> Server Certificate
=> Create a new certificate

=> Prepare a request now ,but send it later

Secure Socket Layer

54

PTIT 2009

ti mn Bo mt thng tin

=> Name and Security Settings default


=> in thng tin v Organizition
=> Common name : in tn min trang web m ng k vi DNS hoc nu mun ch mang ngha local th
in NetBios name ( v d in www.ptit.com v lc sau khi ng k thnh cng s dng DNS ca chnh mnh)
=> in thng tin Country ,State ,City
=> Browse n ni mun to v t tn cho certificate request

=> xem li summary


=> Finish
=> OK

2.ng k SSL Cerificate t VeriSign.com :


M trang web www.verisign.com
=> chn Free Trial SSL
=> Nhp cc thng tin c nhn theo mu ,cn in chnh xc mail nhn kt qu
=> Tip tc nhp Teachnical Contact
=> Quay v ni t certificate request ,copy ni dung

Secure Socket Layer

55

PTIT 2009

ti mn Bo mt thng tin

=> Paste ni dung vo Paste Certificate Signing Request (CSR) ,chn Server Platform l Microsoft , version l IIS
6.0 ,chn mc ch s dng certificate ny l Web Server

=>t cu hi b mt v cu tr li (ch c tc dng nu sau ny mun quay li sa thng tin v certificate ny)
=> Xem li summary v acceptance
=>Finish

Secure Socket Layer

56

PTIT 2009

ti mn Bo mt thng tin

3.Cu hnh Trusted Root Certification Authority :


V trial root CA ny l cha chnh thc nn ta phi i cu hnh Trustted Root CA, nu ta mua mt certificate chnh
thc th khng cn lm bc ny .
=> Vo mail dng ng k certificate ,m th tr li , down load Trial SSL Intermediate CA certificate

=> Chn link VeriSign CA Certificate


=> Chn Secure Site Trial Root CA Certificate
=> Copy ton b Root CA certificate

Secure Socket Layer

57

PTIT 2009

ti mn Bo mt thng tin

=> Trong my dn ni dung trn vo file txt ri i thnh ca.cer


=> M IE option/tab content/chn Certificate/chn Import ch n file ca.cer /chn Automatically select the
certificate store based on the type of certificate/Finish hoc cng c th trong Run g certmgr.msc/m Trusted Root
Certificate Authorities/right click Certificate/All Task/Import file ca.cer nh trong IE

Secure Socket Layer

58

PTIT 2009

ti mn Bo mt thng tin

4.Import SSL certificate cho web server :


M mail khi ny,copy ton b Trial SSL certificate

=>Trong my dn ni dung vo file mycert.txt


=>Trong IIS manager Properties Default Web Site/tab Dictionary Security/Server Certificate
=> Chn Process the pending request and install the certificate

=> Ch n file mycert.txt

Secure Socket Layer

59

PTIT 2009

ti mn Bo mt thng tin

=> SSL port default 443


=> Finish
=>Trong tab chn Edit
=> Check Require Secure Channel (SSL) cho server lun chy bng c ch SSL

=> Trong tab Home Dictionary chn A redirect to URL v in https://www.ptit.com

=> OK

Secure Socket Layer

60

PTIT 2009

ti mn Bo mt thng tin

=> Tr DNS n DNS ca mnh


=>Test

Secure Socket Layer

61

PTIT 2009

ti mn Bo mt thng tin

Tham Kho :

Cryptography and Network Security Principles and Practices, Fourth Edition By William Stallings
JDK 5.0 Documentation
Information Security Principles and Practice By Mark Stamp
Internet Security Cryptographic Principles, Algorithms and Protocols By Man Young Rhee
Beginning Cryptography with Java By David hook

Java Network Programming, 3rd Edition- By Elliotte Rusty Harold


MCP 70-299: Implementing and Administering Security in a Microsoft Windows Server 2003 Network.
http://www.blackhat.com/ (BlackHat-DC-09-Marlinspike-Defeating-SSL.pdf)
http://www.thoughtcrime.org/
http://www.oxid.it/
http://en.wikipedia.org/
http://msopenlab.com/

Secure Socket Layer

62

Anda mungkin juga menyukai