Cấu hình tomcat• Mặc định các user này lấy trong file tomcat-users.xml; ta có thể cấu hình để lưu trong các CSDL hoặc trong các file khác cấu hình trong file conf/server.xml... Cấu hình
Trang 1Basic Security với Servlet và
Tomcat
Đào Anh Tuấn –
datuan@fit.hcmuns.edu.vn
Trang 3• Database về username / password sẽ do
Tomcat quản lý, thông qua các Realm
Trang 4Cấu hình tomcat
• Mặc định các user này lấy trong file tomcat-users.xml; ta có thể cấu hình để lưu trong các CSDL hoặc trong các file khác (cấu hình trong file conf/server.xml)
<Resource name=" UserDatabase " auth="Container"
Trang 5Cấu hình Realm
• Tomcat hỗ trợ các loại Realm sau:
▫ JDBCRealm - Accesses authentication information stored in a relational database, accessed via a JDBC driver.
▫ DataSourceRealm - Accesses authentication information stored
in a relational database, accessed via a named JNDI JDBC
Trang 6http://tomcat.apache.org/tomcat-5.5-Cấu hình thử file tomcat-users
• Đây là nơi chứa các users và roles mặc định
<user username="system" password="system" roles="system"/>
<user username="admin" password="admin" roles="manager,admin"/>
</tomcat-users>
Trang 7Cấu hình Authentication cho ứng dụng web
• Cấu hình thông qua trang web.xml
• Trước hết tạo trang web index.jsp chứa bất kỳ
nội dung nào
• Sau đó, ta sẽ yêu cầu chỉ các user thuộc role system của hệ thống mới được truy xuất file này
Trang 8Định nghĩa roles
• Định nghĩa lại role(s) system, đây là role đã
được định nghĩa trong file tomcat-users.xml
• Lưu ý: hệ thống servlet là hệ thống có đặt tính case-sensitive (System != system)
Trang 9Định nghĩa các resource sẽ được bảo vệ
• Mặc định ở đây ta bảo vệ các file *.jsp, method
GET và POST
Trang 10Qui định phương thức chứng thực
• Để đơn giản ta chọn Basic (password gửi đi dạng clear text).
• Theo đúng lý thuyết, Realm phải chọn trùng tên với
Realm trong Tomcat, nhưng ở đây đơn giản ta có thể dùng để nhập một thông báo.
Trang 12Lấy username đã đăng nhập
• Trong trang web, có thể lấy ra tên user đã đăng
nhập bằng hàm
request.getRemoteName();
request.getUserPrincipal();
Trang 13• Thay mục Basic bằng Digest, việc chứng thực
sẽ được thực thi thông qua các hàm hash
Trang 14Chứng thực với FORM
• Thay vì trình duyệt hiện lên 1 input dialog để
người dùng nhập, ta có thể qui định sẵn 1 trang web chứa form đăng nhập
• Khi người dùng truy xuất ứng dụng, nếu tomcat
phát hiện người dùng này chưa đăng nhập sẽ tự động chuyển đến form trên
Trang 15Dùng form authen
• Qui định trang để login và trang thông báo kết
quả nếu fail
Trang 16Xây dựng form login
• Form login có thể xây dựng giao diện bắt mắt,
nhiều màu sắc, tuy nhiên phải tuân thủ theo chuẩn sau
• Action=j_security_check
• Trường username và password có dạng:
<INPUT TYPE=TEXT NAME=" j_username "
VALUE="" SIZE=15>
<INPUT TYPE=PASSWORD NAME=" j_password " VALUE="" SIZE=15>
Trang 18Chứng thực với Client Cert
• Khi người dùng đăng nhập, sẽ được yêu cầu
(hoặc web browser tự động) cung cấp
certificate
• Tomcat sẽ so sánh với database user có sẵn để
quyết định quyền hạn
• Lúc này file tomcat-users.xml phải sửa đổi
<user username=“CN=Dao Anh Tuan,OU=… ” roles="system"/>
Trang 19Cấu hình SSL với Tomcat
• Phát sinh certificate cho server Tomcat
• Có thể dùng công cụ keytool có sẵn trong thự
mục bin của bộ JDK
• Phát sinh key (private/public key):
Trang 20keytool -genkey
Trang 21Tự sign certificate cho web server
• Dùng option selfcert:
Trang 22Cấu hình TOMCAT
• Vào file server.xml:
<Connector port=" 8443 " protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile=" C:\datuan_key " keystorePass="123456" />
Trang 23Truy xuất qua https
• Do đây là chứng thực “tự ký” nên các trình duyệt báo lỗi
Trang 24Connect qua https
Trang 25Virtual Host
• Khi có nhiều trang web cùng được đặt lên một web
server, mỗi trang web có thể được truy xuất bởi một domain riêng ta có thể dùng khái niệm virtual host.
• Ví dụ: Ta có 2 thư mục chứa các ứng dụng web
khác nhau:
▫ Tomcat_Home/web1/index.jsp -> Trang web bán hàng,
có domain name là www.banhang.com
▫ Tomcat_Home/web2/index.jsp -> Trang web blog, có domain name là www.blog.com
• Cả 2 domain name này đều chỉ vào địa chỉ IP của
máy chủ chứa web server.
Trang 27• Ta nén cả 2 ứng dụng web thành các file
ROOT.war (case-sensitive, mặc định TomCat giải nén các file ROOT.war thành default
application của mỗi host)
• File ROOT.war của ứng dụng banhang vào thư mục tomcat/web1, ROOT.war của ứng dụng
blog vào thư mục tomcat/web2
• Lưu ý: file context.xml của mỗi ứng dụng web,
sửa cấu hình path có giá trị path=“” (ứng dụng gốc)
Trang 28• Test với windows: sửa nội dung file
Windows/system32/drivers/etc/hosts
• Test với Linux: sửa nội dung file /etc/hosts
• Dùng trình duyệt connect vào các địa chỉ
www.banhang.com và www.blog.com (đều có cùng địa chỉ ip) để xem kết quả