Tải bản đầy đủ (.pdf) (9 trang)

Nền tảng ngôn ngữ java 10

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (205.81 KB, 9 trang )

85
THC THI BO MT
Mc tiêu bài hc:

Cui chng này bn có th

Mô t v công c JAR

To và xem mt file JAR, và lit kê và trích rút ni dung ca file.

S dng ch ký đin t (Digital Signatures) đ nhn dng Applets

To b công c khóa bo mt (Security key)

Làm vic vi chng ch s (Digital Certificate)

Tìm hiu v gói Java.security

10.1 Gii thiu:
Trong phn này, chúng ta s tìm hiu chi tit v bo mt Java applet. Chúng ta cng tho lun
v mô hình bo mt JDK 1.2 đáp ng nhu cu ngi dùng và nhà phát trin.
Java là mt ngôn ng lp trình đu tiên gi các chng trình không tng tác nh các file vn
bn, file nh và các thông tin tnh thông qua World Wide Web. Các chng trình này, không
ging nh chng trình CGI, đc chy trên h thng ca ngi dùng, hn là chy trên máy
ch Web (Web server). Bo mt Java Applet là s quan tâm chính gia ngi dùng và nhà
phát trin applet. Thit tính bo mt trong applet có th dn ti sa đi hoc phi bày các d
liu nhy cm. Mô hình bo mt ca Java 2, hoc JDK 1.2 rt hu ích cho ngi dùng, cng
nh cho nhà phát trin. Nó giúp ngi dùng duy trì mc đ bo mt cao. Trong chng nay,
chúng ta s hc mô hình bo mt JDK 1.2.
10.2 Công c JAR:
Mt file JAR là mt file lu tr đc nén do công c lu tr Java to ra. File này tng t


nh chng trình PKZIP. Nó cha nhiu file trong mt file lu tr. iu này cho phép ti
trong trình duyt hiu qu. Dùng mt jar vi mt applet ci tin đáng k kh nng thc hin
ca trình duyt. Vì tc c các tt c các file đc biên dch trong mt file đn, trình duyt ch
cn thit lp kt ni HTTP vi web server. Nén file gim 50% thi gian ti file.
 khi đng công c JAR, dùng câu lnh sau ti du nhc lnh:

jar [options][manifest] jar-file input-file(s)

Tu chn Mô t
c To ra mt lu tr mi
t Ghi vào bng ni dung cho lu tr
x Trích dn file có tên t lu tr
v To ngun xut đa dòng (verbose output) trên mt li chun
f Xác đnh tên file lu tr
m Bao hàm thông tin chng thc t các file chng thc xác đnh
o Lu tr ch ‘use no zip’ nén
M Không to các file chng thc cho các mc (entries).

Bng 0.1. công c jar
Mt file chng thc cha thông v các file lu tr. File này là mt tu chn. Thm chí file
không xác đnh thì JAR cng t đng to ra. File jar đc dùng nh các lu tr. File này phi
có phn m rng là ‘.jar’ đc xác đnh ti dòng lnh. File đu vào (input-file) là danh sách
phân cách các file đc đt trong lu tr. Netscape Navigator và Internet Explorer h tr file
JAR.
Câu lnh sau lu tr tt c các file class và file java bao gm trong mt th mc xác đnh vào
mt file jar gi là ‘pack’


86


jar cf pack.jar *.class *.java






Hình 10.1 lnh jar

Dùng lnh sau ti du nhc lit kê các file trong file ‘pack.jar’

jar tf pack.jar




Hình 10.2 Lit kê các file trong file pack.jar

 gp file lu tr ‘pack.jar vào trong mt applet, m trang HTML, và thêm thuc tính
ARCHIVE=’pack.jar’ vào th applet, nh sau:

<applet code=”exr7.class” ARRCHIVE=”pack.jar” height=125
width=350></applet>

Thuc tính s ch cho trình duyt np lu tr ‘pack.jar’ đ tìm file ‘exr7.class’

Câu lnh sau trích rút các file đc nén trong file pack.jar:


jar xvf pack.jar


Mc chn ‘x’ cho phép bn trích rút ni dung ca file.

10.3 Ch ký đin t (Digital Signature) cho đnh danh các applet:

Trong java, bo mt applet trên web là phn rt quan trng. Hacker có th vit các applet
nguy him xuyên thng hàng rào bo mt. Vì th, applet hn ch s can thit ca các ngôn
ng. Applet không h tr mt s nét đt trng sau:

c và ghi file t h thng ni applet đang chy.

Ly thông tin v mt file t h thng

Xoá mt file t h thng.
Java 2 có th thc hin tt c các đc đim trên, vi các applet cung cp t mt nhà cung cp
applet tin cy, và đc ký danh s (digitally signed).
Hình sau minh ha quá trình mã hoá khoá

T

o m

t lu tr mi
Tên câu l

nh
Xác đ

nh lu tr
Tên file

Các file đ

c lu tr
Tu

ch

n nà
y
đ

c s d

n
g
cho bn
g
n

i dun
g
lu tr
Tu

chn xác đnh tên file lu t
r

87



Hình 10.3. Mã hoá da trên các khoá

Trong hình trên, khoá công cng (public keys) đc dùng mã hoá và gii mã. Cùng ý tng
đc s dng cho ch ký s, thêm các tính nng b sung.
Mt ch ký s là mt file mã hoá cung cp chng trình nhn dng chính xác ngun gc ca
file. Khóa bí mt tính giá tr t file applet. Ngi gi khoá bí mt kim tra ni dung ca đi
tng.
Trong đnh danh s, mt khóa riêng (private key) đc s dng đ mã hóa, và khoá công
cng, đc dùng gii mã. Trong khi ký danh (sign) mt đi tng, ngi ký danh dùng thut
toán tóm lc thông báo nh MD5 đ tính bng tóm lc ca đi tng. Bng tóm lc đc
dùng nh là du tay cho đi tng. bng tóm lc ln lt đc mã hoá dùng khóa riêng, đa
ra ch ký đin t ca đi tng. Khoá công cng ca b ký duyt dùng đ mã hoá ch ký và
kim tra chúng. Kt qu ca s gii mã, giá tr tóm lc đc đa ra. Giá tr tóm lc ca đi
tng đc tính và so sánh vi giá tr tóm lc đc gii mã. Nu giá tr tóm lc (digest)
ca đi tng và giá tr tóm lc đc mã hoá khp vi nhau, ch ký đc đc xác nhn.
Tài liu mô t ch ký đc gi là “Chng thc” (Certificate)
Thit lp s u thác (trust), nhn dng applet đc chng nhn. Chng nhn các thc th các
s dng khóa công cng đt bit. Quyn chng thc (a certificate authority) đc dùng thc
hin chng nhân. Nhn đc đc chng thc t mt CA (Certificate Authority), applet phi
đ trình tài liu chng thc s nhn dng ca nó.
Hin gi các công ty đa ra các dch v xác nhn chng thc sau:

VeriSign

Chng thc Thawte
Bn có th thit lp các mc bo mt khác nhau. Mt applet có th đa ra s u thác hoàn
toàn, hoc không u thác, vi s giúp đ ca tp các lp gi là “Quyn” (Permissions).
Nhng nhìn chung, mi applet đc gii hn mt cách đy đ, tr khi nhà phát trin ký danh
applet. iu này thit lp cho nhà phát trin đáng tin cy.


10.4 Khoá bo mt Java (Java Security key).

Chúng ta cn to 3 công c, tên là, ‘jar’, ‘jarsigner’, và ‘keytool’, trc khi dùng các applet
ký danh. Chúng ta cn to cp khóa công cng/riêng, và làm cho nó tr nên sn sàng vi
công c jarsigner.

Bây gi, chúng ta s to các công dng ca keystore.

Keystore (Lu tr khoá)
Keystore là mt c s d liu khoá, cha các chng thc s dùng đ nhn dng các giá tr
khoá công cng.


Keytool (Công c khoá)
88
Keytool là công c khoá bo mt ca java, to và qun lý khóa công cng, khoá riêng, và các
chng thc bo mt. Nó cng có th thc hin:
o
Qun lý cp khoá công cng/riêng
o
Lu tr các khoá công cng
o
Dùng các chng thc đ xác thc chng thc khác.
o
Xác thc (Authenticate) d liu ngun.
Tt c thông tin mà keytool qun lý đc lu tr trong c s d liu gi là keystore. Sun có
mt keystore mt đnh dùng mt đnh dng file mi gi là JKS (java key store Lu tr khoá
java).  kim nu h thng bn có mt keystore di đnh dng này, thc hin câu lnh sau
ti du nhc lnh:


Keytool –list

Thông báo li sau xut hin nu bn không có gì trong keystore ca bn.

Keytool error: keystore file does not exist: c:\windows\.keystore

JDK tìm keystore chính trong th mc C:\windows\. ây là mt v trí chung cho các file h
thng quan trng trên windows 95, 98 và NT systems.

Tu chn keystore cng có th đc s dng trong lnh keytool, nh sau:

keytool –list keystore c:\java\try

Câu lnh này ch cho JDK tìm keystore trong file đc gi là ‘try’ trong th mc
‘C:\java\try’. Nu không tìm thy, s hin th thông báo li nh trên.

Mc ‘-genkey’ có th đc s dng cùng vi câu lnh keytool đ to cp khoá công
cng/riêng. Bn cng có th dùng mt s các tu chn khác. Dng đn gin nht nh sau:

keytool –genkey –alias “I”

Bí danh (alias) có th đc dùng lu tr, thay th hoc xoá cp khoá. Các bí danh keytool
không phân bit ch hoa. Trong lnh trên, chúng ta không s dng tu chn keystore. Nu
cùng câu lnh s dng tu chn keystore, s đc vit li nh sau:

keytool –genkey –alias “I” –keystore “store”

Trong lnh trên, cp khoá s đc lu tr trong keystore ‘store’, và không lu trong keystore
mt đnh ca h thng.


Sau khi nhp lnh trên vào, và nhn phím enter, keytool nhc bn nhp vào mt khu
(password) cho keystore, nh sau:

Enter keystore password

Nhp vào ‘password’ nh yêu cu.
Tip theo, keytool nhc bn nhp 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 ca t chc)
[Unknown]: ABC Consultants (t vn ABC)
What is the name of your city or Locality? (tên thành ph hoc đa phng ca bn)
[Unknown]: California
What is the name of your State or Province? (tên bang hoc tnh ca bn)
[Unknown]:United States of America
What is the two-letter country code for this unit?(Mã quc gia vi 2 ký t)
[Unknown]: US

Khi bn đã nhp vào các thông tin, keytool hin 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]:

Cui cùng, keystool nhc bn nhp vào mt khu cho khoá riêng ca bn, nh:


Enter key password for <I>
(RETURN if same as keystore password)

Thông tin trên đc s dng đ kt hp s phân bit tên (name) X500 vi bí danh (alias).
Thông tin trên cng có th đc đa vào trc tip t mc chn ‘-dname’

Mt khu sau cùng phn bit vi mt khu keystore. Nó đc dùng truy cp khoá riêng ca
cp khoá công cng. Mt khu có th trc tip ch rõ bng cách s dng tu chn ‘-keypass’.
Nu mt khu không ch rõ, mt khu keystore đc s đc dùng. Tu chn ‘-keypasswd’
dùng thay đi mt khu. Tu chn ‘-keyalg’ ch rõ thut toán to cp khoá.

Khi bn to mt khoá và b sung nó vào trong keystore, bn có th dùng tu chn ‘-list’ ca
keytool đ xem khoá có trong keystore hay không.

 xoá cp khoá t c s liu, dùng lnh sau:

keytool –delete –alias aliasName

‘aliasName’ ch tên ca khoá đc xoá.

Bây gi, chúng ta to cp khoá riêng/công cng cho file JAR, chúng ta hãy ký danh nó. Lnh
jarsigner dùng đ ký danh mt file JAR. Nhp lnh sau vào du nhc DOS:

jarsigner –keystore keyStore –storepass storePassword –keypass keyPassword

Bng sau cung cp danh sách ca JARFileNames và bí danh:

Tu chn Mô t
keyStore Tên keystore s dng
storePassword Mt khu keystore

keyPassword Mt khu khoá riêng
JARFileName Tên ca file JAR đc ký danh
Alias Bí danh ca b ký danh

90
Bng 10.2 JARFileNames và bí danh

 ký danh file JAR ‘pack.jar’, vi keystore ‘store’, và mt khu đ lu tr và các khoá riêng
là ‘password’, dùng lnh sau:

jarsigner –keystore store –storepass password –keypass password pack.jar pk
‘pk’ ngha là tên bí danh.

Nu tu chn ‘-keystore’ không ch rõ, thì keystore mt đnh đc dùng.

 ch rõ ch ký ca file JAR đc đnh danh, dùng tu chn ‘-verify’.

jarsigner –verify pack.jar

‘pack.jar’ ch tên file JAR. Nu ch ký không hp l, thì ngoi l sau đc ném ra (thrown).

Jarsigner:java.util.zip.ZipException:invalid entry size (expected 900 but got 876 bytes)

Ngc li, xut hin thông báo “jar verified” (jar đc xác minh)

Quá trình xác thc kim tra theo các bc sau:


Có file ‘.DSA’ cha ch ký hp l cho file ch ký .SF không.


Có các mc trong file ch ký là các tóm lc hp l cho mi mc tng ng file kê
khai (manifest file)

10.5 Ch ký đin t (digital Certificates)

Cho đn bây gi, chúng ta đã hc cách to và ký danh mt file JAR. Bây gi, chúng ta s hc
cách xut các ch ký đin t(digital certificates), s s dng đ xác thc ch ký ca các file
JAR. Chúng ta cng s hc các nhp ch ký đin t t các file các.

Ch ký đin t là mt file, mt đi tng, hoc mt thông báo đc ký danh bi quyn
chng thc (certificate authority). The CA (Certificate authority) cp chng nhn giá tr các
khoá công cng. Chng nhn X.509 ca t chc International Standards Organization là mt
dng chng nhn s ph bin. Keytool h tr nhng chng nhn này.

Keytool  bc đu tiên cn nhn đc mt chng nhn (certificate). Chúng ta dùng chng
nhn đó to cp khoá ‘công cng/riêng’ (private/public). Keytool nhp vào các chng nhn
đã đc to và đc ký danh. Keytool t đng gn (bundle) khoá công cng mi vi mt
chng nhn mi. Cùng thc th đã to khoá công cng ký danh chng nhn này. ó đc gi

‘self-signed certificates’
(Chng nhn t ký danh).Các chng nhn này không phi là
chng nhn đáng tin cy cho đnh danh. Tuy nhiên, chúng cn đ to các yêu cu ký danh
chng nhn (certificate-signing request).

Keytool và tu chn đc s dng đ to các chng nhn trên. Câu lnh sau giúp to các
chng nhn trên:

keytool –keystore store –alias mykey –certreq –file mykey.txt

Cp khoá đc to là ‘mykey’. Tu chn ‘-file’ ch tên file, mà yêu cu ký danh chng nhn

dùng đ lu.
91

Dùng lnh ‘-export’ xut các chng nhn này nh sau:
keytool –export –keystore store –alias pk –file mykey

Câu lnh trên hin th du nhc sau:

Enter keystore password

Chng nhn đã lu tr trong <mykey>

 nhp các chng nhn khác vào keystore ca bn, nhp câu lnh sau:

keytool import –keytool keystore –alias alias –file filename

Tên đc ch nh là tên file cha chng nhn đc nhp vào (imported certificate).

Câu lnh sau ch tên bí danh là ‘alice’ đ nhp chng nhn trong file ‘mykey’ vào keystore
‘MyStore’:

keytool –import –keystore MyStore –alias alice –file mykey

Câu lnh trên hin th du nhc sau:

Enter keystore password (Nhp vào mt khu keystore)

Kt qu xut ra hin th hai tu chn –Owner và Issuer. Nó hin th tên công ty, ngh nghip,
t chc, đa đim, bang và tin t. Nó cng hin th s serial và thi gian có giá tr. Cui
cùng, nó hi có là chng nhn u thác không. Chng nhn đc chp thun cho s u thác

ca riêng bn.

Dùng lnh ‘-list’ lit kê ni dung ca keystore nh sau:

keystool –list –keystore Store

Câu lnh trên yêu yu password keystore

Dùng tu chn ‘-alias’ lit kê mt mc. Dùng lnh -delete đ xoá bí danh trong keystore, nh
sau:

keytool –delete –keystore Store –alias alias

Dùng lnh ‘-printcert’ in chng nhn đc lu tr trong file, theo cách sau:

keytool –printcert –file myfile

Dùng lnh ‘-help’ nhn v danh sách tt c các lnh keytool h tr:

keytool -help

10.6 Các gói bo mt java (JAVA Security packages)

Các gói bo mt Java bao gm:
92

java.security
ây là gói API nhân bo mt (the core security API package). Cha các lp và giao din
(interface) h tr mã hoá (encryption), tính bng tóm lc tài liu và ch ký đin t.


java.security.acl
Cha các giao din dùng cài đt các chính sách điu kin truy cp

java.security.cert
Cung cp s h tr cho chng nhn X.509

java.security.interfaces
nh ngha các giao din truy cp thut toán ch ký đin t (the digital signature algorithm)

java.security.spec
Cung cp các lp đc lp và phc thuc vào thut toán cho các khoá.

Tóm tt:

Nu kh nng bo mt trong applet không đm bo, các d liu nhy cm có th đc
sa đi hoc phi bày.

Mc đích chính ca JAR là kt ni các file mà applet s dng trong mt file nén đn.
iu này cho phép các applet np vào trình duyt mt cách hiu qu.

Mt file kê khai (manifest file) cha thông tin v các file lu tr.

Ch ký đin t là mt mã hoá kèm vi chng trình đ nhn din chính xác ni
ngun gc ca file.

Keystore là mt c s d liu ca các khoá.

Keytool là công c khoá bo mt ca java.

chng nhn đin t là mt file, hoc mt đi tng, hoc mt thông báo đc ký danh

bi quyn chng nhn (certificate authority)

Kim tra kin thc:

1. File ________là file lu tr đc nén.
2. Tu chn _____, khi dùng vi công c jar, trích rút tên file t mt lu tr (file)
3. JAR t đng to file kê khai, thm chí nó không đc ch ra
true/false

4. Thuc tính______,khi dùng trong th applet, ch cho trình duyt np file jar lu tr c
th, và tìm file class đc nhp vào.
5. Trong ch ký đin t, _______đc dùng cho mã hoá và _________đc dùng cho
gii mã.
6. Tt c các thông tin keytool qun lý, đc lu tr trong mt c s d liu gi là
_______
7. keytool  bc đu tiên cn nhn đc mt chng nhn
true/false

8. Gói _______cha giao din (interfaces) dùng cài đt các chính sách điu kin truy
cp.

Bài tp:

To
các câu lnh java
thc hin các hành đng sau:

1. To mt file jar ‘core-java.jar’ cha các file lp (class file) và các file ngun.
2. Lit kê ni dung ca file jar.
3. To file html cho file CardLayoutDemo.class,file lp đc cha trong file jar.

4. trích rút (extract) file jar
5. Dùng lnh keytool vi tên bí danh và keystore đ to ra cp khoá công cng/riêng mi
6. Ký danh file jar mi đc to
7. Xác minh ch ký (signature).
8. Xut các chng nhn (certificate)
93
9. Lit kê ni dung ca keystore
10. In các chng nhn đc lu trong file.


×