Definición del modelo de ThingWorx en Composer > Seguridad > Activación de HSTS en Apache Tomcat
Activación de HSTS en Apache Tomcat
Para activar HTTP Strict-Transport-Security (HSTS) en Apache Tomcat, PTC recomienda utilizar la información que se proporciona a continuación.
Introducción
HTTP HSTS es un mecanismo que permite a los sitios Web declarar que solo se puede acceder a ellos a través de una conexión segura (HTTPS). El mecanismo se especifica en RFC6797 y utiliza la cabecera de respuesta Strict-Transport-Security para informar a los agentes de usuario (UA) sobre la directiva segura que el sitio Web necesita.
HSTS aborda las siguientes amenazas:
El usuario añade http://myDomain.com como marcador o lo escribe manualmente y está sujeto a un atacante de tipo "Man-in-the-middle".
HSTS redirige automáticamente las solicitudes HTTP a HTTPS para el dominio de destino.
En la aplicación Web que debe ser exclusivamente HTTPS se incluyen inadvertidamente vínculos HTTP o se proporciona contenido a través de HTTP.
HSTS redirige automáticamente las solicitudes HTTP a HTTPS para el dominio de destino.
Un atacante de tipo "Man-in-the-middle" intenta interceptar el tráfico de un usuario víctima mediante un certificado no válido y espera que el usuario acepte el certificado incorrecto.
HSTS no permite a un usuario sustituir el mensaje del certificado no válido.
HSTS también elimina las redirecciones HTTPS → HTTP, lo que reduce las latencias de acceso.
Cabecera Strict-Transport-Security:
Solo se reconoce cuando se envía a través de una conexión HTTPS. Los sitios Web pueden seguir permitiendo que los usuarios interactúen con estos mediante HTTP para proporcionar compatibilidad con los agentes de usuario que no son HTTPS.
Se debe incluir una directiva de duración máxima. El valor especifica el número de segundos que el agente de usuario trata al host como un host de HSTS conocido (un valor de 0 significa que se cesa el tratamiento).
Puede incluir una directiva includeSubdomain que, si está presente, indica al agente de usuario que la directiva HSTS se aplica al host de HSTS y a cualquier subdominio del nombre de dominio del host.
El señalizador de precarga indica el consentimiento del propietario del sitio para que se cargue su dominio previamente. Con el dominio precargado, el explorador ya sabe que el host requiere el uso de SSL/TLS, por lo que se elimina la pequeña ventana donde aún se pueden producir ataques: el redireccionamiento HTTP → HTTPS inicial. El propietario del sitio debe enviar el dominio a la lista ( aquí).
HSTS en Tomcat
En Apache Tomcat v8.0.23 se proporciona la nueva API HttpHeaderSecurityFilter, que añade las cabeceras HTTP Strict-Transport-Security, X-Frame-Options y X-Content-Type-Options a la respuesta. El filtro se puede añadir y configurar como cualquier otro filtro a través del fichero web.xml. La descripción del filtro se puede encontrar aquí y en la instalación de Tomcat se incluye un ejemplo en el fichero conf/web.xml. El siguiente ejemplo es un fragmento del fichero web.xml que permite activar HSTS en Tomcat:
<!-- ================== Built In Filter Definitions ===================== -->

<!-- A filter that sets various security related HTTP Response headers. -->
<!-- This filter supports the following initialization parameters -->
<!-- (default values are in square brackets): -->
<!-- -->
<!-- hstsEnabled Should the HTTP Strict Transport Security -->
<!-- (HSTS) header be added to the response? See -->
<!-- RFC 6797 for more information on HSTS. [true] -->
<!-- -->
<!-- hstsMaxAgeSeconds The max age value that should be used in the -->
<!-- HSTS header. Negative values will be treated -->
<!-- as zero. [0] -->
<!-- -->
<!-- hstsIncludeSubDomains -->
<!-- Should the includeSubDomains parameter be -->
<!-- included in the HSTS header. -->
<!-- -->
<!-- antiClickJackingEnabled -->
<!-- Should the anti click-jacking header -->
<!-- X-Frame-Options be added to every response? -->
<!-- [true] -->
<!-- -->
<!-- antiClickJackingOption -->
<!-- What value should be used for the header. Must -->
<!-- be one of DENY, SAMEORIGIN, ALLOW-FROM -->
<!-- (case-insensitive). [DENY] -->
<!-- -->
<!-- antiClickJackingUri IF ALLOW-FROM is used, what URI should be -->
<!-- allowed? [] -->
<!-- -->
<!-- blockContentTypeSniffingEnabled -->
<!-- Should the header that blocks content type -->
<!-- sniffing be added to every response? [true] -->
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>hstsEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>hstsMaxAgeSeconds</param-name>
<param-value>31536000</param-value>
</init-param>
<init-param>
<param-name>hstsIncludeSubDomains</param-name>
<param-value>true</param-value>
</init-param>
</filter>

<!-- The mapping for the HTTP header security Filter -->
<filter-mapping>
<filter-name>httpHeaderSecurity</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
La cabecera Strict-Transport-Security se devuelve solo si el agente de usuario tiene acceso al sitio Web a través de HTTPS, por lo que Tomcat debe estar configurado con SSL/TLS (consulte aquí para obtener información sobre la configuración segura de Tomcat). Puesto que Strict-Transport-Security solo se devuelve cuando la conexión es segura, el propietario del sitio Web debe decidir lo siguiente:
Si también presta servicio al sitio Web a través de conexiones no seguras para compatibilidad con versiones anteriores.
Si redirige conexiones no seguras a conexiones seguras (deseable).
En el segundo caso, es posible configurar la redirección en Tomcat añadiendo una restricción de seguridad en web.xml y añadiendo la redirección en server.xml. Por ejemplo:
<security-constraint>
<web-resource-collection>
<web-resource-name>twx-portal</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Configuración de redirecciones HTTP a HTTPS (opcional)
Para forzar el redireccionamiento del tráfico HTTP a la conexión segura, hay que asegurarse de que el conector HTTP que se define en el fichero server.xml tenga el atributo redirectPort definido para señalar al puerto correcto. Si no se ha definido el conector, añádalo. Debería tener un aspecto similar al siguiente:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
En el fichero WEB-INF/web.xml, añada la restricción de seguridad:
<security-constraint>
<web-resource-collection>
<web-resource-name>twx-portal</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>