Configuration de la communication sécurisée Back = Robiot - Juliette3529/Timber-Wall-E GitHub Wiki
Prérequis
- Avoir un JDK + JRE installés
- Avoir vérifié le bon fonctionnement de l'utilitaire
keytool
fourni à l'installation de Java - Avoir le projet Robiot qui tourne normalement en local
Sécurisation du lien entre le Back et le Robiot
Génération préalable des "key stores"
Pour le Back
- Générer un "keystore" avec un certificat initial :
- Lancer
keytool -genkeypair -alias spring -keyalg RSA -keysize 4096 -keystore keystore.jks -validity 3650
et renseigner un mot de passe. - La saisie interactive d'informations complémentaires n'est pas importante. À remplir (ou pas) comme vous souhaitez.
- Placer ce keystore dans le répertoire
resources
du projet.
- Lancer
Pour le Robiot
- Générer un "keystore" avec un certificat initial :
- Lancer
keytool -genkeypair -alias robiot_local -keyalg RSA -keysize 4096 -keystore keystore.jks -validity 3650
et renseigner un mot de passe.- Important : Il vous sera demandé "votre nom et votre prénom" ; il faut renseigner obligatoirement
127.0.0.1
, sans quoi le Back ne validera pas les connexion avec le Robiot par la suite (vérifier à la fin de la saisie interactive que CN=127.0.0.1).
- Important : Il vous sera demandé "votre nom et votre prénom" ; il faut renseigner obligatoirement
- Placer ce keystore dans un dossier
ssl
à la racine de tomcat.
- Lancer
Génération des "trust stores"
Pour le back
- Extraire le certificat de Robiot pour ensuite l'ajouter aux certificats de confiance du Back :
- Lancer
keytool -export -keystore keystore.jks -file robiot.cert -alias robiot_local
- Lancer
- Ajouter ce certificat aux certificats de confiance du Back :
- Ajouter le précédent certificat au trust store du Back avec
keytool -import -keystore truststore.jks -file robiot.cert -alias robiot_local
et choisir un mot de passe
- Ajouter le précédent certificat au trust store du Back avec
Pour le Robiot
- Extraire le certificat du Back pour ensuite l'ajouter aux certificats de confiance du Robiot :
- Lancer
keytool -export -keystore keystore.jks -file spring.cert -alias spring
- Lancer
- Ajouter ce certificat aux certificats de confiance du Robiot :
- Ajouter le précédent certificat au trust store du Robiot avec
keytool -import -keystore truststore.jks -file robiot.cert -alias robiot_local
et choisir un mot de passe
- Ajouter le précédent certificat au trust store du Robiot avec
Configuration des environnements
Configuration du Back
Il suffit de déclarer trois variables d'environnement :
- ROBIOT_API_URL : https://127.0.0.1:8443/ecotree/robiot-api/configurations
- SSL_KEYSTORE_PASSWORD : le mot de passe du key store du Back
- SSL_TRUSTSTORE_PASSWORD : le mot de passe du trust store du Back
Configuration du Robiot
- Dans le fichier
server.xml
du tomcat du Robiot, commenter le connecteur par défaut du port 8080 - Dans ce même fichier, ajouter un nouveau connecteur :
<Connector
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
port="8443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="/usr/local/tomcat/ssl/keystore.jks" keystorePass="${MOT DE PASSE KEY STORE}"
truststoreFile="/usr/local/tomcat/ssl/truststore.jks" truststorePass="${MOT DE PASSE TRUST STORE}"
keyAlias="robiot_local"
sslProtocol="TLS" clientAuth="true"
/>
-
Remplacer les sections indiquées par
${QUELQUE CHOSE}
par leur valeur.Cela devrait désactiver le port non sécurisé et en créer un sécurisé sur le port
8443
.
Notes
- Pour déployer le Robiot sur une machine distante, remplacer toutes les occurrences de
127.0.0.1
avec l'adresse IP (ou le nom de domaine) qui sera utilisée par le client pour les communications. Attention, si vous voulez utiliser à la fois l'adresse IP de votre machine et son nom de domaine, il faudra générer deux certificats dans le key store du Robiot, et ajouter les deux certificats au trust store du Back. - Il est possible de rediriger les requêtes non sécurisées au lieu de les bloquer en laissant le
Connector
original dans le fichierserver.xml
et d'ajouter ce qui suit au fichierweb.xml
de l'application :
<security-constraint>
<web-resource-collection>
<web-resource-name>Secured</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>