Configurar SSL en Tomcat parte 2 - configurar el conector y la aplicación web

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>

1 comentarios :