Mengamankan Aplikasi Java EE 6

2,416 views
2,277 views

Published on

Tutorial Keamanan Java EE 6 dengan Netbeans dan GlassFish

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,416
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
32
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Mengamankan Aplikasi Java EE 6

  1. 1. Mengamankan Aplikasi Java EE 6 Bowo Prasetyo Tutorial Keamanan Java EE 6 dengan Netbeans dan GlassFish 3 Nopember 2011 http://www.scribd.com/prazjp http://www.slideshare.net/bowoprasetyo
  2. 2. Prasyarat <ul><li>Tutorial ini menggunakan software berikut: </li><ul><li>Java EE 6 SDK ( http://java.sun.com/javaee/sdk/ )
  3. 3. Netbeans IDE v 7.0.1 ( http://netbeans.org/ )
  4. 4. GlassFish Application Server v 3.1.1 ( http://glassfish.java.net/ ) </li></ul></ul>
  5. 5. Keamanan Java EE 6 <ul><li>Keamanan deklaratif </li><ul><li>Menggunakan deployment descriptor (file XML) atau anotasi (di kode sumber)
  6. 6. Default menggunakan keamanan deklaratif </li></ul><li>Keamanan programatis </li><ul><li>Ditulis di logika aplikasi
  7. 7. Bila keamanan deklaratif tidak mencukupi </li></ul></ul>
  8. 8. Proses Keamanan – 1 <ul><li>Request awal </li><ul><li>Web client me- request URL aplikasi. </li></ul></ul>
  9. 9. Proses Keamanan – 2 <ul><li>Otentikasi awal </li><ul><li>Web server mengembalikan form untuk mengumpulkan data otentikasi ( username dan password ). </li></ul></ul><ul><ul><li>Web client mengirim data otentikasi ke web server untuk divalidasi.
  10. 10. Apabila data otentikasi valid, web server mengeset credential untuk pengguna. </li></ul></ul>
  11. 11. Proses Keamanan – 3 <ul><li>Otorisasi URL </li><ul><li>Web server berkonsultasi dengan security policy yang diasosiasikan terhadap web resource .
  12. 12. Web server mengecek credential pengguna terhadap setiap peran, apakah dia “ authorized ” atau “ not authorized ”. </li></ul></ul>
  13. 13. Proses Keamanan – 4 <ul><li>Memenuhi request pertama </li><ul><li>Bila pengguna “ authorized ”, web server mengembalikan hasil request URL yang pertama.
  14. 14. Di contoh ini berupa form yang selanjutnya perlu ditangani oleh enterpise bean . </li></ul></ul>
  15. 15. Proses Keamanan – 5 <ul><li>Memanggil metoda bisnis enterprise bean </li><ul><li>Web page memanggil metoda enterprise bean secara remote , menggunakan credential pengguna.
  16. 16. EJB container berkonsultasi dengan security policy yang diasosiasikan terhadap enterprise bean .
  17. 17. EJB container mengecek credential pengguna terhadap setiap peran, apakah dia “ authorized ” atau “ not authorized ”. </li></ul></ul>
  18. 18. Mengamankan Server GlassFish <ul><li>Menambah, menghapus, atau mengubah authorized users .
  19. 19. Mengonfigurasi listener HTTP dan IIOP yang secure .
  20. 20. Mengonfigurasi konektor JMX yang secure .
  21. 21. Menambah, menghapus, atau mengubah security realm .
  22. 22. Mengeset dan mengubah policy permission aplikasi. </li></ul>
  23. 23. Mengamankan Komponen Web dan Komponen Bisnis <ul><li>Mengamankan komponen web </li><ul><li>Security context di web server .
  24. 24. Mengamankan servlets, JSP, JSF, facelets. </li></ul><li>Mengamankan komponen bisnis </li><ul><li>Security context di EJB container .
  25. 25. Mengamankan EJB. </li></ul></ul>
  26. 26. Security Realm <ul><li>Domain security policy yang didefinisikan untuk web server atau application server , dan terdiri dari user, group, role dan pemetaan role -> user/group . </li></ul>
  27. 27. Security Realm <ul><li>Realm file </li><ul><li>Credential pengguna di file lokal keyfile .
  28. 28. Untuk koneksi non-HTTPS. </li></ul><li>Realm sertifikat </li><ul><li>Credential pengguna di database sertifikat.
  29. 29. Untuk koneksi HTTPS. </li></ul><li>Realm admin </li><ul><li>Credential administrator di admin-keyfile . </li></ul></ul>
  30. 30. Mekanisme Otentikasi <ul><li>Otentikasi dasar HTTP </li><ul><li>Username dan password di form default </li></ul><li>Otentikasi berbasis form </li><ul><li>Form data otentikasi dapat dikustomisasi </li></ul><li>Otentikasi digest </li><ul><li>Otentikasi dasar dengan password terenkripsi </li></ul><li>Otentikasi klien </li><ul><li>Server mengotentikasi klien dengan public key </li></ul><li>Otentikasi mutualisme </li><ul><li>Server dan klien saling mengotentikasi </li></ul></ul>
  31. 31. Aplikasi Java EE HelloEnterprise
  32. 32. HelloEnterprise <ul><li>Aplikasi Java enterprise dengan GlassFish untuk menampilkan “Hello World!”. </li></ul>
  33. 33. Class Diagram dan Sequence Diagram <ul><li>Aplikasi hanya terdiri dari 1 halaman JSP di server, yaitu index.jsp yang mem- build halaman HTML yang berisi 'Hello World!' untuk ditampilkan di client. </li></ul><ul><li>requestAccess : Pengguna mengakses index.jsp di server.
  34. 34. buildHtml : server mem- build halaman HTML dan ditampilkan di client. </li></ul>
  35. 35. Membuat HelloEnterprise <ul><li>Jalankan Netbeans.
  36. 36. Pilih menu File -> New Project ...
  37. 37. Pilih project Java EE -> Enterprise Application , klik Next.
  38. 38. Isi Project Name : HelloEnterprise, biarkan lainnya bernilai default, klik Next .
  39. 39. Pilih server: GlassFish Server 3.x , atau klik Add... bila belum ada.
  40. 40. Cek Enable Context and Dependency Injection , klik Finish . </li></ul>
  41. 41. Menambah Server GlassFish <ul><li>Bila belum ada pilihan GlassFish Server 3.x: </li><ul><li>Setelah klik Add... , pilih server GlassFish Server 3.x , klik Next .
  42. 42. Tentukan lokasi server, klik Browse... pilih direktori instalasi GlassFish, mis. C:serversglassfish3 , klik Next .
  43. 43. Daftarkan domain lokal: “hello”, klik Finish . </li></ul></ul>
  44. 44. Project Explorer: HelloEnterprise
  45. 45. Komponen Web “ index.jsp ” <ul><li>By default telah dibuatkan sebuah “ index.jsp ” di modul web HelloEnterprise-war </li></ul><%@page contentType=&quot;text/html&quot; pageEncoding=&quot;UTF-8&quot;%> <!DOCTYPE html>
  46. 46. Komponen Web “ index.jsp ” <html> <head> <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;> <title>JSP Page</title> </head> <body> <h1>Hello World!</h1> </body> </html>
  47. 47. Mendeploy HelloEnterprise <ul><li>Di Project Explorer klik kanan project HelloEnterprise -> Deploy .
  48. 48. Buka konsol administrasi GlassFish di http://localhost:4848/ .
  49. 49. Di menu kanan buka Applications -> klik HelloEnterprise.
  50. 50. Di tabel Modules and Components , klik Launch .
  51. 51. Untuk membuka aplikasi, klik link http://localhost:8080/HelloEnterprise-war/ . </li></ul>
  52. 52. Aplikasi HelloEnterprise
  53. 53. Aplikasi Java EE Mengamankan Komponen Web dengan Otentikasi Dasar HTTP
  54. 54. Otentikasi Dasar HTTP <ul><li>Di sini akan digunakan otentikasi dasar HTTP untuk mekanisme keamanan.
  55. 55. Pada otentikasi dasar HTTP, proses login ditangani oleh framework.
  56. 56. Dilakukan dengan konfigurasi deployment descriptor .
  57. 57. Tidak diperlukan pemrogaman apapun. </li></ul>
  58. 58. Otentikasi Dasar HTTP
  59. 59. Class Diagram <ul><li>Aplikasi terdiri atas 1 halaman JSP, yaitu index.jsp yang menampilkan “Hello user!” + security context dari web container . </li></ul>
  60. 60. Sequence Diagram <ul><li>requestAccess : pengguna mengakses index.jsp.
  61. 61. checkAuthentication : security context mengecek pengguna sudah login atau belum.
  62. 62. requestAuthenticationData : kalau belum login, security context menampilkan form login.
  63. 63. supplyAuthenticationData : pengguna men- submit data login ke security context .
  64. 64. setCredential : kalau data otentikasi valid, security context mengeset data credential pengguna di session. Kembali ke no 3 selama data otentikasi belum valid. </li></ul>
  65. 65. Sequence Diagram <ul><li>setCredential : kalau sudah login, security context mengeset data credential ke index.jsp .
  66. 66. checkAuthorization : security context mengecek pengguna punya otorisasi mengakses url atau tidak.
  67. 67. buildHtml : kalau pengguna punya otorisasi, security context me- redirect ke index.jsp untuk menampilkan HTML, atau
  68. 68. showError : kalau tidak punya otorisasi, menampilkan pesan kesalahan. </li></ul>
  69. 69. Mengamankan HelloEnterprise <ul><li>Membuat direktori target ( basic ) dan basic/index.jsp .
  70. 70. Menambah users ke server GlassFish: “ praz.basic” .
  71. 71. Menentukan mekanisme otentikasi: “ basic” .
  72. 72. Menambah security roles: “BasicRole”.
  73. 73. Menambah security constraints: “BasicConstraint”.
  74. 74. Memetakan Role -> Users / Groups: “BasicRole -> praz.basic”. </li></ul>
  75. 75. Membuat Direktori Target <ul><li>Jalankan Netbeans, buka modul web HelloEnterprise-war
  76. 76. Klik kanan Web Pages -> New -> Folder ...
  77. 77. Beri nama “ basic ” ← direktori yang akan diamankan.
  78. 78. Copy file “ index.jsp ” ke dalam direktori “ basic ”.
  79. 79. Modifikasi isinya untuk menampilkan username yang sedang login. </li></ul>
  80. 80. Menampilkan Username <ul><li>JSP mempunyai variabel pageContext yang menyediakan berbagai info bermanfaat.
  81. 81. Salah satunya adalah obyek HttpServletRequest melalui metoda getRequest .
  82. 82. Obyek ini menyimpan info principal (pengguna) termasuk username -nya. </li></ul>
  83. 83. Komponen Teramankan “ index.jsp ” <ul><li>Komponen web teramankan “ index.jsp ” di direktori “ basic ” </li></ul><%@page contentType=&quot;text/html&quot; pageEncoding=&quot;UTF-8&quot;%> <% String username = ((HttpServletRequest)pageContext.getRequest()).getUserPrincipal().getName(); %>
  84. 84. Komponen Teramankan “ index.jsp ” <!DOCTYPE html> <html> <head> <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;> <title>Otentikasi Dasar HTTP untuk JSP</title> </head> <body> <h1>Hello <%= username %>!</h1> </body> </html>
  85. 85. Menambah Pengguna ke Server GlassFish <ul><li>Jalankan server GlassFish
  86. 86. Buka konsol adminstrator: http://localhost:4848/
  87. 87. Di pohon navigasi, buka node Configurations , lalu buka node server-config
  88. 88. Buka node Security -> Realms
  89. 89. Pilih realm mana yang akan ditambah </li><ul><li>file , atau ← pilih yang ini
  90. 90. admin-realm </li></ul></ul>
  91. 91. Menambah Pengguna ke Server GlassFish <ul><li>Di halaman Edit Realm , klik tombol Manage Users
  92. 92. Di halaman File Users (atau Admin Users) , klik New
  93. 93. Isi lengkap User ID , Group List , Password dll. </li><ul><li>User ID dan Password adalah case-sensitive .
  94. 94. User ID : “ praz.basic ” </li></ul><li>Klik OK </li></ul>
  95. 95. Deployment Descriptor Standar <ul><li>Untuk menentukan mekanisme otentikasi, menambah security roles dan security constraints, dilakukan dengan memodifikasi file deployment descriptor standar, yaitu “ web.xml ”, yang berada di bawah direktori “ <project-dir>/web/WEB-INF/ ”.
  96. 96. Ini adalah file deployment descriptor standar untuk semua application server . </li></ul>
  97. 97. Deployment Descriptor Standar <ul><li>Bila file ini belum ada dapat dibuat sbb: </li><ul><li>Jalankan Netbeans
  98. 98. Buka modul web HelloEnterprise-war
  99. 99. Klik kanan di modul web
  100. 100. Pilih New -> Others -> Web -> Standard Deployment Descriptor </li></ul></ul>
  101. 101. Deployment Descriptor GlassFish <ul><li>Untuk memetakan Role -> Users / Groups , dilakukan dengan memodifikasi file deployment descriptor GlassFish, yaitu “ glassfish-web.xml ”, yang berada di bawah direktori “ <project-dir>/web/WEB-INF/ ”.
  102. 102. Ini adalah file deployment descriptor khusus untuk GlassFish application server . </li></ul>
  103. 103. Deployment Descriptor GlassFish <ul><li>Bila file ini belum ada dapat dibuat sbb: </li><ul><li>Jalankan Netbeans
  104. 104. Buka modul web HelloEnterprise-war
  105. 105. Klik kanan di modul web
  106. 106. Pilih New -> Others -> GlassFish -> GlassFish Descriptor </li></ul></ul>
  107. 107. Menentukan Mekanisme Otentikasi <ul><li>Jalankan Netbeans, buka modul web HelloEnterprise-war
  108. 108. Di Projects Explorer , buka node Web Pages -> WEB-INF
  109. 109. Buka file “ web.xml ”
  110. 110. Klik tab “ Security ”
  111. 111. Buka node “ Login Configuration ”
  112. 112. Pilih “ Basic ” </li></ul>
  113. 113. Menentukan Mekanisme Otentikasi <ul><li>Deployment descriptor standar komponen web: <project-dir>/web/WEB-INF/web.xml </li></ul><web-app> ... <login-config> <auth-method>BASIC</auth-method> </login-config> ... </web-app>
  114. 114. Menambah Security Roles <ul><li>Jalankan Netbeans, buka modul web HelloEnterprise-war
  115. 115. Di Projects Explorer , buka node Web Pages -> WEB-INF
  116. 116. Buka file “ web.xml ”
  117. 117. Klik tab “ Security ”
  118. 118. Buka node “ Security Roles ”, klik “ Add.. ”
  119. 119. Isi “ Role Name ” dan “ Description ” </li><ul><li>Role name tanpa spasi, mis. BasicRole </li></ul><li>Klik “OK” </li></ul>
  120. 120. Menambah S ecurity Roles <ul><li>Deployment descriptor standar komponen web: <project-dir>/web/WEB-INF/web.xml </li></ul><web-app> ... <security-role> <description>Has access for HTTP basic authentication.</description> <role-name>BasicRole</role-name> </security-role> ... </web-app>
  121. 121. Menambah Security Constraints <ul><li>Jalankan Netbeans, buka modul web HelloEnterprise-war
  122. 122. Di Projects Explorer , buka node Web Pages -> WEB-INF
  123. 123. Buka file “ web.xml ”
  124. 124. Klik tab “ Security ”
  125. 125. Di folder “ Security Constraints ” klik “ Add Security Constraints ”
  126. 126. Isi “ Display Name ” </li></ul>
  127. 127. Menambah Security Constraints <ul><li>Di kolom “ Web Resource Collection ” klik “Add..”
  128. 128. Isi “ Resource Name ”, “ Description ”, dan “ URL Pattern(s) ” </li><ul><li>URL pattern: bagian berwarna biru htpp://hostname:port/root /basic/* </li></ul><li>Pilih “ HTTP Method(s) ”
  129. 129. Klik “OK”
  130. 130. Cek “ Enable Authentication Constraint ”
  131. 131. Isi “ Description ” dan “ Role Name(s): BasicRole ” </li></ul>
  132. 132. Menambah security constraints <ul><li>Deployment descriptor standar komponen web: <project-dir>/web/WEB-INF/web.xml </li></ul><web-app> ... <security-constraint> <display-name>BasicConstraint</display-name> <web-resource-collection> <web-resource-name>basic</web-resource-name> <description>Basic directory</description> <url-pattern>/basic/*</url-pattern> </web-resource-collection>
  133. 133. Menambah security constraints <ul><li>Deployment descriptor standar komponen web: <project-dir>/web/WEB-INF/web.xml </li></ul><auth-constraint> <description>Only BasicRole is allowed to access.</description> <role-name>BasicRole</role-name> </auth-constraint> </security-constraint> ... </web-app>
  134. 134. Memetakan Role -> Users/Groups <ul><li>Jalankan Netbeans, buka modul web HelloEnterprise-war
  135. 135. Di Projects Explorer , buka node Web Pages -> WEB-INF
  136. 136. Buka file “ glassfish-web.xml ”, klik tab “ Security”
  137. 137. Buka node BasicRole , klik “ Add Principal... ”
  138. 138. Isi Principal Name : username pengguna GlassFish (mis. praz.basic )
  139. 139. Klik OK </li></ul>
  140. 140. Memetakan Role -> Users/Groups <ul><li>Deployment descriptor glassfish komponen web: <project-dir>/web/WEB-INF/glassfish-web.xml </li></ul><glassfish-web-app> ... <security-role-mapping> <role-name>BasicRole</role-name> <principal-name>praz.basic</principal-name> </security-role-mapping> ... </glassfish-web-app>
  141. 141. Mendeploy HelloEnterprise <ul><li>Di Project Explorer klik kanan project HelloEnterprise -> Deploy .
  142. 142. Untuk membuka aplikasi, akses URL http://localhost:8080/HelloEnterprise-war/basic . </li></ul>
  143. 143. Otentikasi Dasar HTTP <ul><li>Isi username dan password yang telah dipetakan ke role BasicRole </li></ul>
  144. 144. Aplikasi HelloEnterprise Teramankan
  145. 145. Referensi <ul><li>The Java EE 6 Tutorial - Part VII Security (http://download.oracle.com/javaee/6/tutorial/doc/gijrp.html) </li></ul>

×