Web.xml e HTTPS: proteggere le vostre pagine JSP

Sono ai primi passi con JSP e sto creando una pagina di login per l’autenticazione, una di quelle banali con username e password che vanno verificate.

A parte impostare il form con method=”POST” mi sono chiesto come abilitare https per offrire una comunicasione sicura. Niente di più semplice, probabilmente nella vostra applicazione web vi ritrovate il web.xml già creato dal vostro IDE e che potete modificare.

Il file web.xml è chiamato deployment descriptor perchè esso descrive come la vostra applicazione composta da diversi file (o risorse) viene raggiunta dall’esterno, non solo in termini di URL ma anche in termini di sicurezza.

Come abbiamo capito il deployment descriptor è un file xml che è descritto da uno schema, l’ultima versione la 2.5 la trovate qui:

http://java.sun.com/xml/ns/javaee

cercate la voce Servlet Deployment Descriptor Schema.

Un semplice esempio lo trovate qui:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

Potete notare la versione 2.5, lo schema web-app_2_5.xsd, il parametro di timeout (0 significa no time out) e il welcome file che contiene il file index.jsp che deve essere il primo ad essere visitato.

Per quanto riguarda la sicurezza, se vogliamo aggiungere la protezione su tutte le risorse e fare in modo che altre entità, terze persone, non vedano il contenuto trasmesso (in altre parole SSL), dovremo aggiungere appena prima del tag </web-app> la seguente configurazione:


<security-constraint>
<web-resource-collection>
<web-resource-name>secure</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>

è molto importante sapere che:

  • potete specificare più di un security constraint, vedere qui un esempio; nell’esempio potete notare che si può scegliere se applicare la sicurezza al solo metodo POST o GET o a tutti i metodi specificati nel protocollo HTTP 1.1
  • l’url-pattern /* indica tutte le pagine che si trovano subito dopo la / nell’URL, potete anche dire /main/* tutte le pagine che si trovano dopo /main/ nella loro url
  • il livello CONFIDENTIAL dice che altre entità non possono vedere il messaggio trasmesso, il sotto livello è INTEGRAL per cui il messaggio non può essere modificato in transito e NONE quando non si vuole alcuna garanzia sul trasporto

Ora non dovete far altro che il deploy della stessa applicazione e andare sul link http della vostra applicazione e verrete rediretti su HTTPS (accettando il certificato).

La versione 2.5 è destinata ad essere seguita dalla 3.0 come descritto dalla JSR 315 che introdurrà diversi miglioramenti tra cui l’uso delle annotazioni nelle servlet rendendo vano l’uso del file web.xml, ma tutto cio’ si accadrà su J2EE 6 e quando i diversi servlet-container saranno pronti per interpretarli.

Advertisements

2 thoughts on “Web.xml e HTTPS: proteggere le vostre pagine JSP

  1. Ciao Emilio, ho seguito le tue indicazioni riguardanti il web.xml per attivare SSL ed ho letto pure la documentazione java. Il mio problema è come faccio a capire se SSL è attivo, o meglio, quando nel mio sito vado a finire in una jsp che ho inserito nel mio /ssl/*, non dovrei vedere nell’URL del browser la dicitura https://…ecc?

    • Ciao Luca,

      in teoria si, dovresti essere rediretto su https se provi ad usare http, ti confesso pero’ che al momento non tocco java.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s