85
THC THI BO MT
Mc tiêu bài hc:
Cui chng này bn có th
Mô t v công c JAR
To và xem mt file JAR, và lit kê và trích rút ni dung ca file.
S dng ch ký đin t (Digital Signatures) đ nhn dng Applets
To b công c khóa bo mt (Security key)
Làm vic vi chng ch s (Digital Certificate)
Tìm hiu v gói Java.security
10.1 Gii thiu:
Trong phn này, chúng ta s tìm hiu chi tit v bo mt Java applet. Chúng ta cng tho lun
v mô hình bo mt JDK 1.2 đáp ng nhu cu ngi dùng và nhà phát trin.
Java là mt ngôn ng lp trình đu tiên gi các chng trình không tng tác nh các file vn
bn, file nh và các thông tin tnh thông qua World Wide Web. Các chng trình này, không
ging nh chng trình CGI, đc chy trên h thng ca ngi dùng, hn là chy trên máy
ch Web (Web server). Bo mt Java Applet là s quan tâm chính gia ngi dùng và nhà
phát trin applet. Thit tính bo mt trong applet có th dn ti sa đi hoc phi bày các d
liu nhy cm. Mô hình bo mt ca Java 2, hoc JDK 1.2 rt hu ích cho ngi dùng, cng
nh cho nhà phát trin. Nó giúp ngi dùng duy trì mc đ bo mt cao. Trong chng nay,
chúng ta s hc mô hình bo mt JDK 1.2.
10.2 Công c JAR:
Mt file JAR là mt file lu tr đc nén do công c lu tr Java to ra. File này tng t
nh chng trình PKZIP. Nó cha nhiu file trong mt file lu tr. iu này cho phép ti
trong trình duyt hiu qu. Dùng mt jar vi mt applet ci tin đáng k kh nng thc hin
ca trình duyt. Vì tc c các tt c các file đc biên dch trong mt file đn, trình duyt ch
cn thit lp kt ni HTTP vi web server. Nén file gim 50% thi gian ti file.
khi đng công c JAR, dùng câu lnh sau ti du nhc lnh:
jar [options][manifest] jar-file input-file(s)
Tu chn Mô t
c To ra mt lu tr mi
t Ghi vào bng ni dung cho lu tr
x Trích dn file có tên t lu tr
v To ngun xut đa dòng (verbose output) trên mt li chun
f Xác đnh tên file lu tr
m Bao hàm thông tin chng thc t các file chng thc xác đnh
o Lu tr ch ‘use no zip’ nén
M Không to các file chng thc cho các mc (entries).
Bng 0.1. công c jar
Mt file chng thc cha thông v các file lu tr. File này là mt tu chn. Thm chí file
không xác đnh thì JAR cng t đng to ra. File jar đc dùng nh các lu tr. File này phi
có phn m rng là ‘.jar’ đc xác đnh ti dòng lnh. File đu vào (input-file) là danh sách
phân cách các file đc đt trong lu tr. Netscape Navigator và Internet Explorer h tr file
JAR.
Câu lnh sau lu tr tt c các file class và file java bao gm trong mt th mc xác đnh vào
mt file jar gi là ‘pack’
86
jar cf pack.jar *.class *.java
Hình 10.1 lnh jar
Dùng lnh sau ti du nhc lit kê các file trong file ‘pack.jar’
jar tf pack.jar
Hình 10.2 Lit kê các file trong file pack.jar
gp file lu tr ‘pack.jar vào trong mt applet, m trang HTML, và thêm thuc tính
ARCHIVE=’pack.jar’ vào th applet, nh sau:
<applet code=”exr7.class” ARRCHIVE=”pack.jar” height=125
width=350></applet>
Thuc tính s ch cho trình duyt np lu tr ‘pack.jar’ đ tìm file ‘exr7.class’
Câu lnh sau trích rút các file đc nén trong file pack.jar:
jar xvf pack.jar
Mc chn ‘x’ cho phép bn trích rút ni dung ca file.
10.3 Ch ký đin t (Digital Signature) cho đnh danh các applet:
Trong java, bo mt applet trên web là phn rt quan trng. Hacker có th vit các applet
nguy him xuyên thng hàng rào bo mt. Vì th, applet hn ch s can thit ca các ngôn
ng. Applet không h tr mt s nét đt trng sau:
c và ghi file t h thng ni applet đang chy.
Ly thông tin v mt file t h thng
Xoá mt file t h thng.
Java 2 có th thc hin tt c các đc đim trên, vi các applet cung cp t mt nhà cung cp
applet tin cy, và đc ký danh s (digitally signed).
Hình sau minh ha quá trình mã hoá khoá
T
o m
t lu tr mi
Tên câu l
nh
Xác đ
nh lu tr
Tên file
Các file đ
c lu tr
Tu
ch
n nà
y
đ
c s d
n
g
cho bn
g
n
i dun
g
lu tr
Tu
chn xác đnh tên file lu t
r
87
Hình 10.3. Mã hoá da trên các khoá
Trong hình trên, khoá công cng (public keys) đc dùng mã hoá và gii mã. Cùng ý tng
đc s dng cho ch ký s, thêm các tính nng b sung.
Mt ch ký s là mt file mã hoá cung cp chng trình nhn dng chính xác ngun gc ca
file. Khóa bí mt tính giá tr t file applet. Ngi gi khoá bí mt kim tra ni dung ca đi
tng.
Trong đnh danh s, mt khóa riêng (private key) đc s dng đ mã hóa, và khoá công
cng, đc dùng gii mã. Trong khi ký danh (sign) mt đi tng, ngi ký danh dùng thut
toán tóm lc thông báo nh MD5 đ tính bng tóm lc ca đi tng. Bng tóm lc đc
dùng nh là du tay cho đi tng. bng tóm lc ln lt đc mã hoá dùng khóa riêng, đa
ra ch ký đin t ca đi tng. Khoá công cng ca b ký duyt dùng đ mã hoá ch ký và
kim tra chúng. Kt qu ca s gii mã, giá tr tóm lc đc đa ra. Giá tr tóm lc ca đi
tng đc tính và so sánh vi giá tr tóm lc đc gii mã. Nu giá tr tóm lc (digest)
ca đi tng và giá tr tóm lc đc mã hoá khp vi nhau, ch ký đc đc xác nhn.
Tài liu mô t ch ký đc gi là “Chng thc” (Certificate)
Thit lp s u thác (trust), nhn dng applet đc chng nhn. Chng nhn các thc th các
s dng khóa công cng đt bit. Quyn chng thc (a certificate authority) đc dùng thc
hin chng nhân. Nhn đc đc chng thc t mt CA (Certificate Authority), applet phi
đ trình tài liu chng thc s nhn dng ca nó.
Hin gi các công ty đa ra các dch v xác nhn chng thc sau:
VeriSign
Chng thc Thawte
Bn có th thit lp các mc bo mt khác nhau. Mt applet có th đa ra s u thác hoàn
toàn, hoc không u thác, vi s giúp đ ca tp các lp gi là “Quyn” (Permissions).
Nhng nhìn chung, mi applet đc gii hn mt cách đy đ, tr khi nhà phát trin ký danh
applet. iu này thit lp cho nhà phát trin đáng tin cy.
10.4 Khoá bo mt Java (Java Security key).
Chúng ta cn to 3 công c, tên là, ‘jar’, ‘jarsigner’, và ‘keytool’, trc khi dùng các applet
ký danh. Chúng ta cn to cp khóa công cng/riêng, và làm cho nó tr nên sn sàng vi
công c jarsigner.
Bây gi, chúng ta s to các công dng ca keystore.
Keystore (Lu tr khoá)
Keystore là mt c s d liu khoá, cha các chng thc s dùng đ nhn dng các giá tr
khoá công cng.
Keytool (Công c khoá)
88
Keytool là công c khoá bo mt ca java, to và qun lý khóa công cng, khoá riêng, và các
chng thc bo mt. Nó cng có th thc hin:
o
Qun lý cp khoá công cng/riêng
o
Lu tr các khoá công cng
o
Dùng các chng thc đ xác thc chng thc khác.
o
Xác thc (Authenticate) d liu ngun.
Tt c thông tin mà keytool qun lý đc lu tr trong c s d liu gi là keystore. Sun có
mt keystore mt đnh dùng mt đnh dng file mi gi là JKS (java key store Lu tr khoá
java). kim nu h thng bn có mt keystore di đnh dng này, thc hin câu lnh sau
ti du nhc lnh:
Keytool –list
Thông báo li sau xut hin nu bn không có gì trong keystore ca bn.
Keytool error: keystore file does not exist: c:\windows\.keystore
JDK tìm keystore chính trong th mc C:\windows\. ây là mt v trí chung cho các file h
thng quan trng trên windows 95, 98 và NT systems.
Tu chn keystore cng có th đc s dng trong lnh keytool, nh sau:
keytool –list keystore c:\java\try
Câu lnh này ch cho JDK tìm keystore trong file đc gi là ‘try’ trong th mc
‘C:\java\try’. Nu không tìm thy, s hin th thông báo li nh trên.
Mc ‘-genkey’ có th đc s dng cùng vi câu lnh keytool đ to cp khoá công
cng/riêng. Bn cng có th dùng mt s các tu chn khác. Dng đn gin nht nh sau:
keytool –genkey –alias “I”
Bí danh (alias) có th đc dùng lu tr, thay th hoc xoá cp khoá. Các bí danh keytool
không phân bit ch hoa. Trong lnh trên, chúng ta không s dng tu chn keystore. Nu
cùng câu lnh s dng tu chn keystore, s đc vit li nh sau:
keytool –genkey –alias “I” –keystore “store”
Trong lnh trên, cp khoá s đc lu tr trong keystore ‘store’, và không lu trong keystore
mt đnh ca h thng.
Sau khi nhp lnh trên vào, và nhn phím enter, keytool nhc bn nhp vào mt khu
(password) cho keystore, nh sau:
Enter keystore password
Nhp vào ‘password’ nh yêu cu.
Tip theo, keytool nhc bn nhp vào các thông tin b sung nh:
What is your first and last name? (Tên và h)
[unknown]
what is the name of your organization unit?
89
[unknown]: software Development.
What is the name of your organization? (Tên ca t chc)
[Unknown]: ABC Consultants (t vn ABC)
What is the name of your city or Locality? (tên thành ph hoc đa phng ca bn)
[Unknown]: California
What is the name of your State or Province? (tên bang hoc tnh ca bn)
[Unknown]:United States of America
What is the two-letter country code for this unit?(Mã quc gia vi 2 ký t)
[Unknown]: US
Khi bn đã nhp vào các thông tin, keytool hin th thông tin sau:
Is <CN=Bob Fernandes, OU=Software Development, O=ABC Consultants, L=California,
ST=United States of America, C=US>correct?
[no]:
Cui cùng, keystool nhc bn nhp vào mt khu cho khoá riêng ca bn, nh:
Enter key password for <I>
(RETURN if same as keystore password)
Thông tin trên đc s dng đ kt hp s phân bit tên (name) X500 vi bí danh (alias).
Thông tin trên cng có th đc đa vào trc tip t mc chn ‘-dname’
Mt khu sau cùng phn bit vi mt khu keystore. Nó đc dùng truy cp khoá riêng ca
cp khoá công cng. Mt khu có th trc tip ch rõ bng cách s dng tu chn ‘-keypass’.
Nu mt khu không ch rõ, mt khu keystore đc s đc dùng. Tu chn ‘-keypasswd’
dùng thay đi mt khu. Tu chn ‘-keyalg’ ch rõ thut toán to cp khoá.
Khi bn to mt khoá và b sung nó vào trong keystore, bn có th dùng tu chn ‘-list’ ca
keytool đ xem khoá có trong keystore hay không.
xoá cp khoá t c s liu, dùng lnh sau:
keytool –delete –alias aliasName
‘aliasName’ ch tên ca khoá đc xoá.
Bây gi, chúng ta to cp khoá riêng/công cng cho file JAR, chúng ta hãy ký danh nó. Lnh
jarsigner dùng đ ký danh mt file JAR. Nhp lnh sau vào du nhc DOS:
jarsigner –keystore keyStore –storepass storePassword –keypass keyPassword
Bng sau cung cp danh sách ca JARFileNames và bí danh:
Tu chn Mô t
keyStore Tên keystore s dng
storePassword Mt khu keystore
keyPassword Mt khu khoá riêng
JARFileName Tên ca file JAR đc ký danh
Alias Bí danh ca b ký danh
90
Bng 10.2 JARFileNames và bí danh
ký danh file JAR ‘pack.jar’, vi keystore ‘store’, và mt khu đ lu tr và các khoá riêng
là ‘password’, dùng lnh sau:
jarsigner –keystore store –storepass password –keypass password pack.jar pk
‘pk’ ngha là tên bí danh.
Nu tu chn ‘-keystore’ không ch rõ, thì keystore mt đnh đc dùng.
ch rõ ch ký ca file JAR đc đnh danh, dùng tu chn ‘-verify’.
jarsigner –verify pack.jar
‘pack.jar’ ch tên file JAR. Nu ch ký không hp l, thì ngoi l sau đc ném ra (thrown).
Jarsigner:java.util.zip.ZipException:invalid entry size (expected 900 but got 876 bytes)
Ngc li, xut hin thông báo “jar verified” (jar đc xác minh)
Quá trình xác thc kim tra theo các bc sau:
Có file ‘.DSA’ cha ch ký hp l cho file ch ký .SF không.
Có các mc trong file ch ký là các tóm lc hp l cho mi mc tng ng file kê
khai (manifest file)
10.5 Ch ký đin t (digital Certificates)
Cho đn bây gi, chúng ta đã hc cách to và ký danh mt file JAR. Bây gi, chúng ta s hc
cách xut các ch ký đin t(digital certificates), s s dng đ xác thc ch ký ca các file
JAR. Chúng ta cng s hc các nhp ch ký đin t t các file các.
Ch ký đin t là mt file, mt đi tng, hoc mt thông báo đc ký danh bi quyn
chng thc (certificate authority). The CA (Certificate authority) cp chng nhn giá tr các
khoá công cng. Chng nhn X.509 ca t chc International Standards Organization là mt
dng chng nhn s ph bin. Keytool h tr nhng chng nhn này.
Keytool bc đu tiên cn nhn đc mt chng nhn (certificate). Chúng ta dùng chng
nhn đó to cp khoá ‘công cng/riêng’ (private/public). Keytool nhp vào các chng nhn
đã đc to và đc ký danh. Keytool t đng gn (bundle) khoá công cng mi vi mt
chng nhn mi. Cùng thc th đã to khoá công cng ký danh chng nhn này. ó đc gi
là
‘self-signed certificates’
(Chng nhn t ký danh).Các chng nhn này không phi là
chng nhn đáng tin cy cho đnh danh. Tuy nhiên, chúng cn đ to các yêu cu ký danh
chng nhn (certificate-signing request).
Keytool và tu chn đc s dng đ to các chng nhn trên. Câu lnh sau giúp to các
chng nhn trên:
keytool –keystore store –alias mykey –certreq –file mykey.txt
Cp khoá đc to là ‘mykey’. Tu chn ‘-file’ ch tên file, mà yêu cu ký danh chng nhn
dùng đ lu.
91
Dùng lnh ‘-export’ xut các chng nhn này nh sau:
keytool –export –keystore store –alias pk –file mykey
Câu lnh trên hin th du nhc sau:
Enter keystore password
Chng nhn đã lu tr trong <mykey>
nhp các chng nhn khác vào keystore ca bn, nhp câu lnh sau:
keytool import –keytool keystore –alias alias –file filename
Tên đc ch nh là tên file cha chng nhn đc nhp vào (imported certificate).
Câu lnh sau ch tên bí danh là ‘alice’ đ nhp chng nhn trong file ‘mykey’ vào keystore
‘MyStore’:
keytool –import –keystore MyStore –alias alice –file mykey
Câu lnh trên hin th du nhc sau:
Enter keystore password (Nhp vào mt khu keystore)
Kt qu xut ra hin th hai tu chn –Owner và Issuer. Nó hin th tên công ty, ngh nghip,
t chc, đa đim, bang và tin t. Nó cng hin th s serial và thi gian có giá tr. Cui
cùng, nó hi có là chng nhn u thác không. Chng nhn đc chp thun cho s u thác
ca riêng bn.
Dùng lnh ‘-list’ lit kê ni dung ca keystore nh sau:
keystool –list –keystore Store
Câu lnh trên yêu yu password keystore
Dùng tu chn ‘-alias’ lit kê mt mc. Dùng lnh -delete đ xoá bí danh trong keystore, nh
sau:
keytool –delete –keystore Store –alias alias
Dùng lnh ‘-printcert’ in chng nhn đc lu tr trong file, theo cách sau:
keytool –printcert –file myfile
Dùng lnh ‘-help’ nhn v danh sách tt c các lnh keytool h tr:
keytool -help
10.6 Các gói bo mt java (JAVA Security packages)
Các gói bo mt Java bao gm:
92
java.security
ây là gói API nhân bo mt (the core security API package). Cha các lp và giao din
(interface) h tr mã hoá (encryption), tính bng tóm lc tài liu và ch ký đin t.
java.security.acl
Cha các giao din dùng cài đt các chính sách điu kin truy cp
java.security.cert
Cung cp s h tr cho chng nhn X.509
java.security.interfaces
nh ngha các giao din truy cp thut toán ch ký đin t (the digital signature algorithm)
java.security.spec
Cung cp các lp đc lp và phc thuc vào thut toán cho các khoá.
Tóm tt:
Nu kh nng bo mt trong applet không đm bo, các d liu nhy cm có th đc
sa đi hoc phi bày.
Mc đích chính ca JAR là kt ni các file mà applet s dng trong mt file nén đn.
iu này cho phép các applet np vào trình duyt mt cách hiu qu.
Mt file kê khai (manifest file) cha thông tin v các file lu tr.
Ch ký đin t là mt mã hoá kèm vi chng trình đ nhn din chính xác ni
ngun gc ca file.
Keystore là mt c s d liu ca các khoá.
Keytool là công c khoá bo mt ca java.
chng nhn đin t là mt file, hoc mt đi tng, hoc mt thông báo đc ký danh
bi quyn chng nhn (certificate authority)
Kim tra kin thc:
1. File ________là file lu tr đc nén.
2. Tu chn _____, khi dùng vi công c jar, trích rút tên file t mt lu tr (file)
3. JAR t đng to file kê khai, thm chí nó không đc ch ra
true/false
4. Thuc tính______,khi dùng trong th applet, ch cho trình duyt np file jar lu tr c
th, và tìm file class đc nhp vào.
5. Trong ch ký đin t, _______đc dùng cho mã hoá và _________đc dùng cho
gii mã.
6. Tt c các thông tin keytool qun lý, đc lu tr trong mt c s d liu gi là
_______
7. keytool bc đu tiên cn nhn đc mt chng nhn
true/false
8. Gói _______cha giao din (interfaces) dùng cài đt các chính sách điu kin truy
cp.
Bài tp:
To
các câu lnh java
thc hin các hành đng sau:
1. To mt file jar ‘core-java.jar’ cha các file lp (class file) và các file ngun.
2. Lit kê ni dung ca file jar.
3. To file html cho file CardLayoutDemo.class,file lp đc cha trong file jar.
4. trích rút (extract) file jar
5. Dùng lnh keytool vi tên bí danh và keystore đ to ra cp khoá công cng/riêng mi
6. Ký danh file jar mi đc to
7. Xác minh ch ký (signature).
8. Xut các chng nhn (certificate)
93
9. Lit kê ni dung ca keystore
10. In các chng nhn đc lu trong file.
. C:windows. ây là mt v trí chung cho các file h
thng quan trng trên windows 95 , 98 và NT systems.
Tu chn keystore cng có th đc s dng trong lnh. to
7. Xác minh ch ký (signature).
8. Xut các chng nhn (certificate)
93
9. Lit kê ni dung ca keystore
10. In các chng nhn đc lu trong file.