Secure web sử dụng HTTPS
Muốn sử dụng HTTPS với SSL trong Tomcat, bạn phải có 1 số công việc phải làm:
- Tự cấp cho mình 1 chứng chỉ
- Cấu hình cho Tomcat có thể lắng nghe các request https
- Viết web
1. Cấp chứng chỉ: Chạy Keytool để sinh file .keystroke
%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA Password mặc định là changeit |
Điền các thông tin vào, ví dụ như hình:

Lệnh này sẽ tạo ra 1 file .keystroke trong thư mục của bạn. Hãy copy file nay2 vào thư mục cài đặt Tomcat.
2. Cấu hình cho Tomcat có thể lắng nghe các request https
Mở file %TOMCAT_HOME%\conf\server.xml lên. Enable phân đoạn sau lên:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="Đường dẫn đến TOMCAT_HOME/.keystore" keystorePass="changeit" /> |
Khởi động Tomcat lên, bạn sẽ thấy như hình:

3. Viết web:
Khi viết web xong, bạn cấu hình secure cho trang web bình thường như các phần trước ngoại trừ ta thêm vào 1 constraint khác như sau:
<security-constraint>
<display-name>Constraint1</display-name>
<web-resource-collection>
<web-resource-name>test</web-resource-name>
<description/>
<url-pattern>/index.jsp</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>manager</role-name>
</auth-constraint>
<user-data-constraint>
<description/>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>DIGEST</auth-method>
</login-config>
<security-role>
<description/>
<role-name>manager</role-name>
</security-role>
|
Ở đây dòng lệnh<transport-guarantee>CONFIDENTIAL</transport-guarantee> đảm bảo dữ liệu truyền đi đi được mã hóa với SSL.
Chúng ta có 3 giá trị để chọn lựa đó là NONE, CONFIDENTIAL và INTERGRAL. Tất nhiên mỗi loại có tính chất khác nhau.
ga con said
xin hỏi : những dòng lệnh ở bước 3 “thêm vào 1 constraint” , Thêm vào đâu vậy bạn ?
Võ Văn Hải said
trong web.xml chứ đâu. config mà!
cuong said
em làm thế này ,
nhưng bị lỗi : no certificate file specified or invalid file format
Lỗi ở đâu thầy ơi .
cuong said
Connector port=”8443″ protocol=”HTTP/1.1″ SSLEnabled=”true”
maxThreads=”150″ scheme=”https” secure=”true”
clientAuth=”false” sslProtocol=”TLS”
keystoreFile=”key.keystore”
keystorePass=”changeit”
Võ Văn Hải said
EM phải dùng keytool sinh ra cái file có tên “key.keystore” mới chạy được.
cuong said
em vào : https://localhost:8443 thì ok rồi ạ , nhưng vào : https://localhost:8443/CalcsWS/services/Calculator?wsdl thì báo lỗi :
javax.servlet.ServletException: https is forbidden
org.apache.axis2.transport.http.AxisServlet.preprocessRequest(AxisServlet.java:612)
org.apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
cuong said
trong khi http thường thì vẫn được
http://localhost:8080/CalcsWS/services/Calculator?wsdl thì OK
Hien said
Thầy ơi e tạo file keytool theo hướng dẫn của thầy, nhưng làm xong ok hết e k tìm được file .keystroke ở đâu hết. E search trong toàn bộ máy cũng k thấy => thầy có thể cho e biết nó nằm ở đâu k nhé. Thanks thầy nhiều.
Võ Văn Hải said
Khi bạn mở command-line lên, thư mục hiện hành của bạnh là chỗ nào thì nó sẽ ở chỗ đó.
hương said
. Thưa thầy thầy có chỉ rõ cho em thêm phần Chạy Keytool để sinh file .keystroke, em chạy nó báo lỗi access denided : không có quyền truy cập, em phải caaso phép 1 cái j đó nhưng chưa biết là vào đâu ạ