Tomcat + Apache + SSL

Voici un exemple de configuration permettant d'avoir un frontend Apache ou Nginx, un backend Tomcat (ou autre) et le tout avec une connexion sécurisée SSL.

Un frontend Apache ou Nginx en mode proxy avec un backend Tomcat, rien de plus commun, une simple configuration comme celle-ci suffit à obtenir le résultat souhaité dans la conf virtualhost d'Apache ou de Nginx.

Pour Apache:

<VirtualHost *:80>
ServerName mondomaine.fr
...
ProxyPass           /         http://localhost:8080
ProxyPassReverse    /         http://localhost:8080
...
</VirtualHost>

Pour Nginx:

server {
    server_name mondomaine.fr;
    listen 80;    
    location / {
        include proxy_params;
        proxy_pass http://localhost:8080;
    }
}

Pour la connexion SSL, une modification doit être faite dans la configuration server.xml du Tomcat.

Il est nécessaire de définir un nouveau connector pour la connexion sécurisée.

<Connector connectionTimeout="20000" port="6443" protocol="HTTP/1.1" scheme="https" secure="true" proxyPort="443" proxyName="mondomaine.fr" />

Il faut définir un port d'écoute (6443), le "scheme" https, la valeur true à la propriété "secure", le port du serveur proxy (dans la conf apache / nginx) et enfin le nom du domaine associé (dans la conf apache / nginx).

Pour terminer, la conf à faire dans le virtualhost apache / nginx

Pour apache:

<VirtualHost *:443>
    ServerName mondomaine.fr
    ...
    SSLEngine on
    SSLCertificateFile "C:\Certbot\live\mondomaine.fr\fullchain.pem"
    SSLCertificateKeyFile "C:\Certbot\live\mondomaine.fr\privkey.pem"
    ...
    ProxyPass           /         http://localhost:6443
    ProxyPassReverse    /        http://localhost:6443
    ...
</VirtualHost>

Pour nginx:

server {
        server_name mondomaine.fr;
        location / {
                include proxy_params;
                proxy_pass http://localhost:6443;
        }
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/mondomaine.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mondomaine.fr/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

Attention, la configuration du serveur proxy s'effectue bien en HTTP, mais sur le port 6443.

Seule la connexion au frontend est sécurisée (avec le monde extérieur).
Celle entre le frontend et le backend n'a pas besoin de l'être puisqu'ils sont sur le même serveur.