2011-10-18 33 views
8

Tôi là người mới trong phát triển web dựa trên Spring.Làm cách nào để phát triển trang web https bằng Spring 3.x?

Trang web của chúng tôi là dựa trên Spring và hiện đang dựa trên http (do đó khá không an toàn). Vì trang web chưa hoạt động, chúng tôi cũng đang gửi thông tin đăng nhập/mật khẩu thông qua yêu cầu JSON bình thường đến máy chủ và tập trung chủ yếu vào JSP, thiết kế giao diện người dùng, truy vấn SQL, v.v.

Bây giờ, chúng tôi muốn chuyển sang tiêu điểm về bảo mật và chuyển sang https dưới dạng bước đầu tiên.

Tôi đã đọc không. của các trang web và một số sách mùa xuân nhưng dường như không có câu trả lời rõ ràng về cách Spring có thể được sử dụng để cung cấp bảo mật https. Một số người có thể giúp tôi đạt được những điều trên không?

Vui lòng cho tôi biết nếu câu hỏi của tôi không rõ ràng. Tôi sẽ cố gắng thêm nhiều chi tiết càng sớm càng tốt.

web.xml của chúng tôi là như sau:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation=" 
    http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  
" 
id="WebApp_ID" version="2.5"> 

<display-name>Spring3MVC</display-name> 
<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 

<servlet> 
    <servlet-name>spring</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>spring</servlet-name> 
    <url-pattern>*.html</url-pattern> 
</servlet-mapping> 

<!--> Mapping for serving static web-content <--> 
<!--> The resources folder must be in parallel to WEB-INF <--> 
<!--> The mvc:resources gives "not bound" exception unless bound to a namespace as above for xmlns:mvc <--> 
<mvc:resources mapping="/resources/**" location="/resources/" /> 
<mvc:resources mapping="/scripts/**" location="/scripts/" /> 

</web-app> 

Chỉ có một bộ điều khiển ngay bây giờ mà, mùa xuân-servlet.xml là như sau:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

<context:component-scan 
    base-package="console.controllerpkg" /> 

<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="viewClass" 
     value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

</beans> 

Thanks a lot trước !

P.S. Nếu bạn có thể giới thiệu cho tôi một ví dụ dựa trên trang web/cuốn sách vào mùa xuân, nó sẽ được nhiều đánh giá cao. Hầu hết các trang web/sách tôi đã thấy nằm nhiều nhấn mạnh vào lý thuyết nhưng rất ít ví dụ. Điều đó khiến tôi hơi bối rối.

Trả lời

12

Như Dave đã nói, bạn cần định cấu hình vùng chứa của mình để phân phối SSL và sau đó triển khai ứng dụng mùa xuân của bạn vào vùng chứa đó. Tìm hiểu về cấu hình Tomcat for SSL.

Cách khác, và linh hoạt hơn bạn có thể front your container using Apache, và enable SSL there.

+0

Cảm ơn bạn đã không liên kết. Tôi sẽ đi qua họ vào ngày mai kể từ đêm khuya cho tôi. Chỉ để xác nhận lại những gì đã được trả lời cho đến bây giờ, tôi đã hiểu rằng: 1) Spring không liên quan gì đến SSL. 2) SSL sẽ được bật trong Tomcat. Vui lòng xác nhận hai điểm này. Cảm ơn bạn rất nhiều lần cho những người trả lời của bạn. Tôi sẽ tiếp tục đào mùa xuân nếu các bạn không giúp tôi. –

+0

Chính xác, mùa xuân không trực tiếp xử lý HTTP hoặc HTTPS. Nó được triển khai vào một container như tomcat hoặc jboss, và container đó là những gì giao dịch với SSL hoặc HTTP thông thường. Những yêu cầu đó sau đó được chuyển sang Spring để xử lý. Vì vậy, có, nếu bạn muốn kích hoạt SSL, bạn nên làm điều đó trong tomcat của bạn. BTW, xin vui lòng upvote và/hoặc đánh dấu câu trả lời này là chính xác nếu nó là hữu ích. Đó là một lý do lớn khiến mọi người thích trả lời câu hỏi ở đây! – nont

+0

Liên kết trong câu trả lời là dành cho Tomcat 5.5, đây là liên kết dành cho Tomcat 7: http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html – maxivis

4

Mùa xuân không chịu trách nhiệm 100% khi định cấu hình SSL. Cho rằng bạn cần phải cấu hình container (jetty, tomcat, vv) để xử lý SSL.

0

Configure hai trang web khác nhau, một cho http và một cho https, là cho http sẽ có chỉ là một chuyển hướng đến các trang web https .

3

Cảm ơn tất cả các bạn trợ giúp. Tôi sẽ lặp lại những gì tôi đã làm cho mục đích ghi âm của riêng mình.

Trước hết, liên kết được cung cấp bởi không về 'Tomcat cho SSL' thực sự hữu ích. Tôi đọc tất cả về SSL và Tomcat có và đây là những gì tôi đã làm:

Trên dấu nhắc lệnh, hãy nhập: keytool -genkey -alias tomcat -keyalg RSA Lệnh trên hỏi tôi một số câu hỏi đơn giản cần thiết cho một chứng chỉ. Tôi đã sử dụng mật khẩu 'changeit' bất cứ nơi nào được yêu cầu (vì đó là mật khẩu mặc định).

On kết thúc với lệnh trên, nó tạo ra một file keystore trong C:./Documents and Settings // keystore tôi sao chép tập tin .keystore này để tomcat/conf/myKeyStore.jks

Sau đó, tôi thêm sau đây để conf/server.xml:

<Connector protocol="org.apache.coyote.http11.Http11Protocol" 
    port="8443" minSpareThreads="5" 
    maxSpareThreads="75" 
    enableLookups="true" 
    disableUploadTimeout="true" 
    acceptCount="100" 
    maxThreads="200" debug="5" 
    scheme="https" secure="true" SSLEnabled="true" 
    keystoreFile="${catalina.home}/conf/myKeyStore.jks" 
    keystoreType="JKS" keystorePass="changeit" 
    truststoreFile="${catalina.home}/conf/cacerts" 
    truststoreType="JKS" truststorePass="changeit" 
    SSLVerifyClient="require" SSLEngine="on" SSLVerifyDepth="2" 
    sslProtocol="TLS" /> 

Và đó là nó !! Lần sau, tôi chạy tomcat liên kết http cũ của tôi không hoạt động. Sau đó, tôi đã thử thêm ngọt 's' vào http với một số cổng 8443 và lo! mọi thứ đã hoạt động trở lại.

Cảm ơn bạn đã không liên kết tuyệt vời !!

+1

Chỉ một điều cuối cùng, sau khi bật SSL cho máy chủ web của tôi, tôi có thể chắc chắn rằng bảo mật cho trang web của mình đã hoàn tất không? Hay tôi cũng cần làm gì khác? Ví dụ, tôi thực hiện rất nhiều cuộc gọi AJAX để nhận dữ liệu cho tất cả các trang của tôi. Và máy chủ trả về trả lời JSON cho mỗi cuộc gọi ajax. Ổn chứ? Tương tự như vậy trong quá trình đăng nhập, yêu cầu đăng AJAX được thực hiện bằng tên người dùng và mật khẩu ở định dạng JSON. Có an toàn không? –

+1

mọi thứ đang diễn ra qua tomcat đã bật ssl của bạn sẽ được mã hóa nếu url bắt đầu bằng "https". nó không quan trọng nếu ajax của nó hay không. có vẻ như bạn đã tạo chứng chỉ của riêng mình? nếu có, bạn có thể muốn mua chứng chỉ "thực" khi bạn đi sản xuất. không phải là nó sẽ an toàn hơn, chỉ vì trình duyệt người dùng của bạn sẽ cảnh báo họ chống lại các trang web sử dụng các chứng chỉ tự ký. – nont

Các vấn đề liên quan