Définition du modèle ThingWorx dans Composer > Sécurité > Activation du protocole HSTS dans Apache Tomcat
Activation du protocole HSTS dans Apache Tomcat
Pour activer le protocole HSTS (HTTP Strict-Transport-Security) dans Apache Tomcat, PTC recommande d'utiliser les informations indiquées ci-dessous.
Introduction
Le protocole HSTS est un mécanisme qui permet aux sites Web de déclarer qu'ils ne sont accessibles que via une connexion sécurisée (HTTPS). Le mécanisme est spécifié par la norme RFC6797 et utilise l'en-tête de réponse Strict-Transport-Security pour informer les agents utilisateur de la règle de sécurité requise par le site Web.
Le protocole HSTS protège les utilisateurs des menaces suivantes :
L'utilisateur ajoute l'adresse http://monDomaine.com à ses signets ou la saisit manuellement, se rendant alors vulnérable à une attaque dite de l'homme du milieu.
Le protocole HSTS redirige automatiquement les requêtes HTTP vers HTTPS pour le domaine cible.
Une application Web qui est destinée à utiliser exclusivement le protocole HTTPS contient des liens HTTP ou diffuse du contenu via le protocole HTTP.
Le protocole HSTS redirige automatiquement les requêtes HTTP vers HTTPS pour le domaine cible.
Une attaque de l'homme du milieu tente d'intercepter le trafic d'un utilisateur à l'aide d'un certificat non valide, l'intercepteur espérant que l'utilisateur visé acceptera ce certificat.
Le protocole HSTS n'autorise pas l'utilisateur à passer outre le message de certificat non valide.
Le protocole supprime également les redirections HTTP vers HTTPS, réduisant ainsi les latences d'accès.
L'en-tête Strict-Transport-Security :
n'est reconnu que s'il est envoyé sur une connexion HTTPS. Les sites Web peuvent toujours autoriser les utilisateurs à interagir avec eux via un protocole HTTP pour assurer la compatibilité avec les agents utilisateurs n'utilisant pas le protocole HTTPS.
doit contenir une instruction max-age (temps maximal). La valeur spécifie le nombre de secondes pendant lesquelles l'agent utilisateur traite l'hôte comme un hôte HSTS fiable (une valeur de 0 indique qu'aucune action n'est effectuée).
peut contenir une instruction includeSubdomain qui, le cas échéant, signale à l'agent utilisateur que la règle HSTS s'applique à l'hôte HSTS ainsi qu'à n'importe quel sous-domaine du nom de domaine de l'hôte.
contient l'indicateur preload qui indique que le propriétaire du site autorise le préchargement du domaine. Lorsque le domaine est préchargé, le navigateur a déjà connaissance que l'hôte requiert l'utilisation de SSL/TLS. La fenêtre de redirection, via laquelle des attaques peuvent encore survenir, n'a donc pas besoin de s'afficher. Le propriétaire du site doit inscrire le domaine à la liste ( ici).
HSTS dans Tomcat
Apache Tomcat v8.0.23 intègre un nouveau filtre HttpHeaderSecurityFilter qui ajoute à la réponse les en-têtes HTTP Strict-Transport-Security, X-Frame-Options et X-Content-Type-Options . Le filtre peut être ajouté et configuré comme n'importe quel autre filtre via le fichier web.xml. La description du filtre est disponible ici et l'installation Tomcat fournit un exemple dans le fichier conf/web.xml. L'exemple ci-dessous est un extrait du fichier web.xml qui vous permet d'activer HSTS dans 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>
L'en-tête Strict-Transport-Security est renvoyé uniquement si l'agent utilisateur accède au site Web via le protocole HTTPS. Tomcat doit donc être configuré avec SSL/TLS (consultez cette page pour en savoir plus sur la configuration sécurisée de Tomcat). Cet en-tête n'étant renvoyé que dans le cas d'une connexion sécurisée, le propriétaire du site Web doit déterminer :
s'il accorde l'accès au site Web via des connexions non sécurisées à des fins de compatibilité descendante ;
s'il redirige les connexions non sécurisées vers des connexions sécurisées (recommandé).
Dans le deuxième cas, il est possible de configurer la redirection dans Tomcat en ajoutant une contrainte de sécurité dans le fichier web.xml et en ajoutant la redirection dans le fichier server.xml. Par exemple :
<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" />
Configuration de la redirection HTTP vers HTTPS (facultatif)
Pour forcer la redirection du trafic HTTP vers la connexion sécurisée, vérifiez que le connecteur HTTP défini dans le fichier server.xml contient l'attribut redirectPort défini de façon à pointer vers le port approprié. Si le connecteur n'est pas défini, ajoutez-le. Le code se présentera sous cette forme :
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Dans le fichier WEB-INF/web.xml, ajoutez la contrainte de sécurité :
<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>