Come attivare HTTPS su Tomcat

In questa guida vediamo come configurare il supporto HTTPS, tramite Transport Layer Security (TLS), su Tomcat.
Tomcat sfrutta le tecnologie Java sottostanti per fornire il supporto alle connessioni sicure e per questo motivo la configurazione di TLS su Tomcat non è così immediata come per il classico Apache HTTPD.

Questo articolo fa riferimento alla versione Tomcat 9, per dettagli sulla configurazione potete leggere questi due articoli: Installare Tomcat su Ubuntu 20.04 Focal Fossa e installare Tomcat su CentOS 8.

Nel resto dell’articolo supporremo che il nostro server Tomcat abbia come dominio tomcat.example.com, per cui nei successivi comandi dovrete sostituire tomcat.example.com con il nome del vostro dominio.

Abbiamo usato Letsencrypt per generare un certificato TLS gratuito da usare per il nostro Tomcat.
Per installare Letsencrypt su Ubuntu usare il comando:

sudo apt install letsencrypt

Per generare il certificato, dopo aver installato Letsencrypt:

certbot certonly --standalone -d tomcat.example.com

Attendiamo la fine del comando precedente e convertiamo il certificato e la chiave in un formato p12 utilizzabile per il java keytool. Il tipo di file p12 con certificato full chain e chiave, ci consente di fare un singolo inserimento del keystore. L’alternativa è quella di aggregare chiave e certificato del dominio in un file da aggiungere al keystore. Poi sia il certificato intermedio sia quello root vanno anche essi importati in 2 passaggi nel keystore; invece con il file p12, l’importazione è una sola.

Detto questo, aggreghiamo i vari componenti per creare un file p12:

openssl pkcs12 -export -out /tmp/tomcat.example.com_fullchain_and_key.p12 \
-in /etc/letsencrypt/live/tomcat.example.com/fullchain.pem \
-inkey /etc/letsencrypt/live/tomcat.example.com/privkey.pem \
-name tomcat

A questo punto ci viene chiesta una password, scegliamo per esempio 58dssqPo2Muw
La password ci servirà successivamente.
Ora lanciamo il seguente comando, avendo cura di sostituire 58dssqPo2Muw con la password da voi scelta e tomcat.example.com con il vostro dominio.

keytool -importkeystore \
-deststorepass 58dssqPo2Muw -destkeypass 58dssqPo2Muw \
-destkeystore /tmp/tomcat.example.com.jks \
-srckeystore /tmp/tomcat.example.com_fullchain_and_key.p12 \
-srcstoretype PKCS12 -srcstorepass 58dssqPo2Muw \
-alias tomcat

Copiamo il file /tmp/tomcat.example.com.jks in una nuova cartella chiamata tls che si troverà in /usr/local/tomcat9/

mkdir /usr/local/tomcat9/tls/
cp /tmp/tomcat.example.com.jks /usr/local/tomcat9/tls/

Aprite il file di configurazione di Tomcat che si chiama server.xml e si trova nella cartella conf dell’installazione di Tomcat. Se avete seguito i tutorial precedenti si dovrebbe trovare in /usr/local/tomcat9/conf/server.xml

nano /usr/local/tomcat9/conf/server.xml

Inserite il seguente testo avendo cura di sostituire la password e il dominio.

<Connector
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" maxThreads="200"
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="tls/tomcat.example.com.jks"
           keystorePass="58dssqPo2Muw"
           clientAuth="false" sslProtocol="TLS"/>

Ora riavviate Tomcat con il comando

systemctl restart tomcat9

Ora se andrete sull’indirizzo
https://tomcat.example.com:8443 dovrà compare la solita pagina di inizio di Tomcat.

Se avete problemi vi consiglio di consultare il file /usr/local/tomcat9/logs/catalina.out per capire quale è l’errore che ha impedito l’attivazione corretta di https su Tomcat.

Per maggiori dettagli, la guida di configurazione è indicata: http://tomcat.apache.org/tomcat-9.0-doc/ssl-howto.html

Potrebbero interessarti anche...

4 risposte

  1. Massimiliano ha detto:

    Ciao, innanzitutto grazie per la guida.
    Ho seguito le tue indicazioni ma precedentemente ho usato questa guida per installare Tomcat ( https://linuxize.com/post/how-to-install-tomcat-9-on-ubuntu-20-04/ ). Alla fine rispetto a quello che fai tu cambia solo il path in cui c’è tomcat che è `/opt/tomcat/apache-tomcat-9.0.37/`. In questo path ho messo la cartella tls. Per il resto ho seguito passo passo ciò che hai scritto ma alla fine mi sono ritrovato con l’errore che segue: This site can’t provide a secure connection

    Come potrei risolvere?

  2. valent ha detto:

    Per esperienza, la parte più problematica è quella riguardante la scelta del protocollo. Es. protocol=”org.apache.coyote.http11.Http11NioProtocol” oppure altre opzioni.
    Non tutte le installazioni dispongono del Http11NioProtocol, o delle componenti necessarie per abilitarlo. Quale è il blocco di codice ha usato per la sezione Connector del file server.xml?

  3. Marco ha detto:

    ciao, al posto di ‘tomcat.example.com’ cosa ci va messo?

  4. valent ha detto:

    Il nome del tuo dominio.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *