Definizione del modello ThingWorx in Composer > Protezione > Abilitazione di HSTS in Apache Tomcat
Abilitazione di HSTS in Apache Tomcat
Per abilitare HTTP Strict-Transport-Security (HSTS) in Apache Tomcat, PTC consiglia di utilizzare le informazioni fornite di seguito.
Introduzione
HSTS HTTP è un meccanismo che consente ai siti Web di dichiarare che è possibile accedervi solo tramite connessione protetta (HTTPS). Il meccanismo è specificato dalla RFC6797 e utilizza l'intestazione di risposta Strict-Transport-Security per informare gli agenti utente sulla regola di protezione richiesta dal sito Web.
HSTS gestisce le minacce elencate di seguito.
L'utente inserisce un segnalibro o digita manualmente http://myDomain.com e diventa oggetto di attacchi di tipo man-in-the-middle.
HSTS reindirizza automaticamente le richieste HTTP ad HTTPS per il dominio di destinazione.
L'applicazione Web intesa come puro HTTPS contiene inavvertitamente collegamenti HTTP o pubblica contenuti su HTTP.
HSTS reindirizza automaticamente le richieste HTTP ad HTTPS per il dominio di destinazione.
Un autore di attacchi man-in-the-middle tenta di intercettare il traffico da un utente vittima utilizzando un certificato non valido e spera che l'utente accetti il certificato errato.
HSTS non consente a un utente di ignorare il messaggio di certificato non valido.
HSTS inoltre elimina i reindirizzamenti HTTP → HTTPS, riducendo le latenze di accesso.
L'intestazione Strict-Transport-Security presenta le caratteristiche indicate di seguito.
Viene riconosciuta solo se inviata tramite una connessione HTTPS. I siti Web possono comunque consentire agli utenti di interagire con il sito Web utilizzando HTTP per fornire la compatibilità con gli agenti utente non HTTPS.
Deve includere una direttiva sulla durata massima. Il valore specifica il numero di secondi in cui l'agente utente considera l'host come host HSTS noto (il valore 0 indica la cessazione di questo tipo di gestione host).
Può contenere una direttiva includeSubdomain che, se presente, segnala all'agente utente che la regola HSTS si applica all'HSTS Host e a qualsiasi sottodominio del nome di dominio dell'host.
Il flag di precaricamento che indica il consenso del proprietario del sito di far precaricare il proprio dominio. Con il dominio precaricato, il browser è già a conoscenza del fatto che l'host richiede l'uso di SSL/TLS, eliminando quindi la piccola finestra in cui possono ancora verificarsi attacchi: il reindirizzamento HTTP → HTTPS iniziale. Il proprietario del sito deve inviare il dominio all'elenco (qui).
HSTS in Tomcat
Apache Tomcat v8.0.23 fornisce il nuovo HttpHeaderSecurityFilter, che aggiunge le intestazioni HTTP Strict-Transport-Security, X-Frame-Options e X-Content-Type-Options alla risposta. Il filtro può essere aggiunto e configurato come qualsiasi altro filtro tramite il file web.xml. La descrizione del filtro è disponibile qui e l'installazione di Tomcat viene fornita con un esempio in conf/web.xml. L'esempio sotto è uno snippet del file web.xml che consente di abilitare HSTS in 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'intestazione Strict-Transport-Security viene restituita solo se l'agente utente accede al sito Web tramite HTTP, pertanto Tomcat deve essere configurato con SSL/TLS (vedere qui per l'installazione sicura di Tomcat). Poiché Strict-Transport-Security viene restituito solo quando la connessione è protetta, il proprietario del sito Web deve decidere quanto riportato di seguito.
Se nel sito Web vengono effettuate anche connessioni non protette per compatibilità con le versioni precedenti.
Se le connessioni non protette vengono reindirizzate a connessioni protette (preferibile).
Nel secondo caso, è possibile impostare il reindirizzamento in Tomcat aggiungendo un vincolo di protezione nel file web.xml e aggiungendo il reindirizzamento nel file server.xml. Ad esempio:
<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" />
Configurare il reindirizzamento da HTTP ad HTTPS (opzionale)
Per forzare il reindirizzamento del traffico HTTP alla connessione protetta, assicurarsi che nel connettore HTTP definito nel file server.xml l'attributo redirectPort sia impostato in modo che punti alla porta corretta. Se il connettore non è definito, aggiungerlo. Dovrebbe essere simile al seguente:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
In WEB-INF/web.xml aggiungere il vincolo di protezione:
<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>
È stato utile?