2011-10-18 13 views
8

Soy un novato en el desarrollo web basado en Spring.¿Cómo desarrollar el sitio https con Spring 3.x?

Nuestro sitio está basado en Spring y actualmente está basado en http (por lo que es bastante inseguro). Dado que el sitio aún no está activo, estamos enviando inicio de sesión/contraseña también a través de una solicitud JSON normal al servidor y nos hemos centrado principalmente en JSP, diseño de interfaz de usuario, consultas SQL, etc.

Ahora, queremos cambiar al enfoque en seguridad y cambiar a https como primer paso.

He leído un no. de páginas web y algunos libros de primavera, pero ninguno parece proporcionar una respuesta clara sobre cómo se puede utilizar Spring para proporcionar seguridad https. ¿Puede alguien ayudarme a lograr lo anterior?

Háganme saber si mi pregunta no es clara. Trataré de agregar más detalles CUANTO ANTES.

Nuestra web.xml es el siguiente:

<?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> 

Sólo hay un controlador en este momento para el cual, primavera-servlet.xml es el siguiente:

<?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> 

Muchas gracias de antemano !

P.S. Si me puede recomendar un buen sitio/libro basado en ejemplos en la primavera, sería muy apreciado. La mayoría de los sitios/libros que he visto ponen mucho énfasis en la teoría, pero muy pocos ejemplos. Eso me ha dejado un poco confundido.

Respuesta

12

Como dice Dave, debe configurar su contenedor para que sirva SSL, y luego implementar su aplicación de primavera en ese contenedor. Aprender acerca de la configuración Tomcat for SSL.

Alternativamente, y de forma más flexible que pueda front your container using Apache y enable SSL there.

+0

Gracias por los enlaces nont. Los revisaré mañana desde que sea tarde para mí. Solo para volver a confirmar lo que se ha respondido hasta ahora, he entendido que: 1) Spring no tiene nada que ver con SSL. 2) SSL debe habilitarse en Tomcat. Confirme estos dos puntos. Muchas gracias de nuevo por sus respuestas chicos. Hubiera continuado excavando la primavera si ustedes no me hubieran ayudado. –

+0

Correcto, el resorte no maneja directamente HTTP o HTTPS. Se implementa en un contenedor como tomcat o jboss, y ese contenedor es el que trata con SSL o HTTP normal. Esas solicitudes se pasan a Spring para que las maneje. Entonces, sí, si desea habilitar SSL, debe hacerlo en su tomcat. Por cierto, favor de votar y/o marque esta respuesta como correcta si fue útil. ¡Esa es una gran razón por la cual a las personas les gusta responder preguntas aquí! – nont

+0

El enlace en la respuesta es para Tomcat 5.5, este es el enlace para Tomcat 7: http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html – maxivis

4

Spring no es 100% responsable de configurar SSL. Para eso, necesita configurar el contenedor (embarcadero, tomcat, etc.) para manejar SSL.

0

Configurar dos sitios web diferentes, una para HTTP y otro para https, el de http tendrá sólo una redirección al sitio https .

3

Gracias por toda la ayuda muchachos. Voy a reiterar lo que hice solo para mi propio registro.

En primer lugar, el enlace proporcionado por nont sobre 'Tomcat para SSL' fue realmente útil. leí todo sobre SSL y Tomcat allí y esto es lo que hice:

En el símbolo del sistema, escriba: herramienta de claves -genkey -alias Tomcat -keyalg RSA El comando anterior me hizo algunas preguntas simples y necesarios para un certificado. Utilicé la contraseña 'changeit' siempre que me pidieron (ya que esa es la contraseña predeterminada).

Al terminar con el comando anterior, se genera un archivo de almacén de claves en C:./Documents and Settings // almacén de claves He copiado este archivo .keystore a tomcat/conf/myKeyStore.jks

Luego añade el siguiente para 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" /> 

Y eso es todo! La próxima vez, ejecuté tomcat mi antiguo enlace http no funcionó. Luego traté de agregar sweet 's' a http con un número de puerto de 8443 y ¡listo! todo estaba funcionando nuevamente.

Gracias no por el maravilloso enlace !!

+1

Solo una última cosa, después de habilitar SSL para mi servidor web, ¿puedo estar seguro de que la seguridad de mi sitio está completa? ¿O tengo que hacer algo más también? Por ejemplo, realizo muchas llamadas AJAX para obtener datos para todas mis páginas. Y el servidor devuelve respuestas JSON a cada llamada ajax. ¿Eso esta bien? De forma similar, durante el inicio de sesión, se realiza una solicitud posterior a AJAX con nombre de usuario y contraseña en formato JSON. ¿Eso es seguro? –

+1

todo lo que esté pasando a través de su tomcat habilitado para ssl será encriptado si la url comienza con "https". no importa si es ajax o no. Parece que generó su propio certificado. si es así, es posible que desee comprar un certificado "real" cuando vaya a la producción. no es que sea más seguro, solo porque los navegadores de sus usuarios los advertirán contra los sitios web que utilizan certificados autofirmados. – nont

Cuestiones relacionadas