intTypePromotion=1

Giáo trình Lý thuyết và bài tập Java: Phần 2

Chia sẻ: Va Va | Ngày: | Loại File: PDF | Số trang:566

0
171
lượt xem
84
download

Giáo trình Lý thuyết và bài tập Java: Phần 2

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Nối tiếp nội dung phần 1, phần 2 giới thiệu tới người đọc các nội dung: Bảo mật trong Java, triển khai ứng dụng theo phương pháp gốc, xử lý luồng và tệp tin, JavaBeans - Một thành phần quan trọng của Hệ thống Java, lập trình với JFC,... Mời các bạn cùng tham khảo.

Chủ đề:
Lưu

Nội dung Text: Giáo trình Lý thuyết và bài tập Java: Phần 2

  1. C h ư ơ n g 09 BẢO MẤT TRONG JAVA 9-1 Chươns 09 BẢO MẬT TRONG JAVA Tóm tắ t chươns 09 Vấn đề bảo m ậ t là m ộ t trong đ ặ c t rưng c ủ a Java. Đ ã c ó rất n h i ề u t h a y đ ổ i t r o n g việc cài đ ặ t c h ế đ ộ b ả o m ậ t t r o n g hệ thống Java từ b ả n đầu tiên đ ế n bản J D K l ẳ2 ngày nay. Trong p h ầ n này ta sẽ n g h i ê n c ứ u c h ế đ ộ b ả o m ậ t , c á c h cài đặt hệ t h ố n g b ả o mật, cách m ã h ó a trong J a v a J D K 1.2. \ ếCờ CẤU BẢO MẮT CỦA JAVA “J a v a là bảo m ậ t”, tín h c h ấ t n ày là m ột đặc điểm của Ja v a ngay từ trong th iế t k ế ngôn ngữ. Khi ta tạo các applet ta đã th ấ y rõ cái tín h chất đặc b iệ t này. Các applet của ta chỉ có những chức n ăn g giới h ạ n trong cơ cấu bảo m ậ t của Java. Chúng ả n h hưởng đến th iế t k ế của ta về k h ả n ă n g làm việc an to à n của các câu lệnh làm việc với mạng. Để bảo đ ảm m ột môi trường không th ỏ a hiệp, cách thức bảo m ậ t của J a v a đã quá th ậ n trọng. T ấ t cả các applet chạy tr ê n m ạn g luôn chịu những chú ý không th â n th iệ n và những theo dõi cẩn th ậ n . Điều này h ạ n ch ế r ấ t nhiều công việc th iế t k ế chương trìn h của chúng ta. Để các applet mở rộng được các giới h ạ n ấy, các h à m API cho sự bảo m ậ t của Jav a đã được p h á t triển. Ta cần đ á n h giá kỹ mục đích và n h â n tô' căn b ản cửa cơ cấu bảo m ậ t Java. J a v a cung cấp nhiều cách giải quyết về v ấn đề bảo m ậ t tùy thuộc vào việc cài đ ặ t và sở hữu các ứng dụng J a v a cho giải pháp m ạng In te rn e tễ M ạng I n te r n e t tạo ra r ấ t nhiều phương tiện dùng chung cho phép các m áy tín h tr ê n toàn t h ế giới k ế t nối dễ dàng với nhau. Cạc máy tín h tin cậy được hay kh ôn g đều có th ể liên k ế t với nhau và cho phép truy cập đến h à n g triệu th ô n g tin cá n h â n với những mục đích không tường minh. Hơn nữa các nghi thức giao tiếp (giao thức) và các ứng dụng In te rn e t lại khô n g h o àn toàn đơn giản và dễ hiểu. Với những trìn h độ khác nhau, các đ ịnh d an h của chúng sẽ được che giấu bằng nhiều kỹ th u â t khác nhau. J a v a lại th ê m vào đó k h á nhiều vấn đề: s J a v a là m ột ngôn ngữ lập trìn h hoàn chỉnh cho phép tạo ra các ứng dụng có th ể sử dụng mọi tà i nguyên của m áy đích như có
  2. I C hựđng 09 BẢO MẤT TRONG JAVA_______________ ẹ-3 th ể lầ m việc với các tậ p tin , m ở đầu nố i với m ạ n g của h ệ th ô n g điều k h iể n từ xa, p h á t s in h vô số các t iế n t r ì n h b ê n ngoài... s Các lệ n h J a v a được n ạ p xuống từ m ạ n g có nguồn gốc là các m áy t ín h m à ta k h ô n g th ể k iể m tra . Các câu lệ n h đó có th ể chứa n h ữ n g th iế u só t ta i h ạ i h a y lạ i c h ín h là của n h ữ n g k ẻ x âm p h ạ m có chủ tâm . Có t h ể tá c giả của ch ún g có n h ữ n g ý đồ đ á n g ngờ m uốn tá c động đ ế n hệ th ô n g của t a ệ s Các câu lệ n h J a v a lại r ấ t uyển chuyển và dễ d à n g được n ạ p xuống h ệ th ố n g của t a th ô n g qua các t r ì n h d u y ệ t W eb hỗ trợ J a v a n h ư H o tJa v a, N etscape, I n te r n e t Explorer. Các t r ì n h duyệt ' đặc b iệ t n ày , coi chú ng n h ư là các ap plet, có t h ể chuyển chúng đ ế n m áy tín h của. t a và thự c h iệ n ch ún g m à k h ô n g c ần x é t đến việc t a có cho p h é p và có b iết h a y không. Với n h ữ n g lý do tr ê n , dễ h iểu là tạ i sao các lệ n h J a v a p h ả i được theo dõi với sư chú ý cao độ. K hông có sự k iể m s o á t m ôi trư ờ n g c h ặt chẽ, t a có th ể h ìn h dung các k ế t quả xảy r a n h ư sau: 'S M ột m ẫu lệ n h t h â m độc có t h ể p h á h ư các t ậ p tin và các tà i nguyên t r ê n m áy của ta. s H o ạ t đ ộ ng n h ư m ộ t ứng dụng thư ờng trú , các chương trìn h t h â m n h ậ p lặ n g lẽ tu ồ n sa n g m áy chủ của nó t ấ t cả các dữ liệu t r ê n m áy bị t h â m n h ậ p ắ s Dù t a chỉ xem m ộ t tr a n g Web, th ì các v irus h a y các con sâu vi tín h cũng sẽ được n ạ p xuống m áy của t a v à p h á h o ại từ m áy n à y đ ế n m á y k h á c tro n g hệ th ố n g của ta. v' H ệ th ố n g của t a có th ể bị d ù n g n h ư m ộ t b à n đ ạ p cho m ột chương t r ì n h p h á h o ại m ộ t h ệ th ố n g khác. K hi đó c h ín h chúng ta sẽ bị lê n án. * M ột lập t r ì n h v iên t r ì n h độ k é m cũng có t h ể tạ o r a các chương tr ì n h lỗi có k h ả n ă n g p h á hủy h ệ th ố n g m ộ t cách k h ô n g chủ tâm . l.lễCơ cấu bảo mật của Java B ản t h â n k iế n trú c J a v a được cấu tạo bởi n h iề u lớp: 'S N gôn ngữ Ja v a. s Các h à m A PI chuẩn. s Trình biên dịch Java.
  3. C h ư ơ n g 09_______BẢO MẮT TRONG JAVA___________________9-3 S Mã bytecode. s N ạ p và kiểm tr a th ư viện trong khi chạy. s Bộ quản lý th u gom rác. s T rìn h th ô n g dịch m ã bytecode. 1.1.1. S ự a n to à n tr o n g n g ô n ngữ: Tôn trọ n g tr iệ t để mô h ìn h hướng đối tượng. => K hông có các con trỏ. => Luôn kiểm tr a các mảng. => Hệ th ô n g gán kiểu rõ ràng. T ấ t cả các mẫu của các đổi tượng được gán kiểu đều phải tu ân theo những quy định hợp lệ. Một lớp kh ô ng th ể gán những kiểu b ấ t kỳ ví dụ như các p h â n tuyến (thread) không được áp kiểu System. => N gôn ngữ hỗ trợ lập trìn h p h ân tuyến an toàn. => Các lớp và phương thức h ằn g sẽ ngăn không cho các lớp con có định nghĩa chồng, làm thay đổi ý nghĩa và chức năng. 1.1Ế2. T rìn h b iê n d ịc h v à sự an to à n T rìn h biên dịch sẽ chuyển các câu lệnh Ja v a th à n h bytecode. T rình biên dịch sẽ bảo đ ảm rằ n g các câu lệnh phải th ỏ a tín h bảo mật, các th ôn g tin được biên dịch phải hợp lệ. 1.1.3. B ộ k iể m tra Bộ kiểm t r a sẽ thực h iện các bước sau trước khi nạp các mã bytecode vào môi trường thực th i của Java: => Kiểm t r a các lớp tu ân theo mẫu chung. => Kiểm tr a xem t ấ t cả các lớp có các lớp cha hay không (chỉ có lớp Object là không có m à thôi), và các lớp h ằ n g có bị định ng h ĩa chồng hay không. => Kiểm t r a chi tiế t các m ã bytecode của m ột lớp: các bytecode có hiệu lực hay không. Cơ chế này đôi khi được xem như là bộ kiểm t r a bytecode. => Cuối cùng là những kiểm tr a bổ sung như kiểm tr a xem có các biến lớp Cbiến tĩnh) và các dấu hiệu của phương thức,...
  4. ỉ . l ẵ4. Bộ n ạ p lớ p (C ỉa ssỉo a d er) Bộ nạp lớp sẽ nạp các applet đã được xác định hợp lệ của bước trê n từ m ạng xuống và chuyển nó cho trìn h quản lý bảo m ậ t (được mô tả ở bước kế). Nó sẽ sắp xếp các vùng tê n của các lớp m ột cách ch ặt chẽ. Một vùng tê n (namespace) là m ột vùng chứa cấu trúc dữ liệu của lớp. Bộ n ạp lớp bảo đảm rằ n g các đôi tượng sẽ kh ô ng th ể th â m nhập vào các vùng tê n của lớp khác m ột cách tùy ý. Chỉ các biến và các
  5. C h ư ơ n g 09______ BẢO MẮT TRONG JAVA___________________9-5 phương thức to à n cục là có th ể được truy cập đến. Các đối tượng sẽ không th ể th ấ y các biến còn lại trừ khi có cài đ ặ t một giao tiếp. 1.1.5ẽ X ây d ự n g m ộ t c h ín h s á c h b ả o m ậ t Ta cần xây dựng m ột chính sách bảo m ậ t ở cấp ứng dụng xác định các ứng dụng jav a được sử dụng tài nguyên nào trong hệ thống. « Các h à m ,API J a v a cung cấp lớp java.lang.SecurityM anager để xây dựng các định n g hĩa rõ rà n g về các tác động được phép hay không cho m ột ứng dụng Java. Các trìn h duyệt hỗ trợ J a v a sẽ dùng lớp SecurityM anager này để xây dựng chính sách bảo m ậ t n h ằ m p h ân biệt cái gì m à m ột applet hay một ứng dụng J a v a có th ể làm. Ta có tóm tắ t như h ìn h 09-01 l ề2. Sự phát triển của Sandbox 'l.2ếl. JDK 1.0 JD K 1.0 giới thiệu “sandbox” n h ư ệlà cách tiếp cận đến việc bảo m ật của các applet. Trong đó, theo mặc định, tất cả các ứng dụng Jav a đều được coi là đ án g tin và đều có th ể truy cập đến mọi tà i nguyên trê n hệ th ố n g m ột cách khô n g giới hạn. Còn tấ t cả các applet lại bị coi là không đáng tin và bị cấm truy cập tấ t cả các tài nguyên. Thêm vào đó là các applet chỉ được quyền nối k ế t m ạng giữa máy hiện h à n h với máy tạo ra nó. ’ JD K 1.0 còn cho phép tạo ra các lớp con khi cài đ ặ t hệ thông bảo m ật tùy chọn cho các ứng dụng Ja v a độc lập. Nếu lớp SecurityM anager bị định n g h ĩa chồng, k h ả n ă n g của ứng dụng đó có th ể bị giới hạn. Khả năng cài đ ặ t hệ SecurityM anager tùy chọn chỉ cung cấp cho các n h à
  6. C hư ơng 09 BẢO MẤT TRONG JAVA 9-6 phát triển phần mềm chứ không cho người dùng cuối. Người dùng cuôi có thể sử dụng các ứng dụng một cách không giới hạn nêu các ứng dụng không có sẵn một giới hạn tự thân. Ví dụ 09-01: ReadFile.java im p o rt j a v a ế a p p l e t . * ; im p o rt j a v a . a w t . *; im p o r t j a v a . a w t . e v e n t . *; im p o r t j a v a . i o . * ,ề / 1 T ạ o a p p l e t đ ọ c t ậ p tin t r ê n m á y c ụ c b ộ p u b lic c la s s R eadF ileA pplet ex ten d s A pplet { T e x t A r e a t e x t = new T e x t A r e a () ; B u t t o n g o B u t t o n = new B u t t o n ( " R e a d L o c a l F i l e " ) ; P a n e l p a n e l = new P a n e l () ; S tr in g fileN am e = p u b l i c v o i d i n i t () { // N h ậ n tên t ậ p tin t ừ t h a m s ố t r o n g t ậ p tin H T M L fileN am e = g e t P a r a m e t e r ( " file N a m e " ); s e t L a y o u t (new B o r d e r L a y o u t () ) ; //C à i đ ặ t đ ể n h ậ n s ự kiện từ n ứ t n h ấ n g o B u t t o n . a đ d A c t i o n L i s t e n e r (new B u t t o n H a n d l e r () ) ; pane1 .a d d (goB utton); a d d ("N o rth " , p a n e 1); a d d ("C e n te r " , t e x t ); } // C à i đặt s ự kiện cho n út n h ấ n c l a s s B u tto n H a n d le r im plem ents A c tỉo n L ỉs te n e r { p u b lic v o id a c t i o n P e r f orm ed(A ctionE vent e) { S t r i n g s = e . g e tA c t ỉ o n C o i r u u a n d () ; i f ( "Read L o c a l F i l e " . e q u a l s (s) ) { try { F ileIn p u tS tream instream new F ileln p u tstream (fileN am e); in t inB ytes = in S tr e a m .a v a ila b le (); b y t e i n B u f [ ] = new b y t e [ i n B y t e s ] ; i n t b y t e s R e a d = i n s t r e a m , r e a d ( i n B u f Ề0 , i n B y t e s ) m ' t e x t . s e t T e x t (new s t r i n g ( i n B u f ) ) ; } // B ẫ y lỗi, n h ậ n kết q u ả lỗi trả về. c a tc h (E x cep tio n ex) { t e x t . s e t T e x t ( e x . t o S t r i n g ( ) ) fẽ } } } } }
  7. C h ư ơ n g 09 BẢO MẤT TRONG JAVA 9-7 T a có tậ p tin HTML n hư sau An A p p l e t t h a t r e a d s l o c a l f i l e s < / T I T L E > An A p p l e t t h a t r e a d s l o c a l f i l e s . < / H l > Text d is p la y e d by brow sers th a t a re not Jav a-en ab led . < / BODY > Ta CÓ k ế t quả khi n h ấ n lên n ú t nhấn: Một thông báo là không th ể truy cập. 1 AnApplet thai reads locdl fitoi * Midoiofl Internet Explocei pioYÌdedbf MSN BH3 File Edit View FavẾ0íi(e: Tool: Help ũ rp „ m m «■ . •* . © 0 Ú â £ 0 10" Bad Forward Stop ReJreih Horne Seaich Ỹòtw Diite: H&tay M ai Puri A ò ie > ẻ, ệ\c ‘*J a *.FIeadF JeAf-pỉe1 hi?n * ỷ Gọ bá: An Applet that reads local files. R tojLocdlFile I ,mfr«; s e c m € KC^ptioriEeodFileApplefỈB utfcriH ândlei ac!iwfeiloirw*d| c a rr d acce;: fie CAboo’ ro z\ 0Done My Ccếfí:pjte.*
  8. C hư ớng 09 BẢO MẤT TRONG JAVA 9-8 1.2ẵ2ề JD K 1.1: JD K l ệl sandbox mở rộng các chức n ăng cho các applet được th iế t kê đáng tin cậy. Các applet đáng tin này được phép truy cập t ấ t cả cậc tài nguyên m à sandbox quản lý.Các h à m API của JD K l ẵl cho phép đánh dấu sô' hóa m ột applet nào đó và kiểm tr a lại dấu h iện n ày trước khi nạp và thực hiện. Trong h ìn h dưới ta th ấ y tập tin đã được truy cập và được liệt kêtrong khung. Đó là do ta đã khai báo lại trong trìn h duyệt là cho phép applet truy cập dữ liệu tr ê n m áy cục bộ vì đây là m ột applet tin cậy đươc. ạ c NJ«rãVPOjdFileAppM.Mw - Mícioiolt Internet Exploiei provided by MSN ' IWofkmg Offfcne] I j fi!» EiJi ẵ */i'*v* F j'.o u *« Tooli Help a m © ứ Si 0 é § Foể* 3rd c IOP Fieheih Hofii-S Scỏrch Fỏ/ửitfei Hi;fcry Ma,í PlBll Edit E ncodrtj 2j links » Applet that reads local files f Ế FĨe*d L o c i File |LMpM ết |,_ , .*1 Jwnjvwr • /ề O»')J. ì 'iÉ i i •;!' . ặV- ifii-C'jl»> f KAJiCtJof ¿«cordcokw P'jWlCTOlilltnt|({ V ic jd in u .f tOKWi lor each fj the h j i ằd; snd fo» Uie face/boidci •Vi'-trCotOf * reylof I g e p j t j n r r l e i r 'l ic d l '.» ! '!] ù m d íi lO íý í * re< jií-0 lc* Ịg « fP a iirr.iM e iỊ, t»o n Jễ? iC o f',i|. mrn/eCoioi «n?*jCídoi IgefPwdf. h o j i C d o f « r e ^ d f o lr y | 5 * < P a r y r ie » ffl h c n C o T 'il :econdCoicf« Vftc’ed■•.ccortdCor’Ii -d zi é] Done My Computet Ta có cấu trúc Sandbox của JD K l ẵl Môi trường không giới h ạ n Sandbox Các ứng dụng (tin cậy được) Applet (không tin cậy) Applet được đánh dấu (tin cậy) Tài nguyên m ạ n g và hệ
  9. C h ư ơ n g 09_______BẢO MẮT TRONG JAVA___________________9-9 Cách tiếp cận sandbox của JD K l ếl tạo ra một bước cải tiên đáng kể vì đã cho phép các n h à th iế t kê applet co th ê m k h ả n ă n g lập trìn h cho applet. N hựng lại vi p h ạm đến nguyên lý bảo m ậ t về tìn h ư u t i ê n t ố i t h i ể u . T h ậ t vậy, khi ta eho phép trìn h duyệt chấp n h ậ n một máy tín h chủ nào đó là đ án g tin thì cũng có nghĩa là tấ t cả các applet nạp về từ m áy tín h chủ đó đều có toàn quyền truy cặp đến. tài nguyên truy máy cục bộ. Và điều đó là không được phép. 1.2.3. JD K 1.2 JD K 1.2 đưa ra m ột cách tiếp cận sandbox mới có cài đặt tín h ưu tiên tôi th iể u ẵ Cấu trúc này được xây dựng trê n khả n ăn g định ra một chính sách bảo m ậ t xác định những gì m à m ột applet hay một ứng dụng được phép tùy theo m ã lệnh của chúng và theo các định danh mà ngưòi ta đã đ á n h dâu tr ê n applet. Ta có các ví dụ về k h ả n ăng của cách tiếp cận JD K 1.2 như sau (không cần lập trình): Cho phép t ấ t cả các applet của máy chủ www.trusted.com đọc được t ấ t cả các tậ p tin trong thư mục c:\tm p => Cho phép t ấ t cả các applet từ các máy chủ b ấ t kỳ n h ậ n được th ô ng tin qua các cổng TCP có ID lớn hơn 1023. => Cho phép t ấ t cá các applet có làm dấu của Mary và Tim xuề'vt p h á t từ wwvv.ttt .com đọc và sửa chữa trê n các tậ p tin trong thii ■ mục c :\J a v a
  10. Ch ư ơn g 09 BẢO MẤT TRONG JAVA__________________ 9-10 Cho phép t ấ t cả các ứng dụng nạp từ th ư mục c :\tru s te d được cài đ ặ t giá trị cho các thuộc tín h bảo mật. l ề3ếChính sách bảo mật: Để xác định chính sách bảo m ật, J a v a cung cấp cho ta nhiều cách thực hiện như sau: 1. Tạơ mới hay biên soạn lại tậ p tin j a v a . p o l i c y là tậ p tin chính sách mặc định áp dụng cho mọi người dùng JD K 1.2. Tập tin này có trong thư mục < j a v a .h o m e> \lib \se c u rity , trong đó là thư mục đã cài JD K 1.2 (thường là thư mục c :\jd k l.2 ) 2. Có th ể tạo một tập tin chính sách bảo m ậ t mới và gán tê n của tập tin đó làm giá trị của thuộc tín h hệ thông p o l i c y . j a v a . 3. Có th ể tạo riêng một tậ p tin chính sách cho người dùng đ ặ t tại thư mục < u s e r ẵh o m e > \ . j a v a . p o l i c y , trong đó < u s e r , h o m e > là thư mục hiện h à n h của người dùng, được chỉ định trong thuộc tín h hệ thông u s e r . h o m e . 4. Dùng đôi sô" dòng lệnh -Djava.security.policy để chỉ định các tập tin chính sách khác nhau khi thực h iện với nhưng ứng dụng khác nhau. Ví dụ: j a v a - D j a v a . s e c u r i t y . p o l i c y = = " t e s t ệp o l i c y " T e s t Sử dụng chỉ m ột tập tin chính sách t e s t ẽp o l i c y (đặc trưng bằng dấu bằn g kép ==) khi thực hiện tậ p tin lớp T e s t . Khi chỉ muốn th ê m các chính sách trong tậ p tin t e s t . p o l i c y vào tậ p tin chính sách hiện h àn h , ta dùng một dấu =. Để kiểm tr a việc sử dụng các chính sáchbảo m ật ta dùng đối số dòng lệnh - D jav a.secu rity .m an ag er. Khi trìn h thông dịch bytecode được thực thi, nó sẽ nạp chính sách của hệ thông và sau đó là các chính sách của người dùng. Nếu cả hai loại tậ p tin chính sách này đều không có, chính sách mặc định của sandbox sẽ được sử dụng. 1.3.1. T ập tin c h ín h s á c h b ả o m ậ t Như đã nói ở trên , các chính sách bảo m ậ t sẽ được liệt kê trong tập tin chính sách bảo m ậ t thông qua các mục về cho phép (grant entries) xác định sự chấp n h ậ n cho các lệnh (của applet và của ứng dụng) được thực hiện.
  11. C hương 09 BẲO MẮT TRONG JAVA Trong JD K i.ố, t ấ t cả các lệnh, dù là của applet nạp xuống từ m ạng hay của một ưng dụng trê n máy cục bộ, đều phải k ết hợp với một nguồn lệnh (code source). Nguồn lệnh này được định nghĩa bằng địa chỉ URL của^aơi cung cấp lệnh và một danh sách các người tạo lệnh (signer of codeX Các người tạo lệnh này sẽ được định danh bằng cách tên có kết hợp với các khóa công khai của người đó. Và những cái tên này được gọi là các alias. T ất cả các khóa và alias sẽ được lưu trong keystore (tủ khóa) của người dùng. Xem hình Một keystore là m ột kho chứa các alias, chứng nhận, khóa công khai và các thông tin khác về người dùng. Một keystore của người dùng sẽ được lưu trong tập tin .keystore đ ặt trong thư mục gốc của người dùng. Trong hệ điều h à n h Windows, thư mục gốc của người dùng được định bằng thuộc tín h user.home. Nếu các biến môi trường HOMEDRIVE và HOMEPATH được định nghĩa, user.home sẽ là kết hợp của hai biến này. Còn ngược lại userễhome sẽ có giá trị giông như java.home. 1.3.2. C ú p h á p 1.3.2.1ẳG rant entry: Cú pháp của các mục cho phép (grant entry) trong tập tin chính sách là: / g r a n t [ S i g n e d B y " s i g n e r _ n a m e " ] [ / C o d e B a s e "URL"] { perm ission e n tr ie s }; Trong đó:
  12. Chương 09______ BẢO MẤT TRONG JAVA _________ 9-12 SignedBy: chứa danh sách các alias của các lập. trìn h viên (signer of’code), các alias này cách nhau bời dấu phẩy, và không p h ân biệt chữ hoa hay thường. Ví dụ: SignedBy “Bill, Monica”. Nếu các lệnh chưa được đánh dâu hay các lập trìn h viên không muôn có trong chính sách, tùy chọn này có th ể không có. CodeBase: xáx định địa chỉ URL của m áy m à các lệnh được tải từ đó vềỂVí dụ: CodeBase http://www.micro.co. Chú ý rằn g cần phải chỉ rõ phương thức làm việc http, https hay ftp,...Nếu tùy chọn này không có, sự cho phép này sẽ áp dụng cho tấ t cả các nguồn lệnh. l ể3.2ề2ệ P e r m issio n entry: Cú pháp của các mục chấp n h ận (permission entry) trong tập tin chính sách là: p e r m i s s i o n p e r m i s a i o n _ c l a a s _ n a m e \ " t a r g e t _ n a m e ,ắ'\ c , "actlon_lỉst"] [ , S ỉ g n e d B y "8Ìgner_name"] ĩ Trong đó: permission_class_name: chỉ định loại chấp thu ận được phép. Đó ịà tên đầy đủ của các lớp chuẩn Java. Ví dụ như: java.io.FilePermission (cho phép thực hiện các lệnh về tập tin và thư mục), java.net.SocketPermission (cho phép lập trìn h trê n các TCP/IP socket.... Ta có các lớp chuẩn sau: ja v a .secu rity .P erm issio n j a v a .s e c u r i t y . B asicP erm ỉssỉon j a v a . a w t . AWTPermi s s i o n j a v a ểi o . S e r i a l i z a b l e P e r m i s s i o n ja v a .lan g .reflect.R eflectP erm issio n j a v a . l a n g . R u n t i m e P e r m i SSi o n j a v a . n e t .N etP erm ission jav a.secu rity .S ecu rity P erm issio n ja v a .u t i l .P ro p e rty P erm ỉssion j a v a ệi o . F i l e P e r m i s s i o n j a v a . n e t . S ocketP erm ỉssion target_name: chỉ định tài nguyên (resource) hay dịch vụ (service) truy cập dược cho phép. Ví dụ: targ et của j a v a . i o . F i l e P e r m i s s i o n là tê n của tập tin hay th ư mục được phép truy xuất, ta rg e t của j a v a . u t i l . P r o p e r t y P e r m i s s i o n sẽ là tên của thuộc tính được phép truy cập.
  13. C hương 09 BẢO MẢT TRONG JAVA_________________ 9-13 action_list: xác đ ị n h các t hao tác m à các l ện h được phép tác động lệnh target. Ví dụ: các thao tác của j a v a . i o . F i l e P e r m i s s i o n là r e a d , w r i t e , d e l e t e và e x e c u t e , các t hao tác của j a v a . n e t . S o c k e t P e r m ỉ s s i o n là a c c e p t, l i s t e n , connect, r e s o l v e , ễ.. Vi dụ 09-02:java.policy - một tập tin policy grant CodeBase "file:${javaệhomế)/lib/ext/ { permission java, security .Allpermission; }; grant { p e rm issio n ja v a . lan g .R u n tim eP erm issio n "stopT hread" ; p e r m i s s i o n j a v a . n e t ẽS o c k e t P e r m i 8 s i o n "lo c alh o st:1 0 2 4 -","liste n "; p e r m i 8 8 i o n j a v a . u t ỉ 1 . P r o p e r t y p e r m i Bs i o n "ja v a.v e rsio n ", "read"; p e r m i s s i o n j a v a . u t i l . P r o p e r t y P e r m i s s i o n "OS.n a m e " , "read"; perm ission ja v a .u t i l .P ropertyP erm ission " OS.v e r s i o n " , " r e a d " ; Ta cũng có t h ể sử dụng công cụ policytool.exe trong J D K 1.2. Từ dòng l ệ n h của cửa sổ DOS hay từ Explorer, t a đều có t h ể gọi công cụ nà y để thực h i ện việc biên s oạ n lại, tạo mới các t ậ p tin chính sách. Xem hì nh n Policy Tool H E El Fie ^ ■ằ,< • S'V.'*•>. .. . -
  14. Chương 09 ẸẢỌ MẬT TẸỌNỌ ỢAỴẠ, M i [I 5Policy íool HHG PBe EdK Policy File: C:\ldk1.2\lre\lib\securlty\java.pollcy Keystore: 1 ptilicvErrtiy -< ; .,, ■ [Add 4 MWtH ÉÜ MI CodeBase: http://www.mlcroC0/ {CodeBase “iile:${java.hc SlgnedBy am, Monica CodeBase O đ e B d T : . * " l l t t | Ếi /!VvVvếvV Add Perrnlsslon I Edit Perm ission I Rem ove Perm lsslpn I Permissions Edit Permission: FilePermission "3 java.lo.FilePermisslon Target Name: 3 « A L L FILES»» Actions: 3 read, write, delete, execute Signed By: Bill, Mlonlca OK I Cancel 'Ế & ự S tìte Ì ở M ií sandbox.', import java.applet.*; import ja va.awt ẵ*; import java .util.*; public class ExtenđedApplet extends Applet { String text , Ế int X = 3 0 ; int y = 120; public void init (> { try { // truy c ậ p t h u ộ c tính h ệ t h ố n g u s e r . n a m e text=System.getProperty("user.name"); }catch (Exception ex) { text=ex.toString(); > > public void paint (Graphics g) { g. setFont (new Font ("TimesRoman",Font .BOLD, 12) ); g.drawstring(text,x,y); >
  15. Chương 09 B Ả O M Ấ T TRONG JAVA_____________ 9-15 Applet này được biên dịch thành tập tin class, sau đó sử dụng trong tập tin HTML như sau: Extended Applet < /H E A D > An Applet that reads the user.name property. Text displayed by browsers that are not Java- enabled. Khi duyệt HTML này, trình duyệt sẽ thông báo lỗi không được phép. Ta cần thêm vào tập tin policy với dòng lệnh như sau: permission java.util.PropertyPermission "user.name" "read" Khi đó chương trình sẽ cho biết tên của người dùng đã đăng nhập (log in) của phiên làm việc hiện hành. 2. CÁC VẨN ĐỂ CỦA V1ẺC BẢO MÁT TRONG JAVA 2.1. C ấ u trúc m ã hóa đối x ứ n g Một tập tin trước khi truyền đi sẽ được khóa bằng mật khẩu hay bằng một khóa riêng (private key) và được mã hóa theo khóa riêng đó. Người nhận sẽ dùng chính khóa riêng đó để giải mã tập tin mã hóa nhận được
  16. Chương 09 BẢO M Ắ T TRONG JAVA_____________ 9-16 2.2. Cấu trúc mã hóa khóa côn g cộn g Trước khi truyền, tập tin sẽ được người gửi mã hóa bằng khóa công khai (public key) nhận được từ người sẽ nhận. Sau đó khi tập tin đã nhận được, người nhận sẽ giải mã tập tin bằng khóa riêng (private key) mà chỉ người nhận mới có. Khóa riêng và khóa công khai là một cặp khóa được tạo ra bằng một thuật toán đặc biệt. 2.3. Chữ ký số: Để xác định một văn bản là chính xác và đáng tin, người ta còn dũng chữ ký số (digital signature) như là một giá trị kiểm nghiệm. Chữ ký số được cài đặt dựa vào cặp khóa công khai/riêng theo các bước sau: 2.3Ẻl ệTao khóa: ■ Từ tập tin cần chuyển ta dùng thuật toán một chiều tạo ra bảng kê thông báo (message digest) => Bảng kê thông báo sẽ được mã hóa bằng khóa riêng trong cặp khóa công khai/riêng, tạo ra chữ ký số của tập tin cần chuyển. Người truyền Người nhận Mã hóa Giải mã Khóa công khai của người Khóa riêng của người nhận nhận (bí mật) 2.3.2. Xác nhận chữ ký => Chữ ký sau khi nhận sẽ được giải mã bằng khóa công khai trong cặp khóa công khai/riêng, tạo ra lại bảng kê thông báo. => Từ tập tin nhận được, ta lại dùng cùng thuật toán một chiều để tạo ra bảng kê thông báo mới dùng để so sánh với bảng kê thông báo vừa được giải mã. Nếu 2 bảng kê có giá trị trùng nhau thì tập tin nhận được là chính xác và đáng tin, còn không có nghĩa là có lỗi nào đó trên đường truyền, cần truyền lại. Cách thức tiếp cận như trên cho ta các điều lợi như sau:
  17. Chương 09 B Ắ O M Â T TRONG JAVA_____________ 9-17 'S Không giả mạo được: vì người ký chỉ dùng khóa riêng để ký, và khóa riêng này là bí mật. s Có thể xác minh: Với khóa công khai đã công bô', bất kỳ người nào cũng có thể xác nhận tập tin nhận được đã được chính người gửi ký. 'S Dùng một lần: không thể dùng một chữ ký cho 2 tập tin khác nhau. s Không thể chô'i: sau khi tập tin có chữ ký đã được gửi đi, người gửi không thể nào chối bỏ trách nhiệm về nội dung truyền đi. Trừ khi họ chứng minh được là khóa riêng (một con số) của họ bị đánh cắp. s Niêm phong: một tập được đã được ký là một tập tin đã niêm phong, nó không thể bị thay đổi mà không xóa bỏ chữ ký. Ta có lưu đồ về chữ ký điện tử như sau:
  18. Chương 09 BẲO MẬT TRONG JAVA 918 2.4. Dấu ch ứ n g n h ận (digital certifícate): Dấu chứng nhận là những thông báo được đóng dấu của một tổ chức có quyền xác nhận CA (certification authority). Chứng nhận X.509 của tổ chức ISO là một dạng dấu chứng nhận phổ biến. '♦í; -- ỵ■X* 7 ■* ■ : / ' ; *' \ */1sn ' ■ ;Í ủ/-- V Thông tin của Chứng nhận người dùng ;.> > ị của người Người dùng ■Ế ' lA?. 1*3*5:: ;'■ -* '*:v' ■$ dùng cấp bởi ¿Mil CA Khóa công khai của người dùng 3. MÔT VI DU 3Ễ1 P hần người gửi Ta cùng xét một ví dụ: Count.java 0 7 ava javac Ị W É tm m a m s m m i
  19. Chương 09_________ BẮO MẤT TRONG JAVA_______________ 9-19 Susan cần truyền đi applet tên là count cho một người nào đó. Susan cần thực hiện như sơ đồ trên: l ề Từ tập tin Count.java, Susan biên dịch thành Count.class bằng javac: javac Count.java 2. Với lệnh jar, Susan tạo ra tập tin count.jar: jar cvf Count, jar Count .class 3. Tạo khóa bằng công cụ keytool, giả sử Susan muốn tạo khóa và lưu chúng trong tập tin keystore tên là susanstore: keytool -genkey -alias signFiles -keỵpass kpil35 -keystore susanstore -storepass ab987c Trong đó s kpil35 là m ật khẩu của khóa riêng dùng để truy xuất khóa trong susanstore. s ab987c là m ật khẩu của tập susanstore s signFiles là alias cho cặp khóa này s từ khóa tùy chọn -genkey cho biết cần tạo khóa. 4ắ Ký lên tập tin JAR: jarsigner -keystore susanstore -signedjar sCount Ệjar Count, jar signFiles Trong đó: s sCount.jar là tập tin JAR đã được đóng dấu 5. Kết xuất và gửi khóa công khai có chứng nhận cho người nhận: keytool -export -keystore susanstore -alias signFiles - file SusanJones.cer Trong đó: s SusanJones.cer là tập tin chứa khóa công khai đã được chứng nhận cần truyền cho người nhận. 3.2. Phía người nhận 1. Kiểm tra giới hạn của applet: ta chạy thử bằng java và nhận được thông báo lỗi
  20. Chương 09 BẢO MẮT TRONG JAVA 9.20 2. Nhận khóa công khai có chứng nhận của Susan (tập tin SusanJones.cer), Nhập vào keystore để có thể dùng: keytool -import -alias susan -file SusanJones*cer - keystore raystore Trong đó: s Tùy chọn -import: nhập khóa của Susan vào keystore của Ray (người nhận) s Tùy chọn -alias: Cấp cho khóa đó một alias là susan S Tùy chọn -files: tên của tập tin chứa khóa. S -keystore: tên tập tifi keystore của người nhận. sCount. j a r from Susan security manager java «-d a ta file Exception: Count program doesn't have permission to re ad the d a ta file ---------- sCount. ja r from Susan T V * - - - - - - - - - security manager 3. Dùng policytool.exe để tạo mục tương ứng: 4. Thực hiện applet:
ADSENSE
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2