tong hop lap trinh java chi tiet, ro, de hieu cho nhung nguoi dang muon hoc lap trinh java, do minh tim tren internet
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. . 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. 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