Para configurar SSL en Tomcat en la entrada anterior veíamos como preparar el keystore e instalar un certificado firmado por una CA. Ahora veremos cómo configurar el conector (por defecto AJP) y la webapp correspondiente para usar SSL.
Empezaremos editando el fichero de configuración del servidor "$CATALINA_BASE/conf/server.xml" y añadiremos un conector (o descomentaremos los existentes):
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="443" server="prueba"/>
...
<Connector
SSLEnabled="true" acceptCount="100" clientAuth="false"
disableUploadTimeout="true" enableLookups="false" maxThreads="25"
port="443" keystoreFile="mi_keystore.jks" keystorePass="mi_contraseña"
protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
secure="true" sslProtocol="TLS" />
Fijaros que hemos especificado la ruta del keystore creado anteriormente y la contraseña correspondiente. Al reiniciar Tomcat el servidor debería ser ya accesible mediante https://servidor/prueba.
Después forzaremos que la aplicación web funcione con SSL.
Para ello añadiremos el siguiente código en el fichero $CATALINA_HOME/webapps/prueba/WEB-INF/web.xml justo antes del cierre del tag </web-app>:
<!-- redireccion a https -->
<security-constraint>
<web-resource-collection>
<web-resource-name>Automatic SSL Forward</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>
CONFIDENTIAL
</transport-guarantee>
</user-data-constraint>
</security-constraint>
</web-app>
Evidentemente podemos modificar el patrón de URLs para especificar qué páginas queremos proteger y cuáles no.
Por ejemplo, si queremos que sólo se use SSL cuando se visitan las páginas del path /usuarios:
<security-constraint>
<web-resource-collection>
<web-resource-name>Members Folder</web-resource-name>
<url-pattern>/usuarios/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
O si queremos que se use HTTPS para todo excepto para /img (favicon) y /css:
<security-constraint>
<web-resource-collection>
<web-resource-name>HTTPSOnly</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>HTTPSOrHTTP</web-resource-name>
<url-pattern>*.ico</url-pattern>
<url-pattern>/img/*</url-pattern>
<url-pattern>/css/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
Empezaremos editando el fichero de configuración del servidor "$CATALINA_BASE/conf/server.xml" y añadiremos un conector (o descomentaremos los existentes):
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="443" server="prueba"/>
...
<Connector
SSLEnabled="true" acceptCount="100" clientAuth="false"
disableUploadTimeout="true" enableLookups="false" maxThreads="25"
port="443" keystoreFile="mi_keystore.jks" keystorePass="mi_contraseña"
protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
secure="true" sslProtocol="TLS" />
Fijaros que hemos especificado la ruta del keystore creado anteriormente y la contraseña correspondiente. Al reiniciar Tomcat el servidor debería ser ya accesible mediante https://servidor/prueba.
Después forzaremos que la aplicación web funcione con SSL.
Para ello añadiremos el siguiente código en el fichero $CATALINA_HOME/webapps/prueba/WEB-INF/web.xml justo antes del cierre del tag </web-app>:
<!-- redireccion a https -->
<security-constraint>
<web-resource-collection>
<web-resource-name>Automatic SSL Forward</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>
CONFIDENTIAL
</transport-guarantee>
</user-data-constraint>
</security-constraint>
</web-app>
Evidentemente podemos modificar el patrón de URLs para especificar qué páginas queremos proteger y cuáles no.
Por ejemplo, si queremos que sólo se use SSL cuando se visitan las páginas del path /usuarios:
<security-constraint>
<web-resource-collection>
<web-resource-name>Members Folder</web-resource-name>
<url-pattern>/usuarios/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
O si queremos que se use HTTPS para todo excepto para /img (favicon) y /css:
<security-constraint>
<web-resource-collection>
<web-resource-name>HTTPSOnly</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>HTTPSOrHTTP</web-resource-name>
<url-pattern>*.ico</url-pattern>
<url-pattern>/img/*</url-pattern>
<url-pattern>/css/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
Muy útil tu blog, nos sirve de gran ayuda. Saludos
ResponderEliminar