HTTP ou HTTPS ?

Il est recommandé d’utiliser le protocole HTTPS, pour des questions de sécurité, en particulier pour un accès ouvert de type internet, car les échanges d’informations entre les utilisateurs (les navigateurs) sont cryptés et ne sont donc pas interceptables simplement.

Les fonctionnalités qui récupèrent vos données de localisation (Widget Géolocalisation, Widget Calcul d’itinéraire, …) marchent uniquement en HTTPS.

Comment mettre du HTTPS sur son site ?

Il faut s’adresser à votre hébergeur/SI qui propose des certificats et des méthodes de mise en place qui peuvent varier d’un hébergeur à l’autre ou en fonction de l’architecture de votre serveur.

La mise en place d’un certificat SSL est décrite (en anglais) dans la documentation officielle de Tomcat.

Exemple de mise en place d’HTTPS pour du test

Cette méthode décrit comment mettre en place un certificat auto-signé avec OpenSSL.

[Avertissement] Avertissement

Un certificat auto-signé permet de tester toutes les fonctionnalités de Geoconcept Web, mais elle n'étant pas un certificat délivré par un organisme officiel, les utilisateurs verront à l’ouverture du portail des messages indiquant "Connexion non sécurisée", "Le certificat de sécurité de ce site web présente un problème.", "Votre connexion n’est pas privée", …

Pré-requis

  • Il est nécessaire que la JVM installée sur le serveur soit une version JDK et non JRE car OpenSSL nécessite l’utilisation de la librairie keytool disponible uniquement avec la version JDK.
  • Si la variable d’environnement JAVA_HOME n’existe pas, la créer en ligne de commande en la faisant pointer vers le dossier du JDK:
set JAVA_HOME=<Path ex: c:\Program Files\Java\jdk1.8.0_60>
  • Si OpenSSL n’est pas installé, récupérer les binaires sur l’une des pages Community du site OpenSSL et les déployer sur le serveur.

Création du certificat auto-signé

  • Création d’un dossier sur le serveur pour stocker le keystore. Nous prendrons comme exemple c:/keystore.
  • Depuis le dossier créer précédemment, en ligne de commande, lancer la ligne de création du certificat :
"%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA -keystore keystore.jks

Compléter les informations demandées et conserver le mot de passe PASSWORD renseigné pour l’utiliser dans l'étape suivante.

  • Arrêter Tomcat, puis modifier le fichier server.xml (dans le dossier \tomcat\conf\)

    • Décommenter le bloc
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" />
  • ajouter à l’intérieur de ce bloc
keystoreFile="c:\keystore\keystore.jks" keystorePass="PASSWORD"
  • soit
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" keystoreFile="c:\keystore\keystore.jks"
           keystorePass="PASSWORD"/>

Le certificat est déployé il est désormais possible d’accéder à votre portail :

Forcer toutes les applications à utiliser HTTPS

[Avertissement] Avertissement

Attention l’ajout de ces lignes oblige toutes les applications déployées dans Tomcat à utiliser le protocole HTTPS, vérifier avant de faire la manipulation qu’elles sont bien compatibles avec ce protocole.

  • Arrêter Tomcat, puis éditer le fichier web.xml (dans le dossier \tomcat\conf\) en ajoutant dans le bloc <web-app> :
<security-constraint>
    <web-resource-collection>
    <web-resource-name>Entire Application</web-resource-name>
    <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
    <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

Toute requête HTTP est reroutée en HTTPS