Thứ Tư, 10 tháng 8, 2016

Security Web Application trong Tomcat Web Server

CMP – Container Managed Persistent Bean trong EJB 2

Security Web Application trong Tomcat Web Server

Mục đích: nội dung của chủ đề này giới thiệu cách áp dụng các khái niệm security vào ứng dụng Web và deploy trên Tomcat Web Server. Đây cũng là chủ đề mở rộng các khái niệm security đã đề cập trong tutorial về EJB – deploy trên application server JBoss. Ở chủ đề này chúng tôi sẽ giới thiệu đầy đủ 3 loại security là basic, digest và form, 1 cách bảo mật dữ liệu – client certificate, và 1 cách chuyển hướng tập tin ACL của web container sang DB của người (JDBC Realms) dùng thay cho việc sử dụng ACL với tập tin properties (EJBs) hay XML (giới thiệu trong nội dung bên dưới)

Security Web Application trong Tomcat Web Server

Mục đích: nội dung của chủ đề này giới thiệu cách áp dụng các khái niệm security vào ứng dụng Web và deploy trên Tomcat Web Server. Đây cũng là chủ đề mở rộng các khái niệm security đã đề cập trong tutorial về EJB – deploy trên application server JBoss. Ở chủ đề này chúng tôi sẽ giới thiệu đầy đủ 2 loại security là basic và form, 1 cách bảo mật dữ liệu – client certificate, và 1 cách chuyển hướng tập tin ACL của web container sang DB của người (JDBC Realms) dùng thay cho việc sử dụng ACL với tập tin properties (EJBs) hay XML (giới thiệu trong nội dung bên dưới)

Yêu cầu

Tổng quát hóa

  • Khái niệm security không thay đổi cho dù áp dụng công nghệ hay framework nào hay kể cả trong server bất kỳ hỗ trợ J2EE/JavaEE.
  • Ở đây chúng tôi giới thiệu việc cài đặt security cho Web Application được deploy trên Web Server (cụ thể là Tomcat 6.0.26) nhưng vấn đề này chỉ có hiệu quả khi bạn đã nắm được các lý thuyết tương ứng về security (vui lòng xem lại bài Security trong EJB 2.1)
  • Có 02 cơ chế security cơ bản dành cho web đó là Basic, Form (chúng tôi đã thể hiện trong cách cài đặt trong bài Security trong EJB2.1 và EJB3.0), và digest. Chúng tôi sẽ thực hiện cài đặt chúng trong chủ đề này
  • Ngoài ra, để dữ liệu truyền đi đòi hỏi chúng ta phải bảo mật thông tin trên đường truyền, do vậy chúng tôi sẽ giới thiệu cơ chế yêu cầu container hỗ trợ mã hóa thông tin và truyền sang kênh riêng là SSL kết hợp HTTPS
  • Cuối cùng, chúng tôi sẽ giới thiệu JDBC Realm áp dụng các cơ chế bảo mật trên nhưng định hướng ACL đến DB sử dụng chương trình quản lý CSDL – DBMS cụ thể như MS. SQL Server 2005

Bổ sung một số khái niệm về Security áp dụng trên Tomcat Web Server

  • Việc xác thực và phân quyền của JAAS trên mô hình J2EE/JavaEE được container kiểm tra trên ACL – Access Control List
    • ACL trong tomcat web server có tên là tomcat-users.xml.
    • Tập tin này được đặt tại thư mục sau
      • Windows XP: C:\Documents and Settings\LoggedUser\.netbeans\6.9\apache-tomcat-6.0.26_base\conf\
      • Windows Vista/7: C:\Users\LoggedUser\.netbeans\6.9\apache-tomcat-6.0.26_base\conf\
      • Ví dụ

    • Cấu trúc tập tin này như sau

    • Lưu ý:
      • Mặc định khi lần đầu mở lên chỉ tồn tại duy nhất hàng username ide, username mặc định dùng để khởi động tomcat khi có quyền manager (chúng ta có thể thấy bằng cách vào NetBeans, chọn Server, click phải chuột trên Tomcat Server, chọn Properties). Server không thể tự khởi động khi không có user này. Do vậy, nếu tập tin này mất, hay user bị xóa, chúng ta phải tạo user tương ứng để thay thế, không làm thế thì chúng ta sẽ thấy lỗi khi start tomcat hay khi chạy ứng dụng, màn hình yêu cầu nhập username và password sẽ xuất hiện

      • Chúng ta mở comment của html trong file tomcat-users.xml (<!-- -->), bổ sung các roles, bổ sung các username
      • Tomcat mới cho phép chúng ta copy trực tiếp xml để modified, chúng ta có thể copy và thêm mới như hình mô tả ở trên.
      • 02 role bắt buộc bổ sung là admin và manage, các role và user khác, các bạn có thể bổ sung tên tùy ý. Để gán role thì trong từng username chúng ta thêm giá trị roles có sẵn trong file vào thuộc tính rolenames, các giá trị phân cách bằng dấu phẩy “,”
  • Ở trong tomcat server, chúng ta không cần xác định domain security gì cả vì, tomcat server 6.0.26 đã tự tích hợp cấu hình security sẵn cho web application, do vậy ở đây chúng ta sẽ chỉ cấu hình cho ứng dụng web cụ thể để yêu cầu web container hỗ trợ security theo yêu cầu của ứng dụng web

Ứng dụng EJB áp dụng security trên ví dụ cụ thể

BASIC Security

  • Đầu tiên chúng tôi sẽ làm ví dụ mô tả chương trình ứng dụng sử dụng cơ chế security Basic.
    • Ứng dụng thực thi đơn giản có 1 đường link dẫn đến trang admin, khi người dùng click vào link này thì cơ chế BASIC được áp dụng và đòi hỏi người dùng phải nhập username, password.
    • Nếu đúng người dùng vào trang admin, nếu sai sẽ có báo lỗi tương ứng
    • Cơ chế BASIC sẽ truyền password theo dạng username:password và dùng cơ chế mã hóa Base64để chuyển đi và kích hoạt màn hình Browser – Authentication để cho người dùng nhập liệu
  • Trong phần tutorial này chúng tôi sẽ thực hiện một nhóm cách động tương tự các bước trong bài Secuirty trong EJB 2.1 hay EJB 3.0 – phần áp dụng cho ứng dụng web
  • Bước 1: Tạo Web Application tương tư như kết hợp JavaFX với JSP và JDBC
    • Tên project: AJDay4Basic
    • Server: Apache Tomcat 6.0.26
    • J2EE version: 1.4
    • Cấu trúc project trên Netbeans như sau

  • Bước 2: Tạo giao diện và các thành phần của ứng dụng web theo yêu cầu
    • Tạo thư mục admin trong Web Pages, bằng cách click phải chuột trên Web Pages, chọn New…, chọn Others,

      • Chọn Others trong Categories và Folder trong File Types

      • Click Next, nhập Folder Name là admin, nhấn Finish

      • Click chuột phải trên admin và tạo tập tin index.html, cấu trúc project được cập nhật như sau

    • Cập nhật nội dung của tập tin index.html trong admin như sau

    • Bổ sung nội dung cho tập tin index.jsp ngoài thư mục gốc Web Page, tạo link reference đến tập tin index.jsp

    • Bước 3: chúng ta phải cấu hình cơ chế authentication để có thể xác thực và phân quyền người dùng trên web
      • Để thực hiện nội dung này, phần cấu hình phải được thể hiện và khai báo trong web deployment descrisptor đó là tập tin web.xml
      • Mở tập tin web.xml trong thư mục WEB-INF, click chọn tag Security

      • Cấu hình authentication, mở rộng mục Login Configuration, chọn Basic để thông báo container kích hoạt browser đưa ra cửa sổ login cho người dùng

      • Nhấn Save file và chuyển sang XML, chúng ta thấy XML cập nhật bổ sung thêm như sau

      • Chuyển trở lại tab Security, thu gọn Login Configuration, mở rộng mục Security Roles

      • Nhấn nút Add để đưa thêm role mới vào, chúng tôi sẽ đưa 2 role tồn tại trong tập tin tomcat-users.xml là admin, manager

      • Click nút OK, và áp dụng tương tự với manager. Màn hình mục Security Roles được cập nhật như sau

      • Chuyển tab XML, chúng ta sẽ thấy web.xml bổ sung thêm như sau

      • Chuyển lại tab Security, thu gọn mục Security Roles, chúng ta tiến tới xác định tài nguyên của ứng dụng cần bảo mật bằng chọn nút Add Security Contraint trong mục Security Contraints

      • Chúng ta điền vào Display Name nếu cần, mặc định nó có tên là Contraint1. Chúng ta cần xác định resource bảo mật bằng cách nhấn vào nút Add trong Web Resource Collection

      • Chúng ta điền tên Resource Name – đặt tên cho nhóm resource chúng ta muốn bảo mật, tên không nên có khoảng trắng
        • Xác định tập đường dẫn resource chúng ta cần security thông qua URL Pattern, đường dẫn tính từ root hay context path “/”. Dấu * thể hiện tất cả trong thư mục. Ở đây chúng ta muốn security thư mục admin trong web ứng dụng nên ta gõ /admin/*. Điều này có nghĩa Browser sẽ tự kích hoạt cửa sổ login khi chúng ta truy cập các thành phần trong thư mục admin của ứng dụng web lần đầu tiên
        • Cho phương thức HTTP bảo mật, chúng ta chọn hàng Selected HTTP Methods để chọn 1 trong 7 phương thức, nếu không chọn gì cả tiếp theo cũng có nghĩa là chọn hết nhưng dùng cách này thay vì chọn All Http Methods để làm code XML phát sinh đơn giản hơn

      • Nhấn OK, sau đó chúng ta check tiếp vào check box Enable Authentication Contraints để xác định tài nguyên cấu hình vừa rồi cho phép được truy cập bởi nhóm quyền nào

      • Chúng ta nhấn nút Edit để mở cửa sổ xuất hiện các Security Roles mà chúng ta đã add ở các mục trên để xác định group roles nào được truy cập. Chúng ta nhấn nút Add để add các roles qua

      • Nhấn Ok để hoàn tất, chúng ta thấy giao diện Security được cập nhật như sau

      • Nhấn Save file XML và chuyển sang tab XML, chúng ta thấy tập tin web.xml được cập nhật như sau

      • Chúng ta hoàn tất việc cấu hình Security trên web
    • Để lỗi đuợc trình bày thân thiện với người dùng, chúng ta sẽ xử lý các lỗi 401 và 403.
      • Để xử lý lỗi 401, chúng ta bổ sung tập tin notAccess.jsp vào thư mục gốc của Web Pages tương tự như bài Security trong EJB 2.1 như sau

      • Để xử lý lỗi 403, chúng ta sung tập tin accessDenied.jsp vào thư mục Web Pages với nội dung như sau

      • Cấu trúc thư mục project được cập nhật như sau

      • Bổ sung cấu hình lỗi vào tập tin web.xml

  • Bước 6: Thực hiện Build Project, Start Server, Deploy để testing thư
      • Chúng ta thấy chương trình chạy đầu tiên nó kích hoạt authentication Basic như sau

      • Đầu tiên chúng ta nhập liệu với user admin, manager được khai báo trong tập tin tomcat-users.xml đó là user: khanhkt, pass: trongkhanh. Nhấn OK thì giao diện xuất hiện là trang index.jsp vì đây là password hợp lệ

      • Tiếp tục chúng ta thực hiện với users không có trong hệ thống khai báo tập tin tomcat-users.xml hay giá trị nhập login sai username hay password, chúng ta thử với users: abc, pass: 345.
        • Thực hiện chạy lại chương trình ở cửa số Browser khác
        • Nhập user, pass không có khai báo, chương trình sẽ cho chúng ta nhập 3 lần và xuất hiện kết quả như sau

      • Tiếp tục chúng ta thực hiện với users có trong hệ thống khai báo tập tin tomcat-users.xml nhưng users bị hạn chế quyền truy cập  trong cấu hình users: tomcat, pass: tomcat.
        • Thực hiện chạy lại chương trình ở cửa số Browser khác

    • Chúng ta đã hoàn tất được ứng dụng web có hỗ trợ BASIC security từ web container thông qua các tham số khai báo của chúng ta trong tập tin web deployment descriptor (web.xml)

Digest Security

  • Chúng tôi sẽ sử dụng lại yêu cầu mô tả trong cơ chế security Basic áp dụng cho Digest security nhưng ở đây khi ứng dụng thực thi sẽ áp dụng cơ chế Security tức thời, khi nhập đúng sẽ in ra message tương ứng
    • Cơ chế DIGEST cũng áp dụng như BASIC là truyền password theo dạng username:password và client sẽ dùng hash function để mã hóa dữ liệu để chuyển đến server và kích hoạt màn hình Browser – Authentication để cho người dùng nhập liệu
    • Ở đây bài sẽ mô tả việc xây dựng ACL qua mô tả dữ liệu của Web Application khi context được khởi tạo
  • Bước 1: Tạo Web Application tương tư như kết hợp JavaFX với JSP và JDBC
    • Tên project: DigestSecurity
    • Server: Apache Tomcat 6.0.26
    • J2EE version: 1.4
  • Bước 2: Tạo giao diện và các thành phần của ứng dụng web theo yêu cầu
    • Tạo Servlet tên Digest Servlet thực hiện cơ chế giải mã, đón thông tin và kích hoạt BASIC security trong code – đây có thể nói là một dạng security kết hợp giữa Declarative và Programmatic
      • Tạo dạng password được lưu trữ trong Properties của ứng dụng khi context ứng dụng được khởi tạo trong phương thức init

      • Bổ sung xử lý, áp dụng cơ chế Decoder để giải mã, tách username và password. Lưu ý: lần đầu tiên người dùng yêu cầu server là chưa nhập thông tin gì cả (!invalid), server phải response lại client yêu cầu xác nhập người dùng thông qua setStatus và setHeader để browser kích hoạt BASIC security đê người dùng nhập authentication đem lại vào server

      • Cấu trúc project được cập nhật như sau

    • Bước 3: chúng ta phải cấu hình cơ chế authentication để có thể xác thực và phân quyền người dùng trên web
      • Để thực hiện nội dung này, phần cấu hình phải được thể hiện và khai báo trong web deployment descrisptor đó là tập tin web.xml
      • Mở tập tin web.xml trong thư mục WEB-INF, click chọn tag Security

      • Cấu hình authentication, mở rộng mục Login Configuration, chọn Digest để thông báo container kích hoạt browser đưa ra cửa sổ login cho người dùng

      • Nhấn Save file và chuyển sang XML, chúng ta thấy XML cập nhật bổ sung thêm như sau

      • Cấu hình web resource như sau

      • Save file và chuyển sang mode XML, chúng ta thấy

      • Không cần cấu hình thông tin khác vì chúng ta đã cấu hình trong code lập trình trong servlet
      • Thiết lập trang chạy chính trong welcome-file là DigestServlet (tập tin web.xml)
  • Bước 6: Thực hiện Build Project, Start Server, Deploy để testing thư
      • Chúng ta thấy chương trình chạy đầu tiên nó kích hoạt authentication Digest như sau

      • Đầu tiên chúng ta nhập liệu với user được khai báo trong phương thức init của DigestServlet đó là user: khanhkt, pass: 123456. Nhấn OK thì giao diện xuất hiện kết quả vì đây là password hợp lệ

      • Tiếp tục chúng ta thực hiện với users không có trong hệ thống khai báo tập tin DigestServlet – phương thức init hay giá trị nhập login sai username hay password, chúng ta thử với users: abc, pass: 345. Chúng ta có thể test với account không có chữ allowed
        • Thực hiện chạy lại chương trình ở cửa số Browser khác
        • Nhập user, pass không có khai báo, chương trình sẽ cho chúng ta nhập 3 lần và xuất hiện kết quả như sau

    • Chúng ta đã hoàn tất được ứng dụng web có hỗ trợ DIGEST security từ web container thông qua các tham số khai báo của chúng ta trong tập tin web deployment descriptor (web.xml) và Servlet – script ở server side trong Tomcat Server

FORM Security

  • Ở mục này chúng tôi sẽ làm ví dụ mô tả chương trình ứng dụng sử dụng cơ chế security Form, áp dụng yêu cầu như bài BASIC security ở trên.
    • Ở đây, chúng ta sẽ dùng form đặc biệt thông qua 1 servlet của container cung cấp đó là j_security_check
    • Ưu điểm cho phép chúng ta cấu hình nhưng trang giao diện thân thiện hơn của sổ BASIC của trình duyệt
  • Bước 1: Tạo Web Application tương tư như kết hợp JavaFX với JSP và JDBC
    • Tên project: AJDay4Form
    • Server: Apache Tomcat 6.0.26
    • J2EE version: 1.4
  • Bước 2: Tạo giao diện và các thành phần của ứng dụng web theo yêu cầu
    • Tạo thư mục admin trong Web Pages
      • Click chuột phải trên admin và tạo tập tin index.html
      • Cập nhật nội dung của tập tin index.html trong admin như Basic Security
    • Bổ sung nội dung cho tập tin index.jsp ngoài thư mục gốc Web Page, tạo link reference đến tập tin index.jsp tương tự như Basic Security
    • Tạo tập tin login.jsp trong thư mục admin tương tư như Security trong EJB 3.0, đây là form sẽ được container kích hoạt thay cho cho BASIC form trong bài BASIC Security theo cấu hình

    • Tạo thêm tập tin fail.html để khi lỗi 401 sẽ được thông báo lỗi khi nhập sai trên form login ở trên

    • Cấu trúc project được cập nhật như sau

  • Bước 3: chúng ta phải cấu hình cơ chế authentication để có thể xác thực và phân quyền người dùng trên web
      • Để thực hiện nội dung này, phần cấu hình phải được thể hiện và khai báo trong web deployment descrisptor đó là tập tin web.xml
      • Mở tập tin web.xml trong thư mục WEB-INF, click chọn tag Security

      • Cấu hình authentication, mở rộng mục Login Configuration, chọn Form và form login.jsp và fail.jsp tương ứng để thông báo container kích hoạt browser đưa ra cửa sổ login cho người dùng.

        • Lưu ý: dùng nút Browser để chọn chính xác trang trong ứng dụng project của mình vì có dấu “/” ở đầu. Không nên gõ bằng tay có thể dẫn đến gõ sai và thiếu
      • Nhấn Save file và chuyển sang XML, chúng ta thấy XML cập nhật bổ sung thêm như sau

      • Chuyển trở lại tab Security, thu gọn Login Configuration, mở rộng mục Security Roles

      • Nhấn nút Add để đưa thêm role mới vào, chúng tôi sẽ đưa 2 role tồn tại trong tập tin tomcat-users.xml là admin, manager

      • Click nút OK, và áp dụng tương tự với manager. Màn hình mục Security Roles được cập nhật như sau

      • Chuyển tab XML, chúng ta sẽ thấy web.xml bổ sung thêm như sau

      • Chuyển lại tab Security, thu gọn mục Security Roles, chúng ta tiến tới xác định tài nguyên của ứng dụng cần bảo mật bằng chọn nút Add Security Contraint trong mục Security Contraints

      • Chúng ta điền vào Display Name nếu cần, mặc định nó có tên là Contraint1. Chúng ta cần xác định resource bảo mật bằng cách nhấn vào nút Add trong Web Resource Collection

      • Chúng ta điền tên Resource Name – đặt tên cho nhóm resource chúng ta muốn bảo mật, tên không nên có khoảng trắng
        • Xác định tập đường dẫn resource chúng ta cần security thông qua URL Pattern, đường dẫn tính từ root hay context path “/”. Dấu * thể hiện tất cả trong thư mục. Ở đây chúng ta muốn security thư mục admin trong web ứng dụng nên ta gõ /admin/*. Điều này có nghĩa Browser sẽ tự kích hoạt cửa sổ login khi chúng ta truy cập các thành phần trong thư mục admin của ứng dụng web lần đầu tiên
        • Cho phương thức HTTP bảo mật, chúng ta chọn hàng Selected HTTP Methods để chọn 1 trong 7 phương thức, nếu không chọn gì cả tiếp theo cũng có nghĩa là chọn hết nhưng dùng cách này thay vì chọn All Http Methods để làm code XML phát sinh đơn giản hơn

      • Nhấn OK, sau đó chúng ta check tiếp vào check box Enable Authentication Contraints để xác định tài nguyên cấu hình vừa rồi cho phép được truy cập bởi nhóm quyền nào

      • Chúng ta nhấn nút Edit để mở cửa sổ xuất hiện các Security Roles mà chúng ta đã add ở các mục trên để xác định group roles nào được truy cập. Chúng ta nhấn nút Add để add các roles qua

      • Nhấn Ok để hoàn tất, chúng ta thấy giao diện Security được cập nhật như sau

      • Nhấn Save file XML và chuyển sang tab XML, chúng ta thấy tập tin web.xml được cập nhật như sau

      • Chúng ta hoàn tất việc cấu hình Security trên web
    • Để lỗi đuợc trình bày thân thiện với người dùng, chúng ta sẽ xử lý các lỗi 403.
      • Để xử lý lỗi 403, chúng ta sung tập tin accessDenied.jsp vào thư mục Web Pages với nội dung như sau

      • Cấu trúc thư mục project được cập nhật như sau

      • Bổ sung cấu hình lỗi vào tập tin web.xml

  • Bước 6: Thực hiện Build Project, Start Server, Deploy để testing thư
      • Chúng ta thấy chương trình chạy đầu tiên nó kích hoạt authentication Form như sau

      • Đầu tiên chúng ta nhập liệu với user admin, manager được khai báo trong tập tin tomcat-users.xml đó là user: khanhkt, pass: trongkhanh. Nhấn OK thì giao diện xuất hiện là trang index.jsp vì đây là password hợp lệ

      • Tiếp tục chúng ta thực hiện với users không có trong hệ thống khai báo tập tin tomcat-users.xml hay giá trị nhập login sai username hay password, chúng ta thử với users: abc, pass: 345.
        • Thực hiện chạy lại chương trình ở cửa số Browser khác
        • Nhập user, pass không có khai báo, chương trình sẽ cho chúng ta nhập 1 lần và xuất hiện kết quả như sau

      • Tiếp tục chúng ta thực hiện với users có trong hệ thống khai báo tập tin tomcat-users.xml nhưng users bị hạn chế quyền truy cập  trong cấu hình users: tomcat, pass: tomcat.
        • Thực hiện chạy lại chương trình ở cửa số Browser khác

    • Chúng ta đã hoàn tất được ứng dụng web có hỗ trợ FORM security từ web container thông qua các tham số khai báo của chúng ta trong tập tin web deployment descriptor (web.xml)

Thực hiện bảo mật và truyền thông tin trên kênh đặc biệt để đảm bảo thông tin truyền đi được bảo mật

  • Chúng tôi sẽ sử dụng lại bài Form ở trên để áp dụng thêm cơ chế bảo mật thông tin Client Cert thông qua mã hóa thông tin sử dụng asymetric key (gồm 02 khóa private và public) để trao đổi giữa client và server trong việc mã hóa và giải mã
  • Các bước để thực hiện cơ chế client – cert dùng https như sau
  • Bước 1:  Phát sinh key, sử dụng keytool.exe (muốn thực hiện được nội dung này bạn phải cấu hình được JVM độc lập qua việc thiết lập CLASSPATH, JAVA_HOME, PATH – vui lòng xem lại bài Triển khai ứng dụng Web độc lập với NetBeans
    • Mở command prompt cmd để nhập lệnh như sau

keytool –genkey –alias tên –keyalg thuật giải

với tham số genkey là phát sinh key mới, alias tên dành cho key phát sinh (ở đây dùng tomcat), keyalg là thuật giải áp dụng phát sinh key (ở đây chúng tôi dùng RSA)

    • Chúng ta nhập password và confirm password. Lưu ý: password sẽ không hiện thị nhưng vẫn nhận ký tự, chúng ta nhập đúng thì kết quả sẽ ra như sau

      • Nếu nhập sai giữa 02 lần nhập password và confirm thì hệ thống sẽ hiển thị thông tin bắt nhập lại. Bạn phải nhập đến khi nào kết quả ra dòng hỏi tên họ là được
      • Bạn phải nhớ password này để sử dụng cho cấu hình ứng dụng trong việc mã hóa thông tin
    • Chúng ta nhập các thông tin tiếp theo, có thể nhập tùy ý

    • Màn hỏi các thông tin đúng không, chúng ta nhập yes và nhấn Enter

    • Khi nhập password xong, chương trình yêu cầu có cần chỉnh sửa password cho key phát sinh hay không? Nếu có thì nhập lại, nếu vẫn giữ password như nhập ở các bước trên thì nhấn Enter. Ở đây, chúng tôi nhấn Enter
    • Khi hoàn tất tập tin .keystore sẽ xuất hiện trong thư mục sau
      • Windows XP: C:\Documents and Setting\username\.keystore
      • Windows Vista hay 7: C:\Users\username\.keystore

  • Bước 2: Cấu hình Tomcat Server để cho phép xử lý và hỗ trợ cơ chế bảo mật
    • Tắt – Stop server đang chạy
    • Trong Netbeans, chọn Services, chọn Tomcat, click phải chuột, chọn Edit server.xml

    • Tìm trong tập tin server.xml giá trị SSL HTTP/1.1 (nhấn Ctrl + F và nhập trị để search cho nhanh)

      • Lưu ý: Comment đoạn code màu xanh nếu có. Đoạn code màu đỏ gõ chính xác và phần thuộc tính keystorePass có giá trị chính là password chúng ta tạo keystore trong bước trên
    • Save file server.xml. Start Server. Server phải đảm bảo start không có lỗi gì cả, nếu có lỗi chúng ta phải stop server, kiểm tra đoạn xml chỉnh sửa lại cho đến khi server start không lỗi
  • Bước 3: Ứng dụng thông tin bảo mật vào ứng dụng
    • Chúng tôi dùng lại ứng dụng để cấu hình bảo mật, chúng ta mở tập tin web.xml, chọn tab Security, chọn lại Contraint1, check thông tin Enable User Data Constraint, chọn CONFIDENT trong Transport Guarantee

      • XML được cập nhật

  • Bước 4: Clean and Build Project, Deploy và Testing
    • Trang chính chạy, click vào link
    • Windows XP

      • Click OK

      • Click View Certificate, xem thấy license, click OK để thoát

      • Click No, trang vẫn nằm ở trang chính
      • Click Yes, chương trình kích hoạt Form Security
    • Windows Vista/7

    • Click here to close this web page tương tự như No ở trên
    • Click Continue to this website để container kích hoạt Form Security

    • Click vào chữ Certificate error trên góc trái màn hình

    • Chọn View certificates để thấy license

  • Chúng ta đã hoàn tất xong cơ chế bảo mật và truyền thông tin. Chúng ta lưu ý khi dùng cơ chế này đại chỉ chuyển thành https và port chuyển đổi qua kênh đặc biệt là 8443. Do vậy, khi xóa mất keystore hay không cấu hình server.xml thì chương trình sẽ không thực thi được vì kênh đặc biệt không được mở thì dữ liệu sẽ không được truyền đi
  • Để server trở lại bình thường, chúng ta chỉ cần comment đoạn xml trong server.xml và stop, start server lại để các ứng dụng các có thể chạy được. Chúng ta cũng nên tắt đoạn CONFIDENT code để áp dụng bài này lần nữa trong ví dụ tiếp theo về chuyển ACL đến DB của người dùng

Định hướng ACL từ tomcat-users.xml thành DB của người dùng áp dụng JDBCRealm

  • Lần nữa tất cả mọi cấu hình đều giống nhau, chỉ khác nhau ở chỗ đó là định hướng ACL trở thành DB, ở đây là DBMS
  • Bước 1: Tạo DB với table có cách tổ chức tương tự như tomcat-users.xml, tập tin này được chia thành 3 bảng cài đặt và có mối quan hệ relationship trên MS. SQL Server 2005 như sau

    • Nhập liệu cần lưu ý, giá trị nhập và cấp quyền tùy ý nhưng bắt buộc phải tồn tại 02 roles là admin và manager trong bảng roles. Ngoài ra, bạn bắt buộc phải cấp một user tên là ide, có user_pass giống như tập tin tomcat-users.xml và buộc phải cấp quyền admin và manager trong bảng user_roles để đảm bảo khi chuyển hướng server phải thực hiện khởi động được. Nếu bạn không làm đúng, Tomcat sẽ không khởi động hay yêu cầu nhập username hay password để chạy chương trình

  • Bước 2: Cấu hình Tomcat Server để chuyển hướng ACL đến DB
    • Bởi vì Tomcat Server định hướng đến DB của chúng ta, và khi server kích hoạt phải thực hiện kết nối DB qua driver loại 4 mà không phụ thuộc ứng dụng nào đó. Điều này có nghĩa driver phải có sẵn trước khi server start. Do vậy, chúng ta chép driver sqljdbc.jar hay sqljdbc4.jar vào thư mục C:\Program Files\Apache Software Foundation\Apache Tomcat 6.0.26\lib\
    • Mở tập tin server.xml như hướng dẫn ở trên để chỉnh sửa như sau
      • Chúng ta tìm chữ UserDatabaseRealm để di chuyển đến chỗ cấu hình
      • Mặt định dòng <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> (khung tô màu xanh) có sẵn định hướng đến tomcat-users.xml qua thông số UserDatabaseRealm
      • Chúng ta định hướng đến DB chúng ta qua JDBCRealm (khung màu đỏ), kết nối DB, sử dụng chuỗi kết nối DB và mapping các tên bảng và tên cột tương ứng thông qua giá trị Table hay Col

    • Save file. Stop Tomcat Server nếu chưa stop, start server lại và phải đảm bảo không xuất hiện lỗi, nếu không bạn phải kiểm tra lại
  • Bước 4: Chạy lại chương trình Form Security, không áp dụng Client-Cert và Https

    • Nếu chạy chương trình mà xuất hiện yêu cầu nhập username, password của Tomcat nghĩa là việc cấu hình có vấn đề, bạn phải thực hiện cấu hình lại. Phải stop và start server mỗi lần cấu hình xong
    • Nhập các giá trị username và password tương ứng trong DB, không dùng trên tomcat-users.xml để thấy sự hiệu quả của chúng
  • Chúng ta thấy cơ chế này, chúng ta đã lợi dụng sự hỗ trợ của container trong security để hỗ trợ authentication mà không tốn nhiều thời gian để viết code login bằng tay

Chúc mừng các bạn, chúng ta đã hoàn tất xong việc cài đặt security trên Web Server, cụ thể là Tomcat. Chủ đề giúp chúng ta khái niệm về security và cách cài đặt security trên nhiều server và môi trường tùy theo từng trường hợp

Rất mong sự góp ý chân thành của các bạn và hẹn các bạn trong chủ đề khác.

Không có nhận xét nào:

Đăng nhận xét