đŸ‘©â€đŸ« Tutoriels#

Déployer en production#

Avant de déployer un bot ou un programme en production, nous vous conseillons trÚs fortement de lire et de considérer les points suivants.

Danger

Gardez absolument les points suivants à l’esprit.

  • Le daemon et ses donnĂ©es sont extrĂȘmement sensibles. Ils ont accĂšs Ă  l’ensemble des messages, des piĂšces jointes et bien plus. Il vous appartient de faire le nĂ©cessaire pour que ces donnĂ©es soient correctement hĂ©bergĂ©es et protĂ©gĂ©es.

  • Le trafic entre le daemon et ses clients n’est pas chiffrĂ© par dĂ©faut (voir Chiffrement Tls). Il ne doit en aucun cas ĂȘtre exposĂ©.

  • Sans chiffrement TLS, les clĂ©s clientes ne servent qu’à compartimenter les appels API, et ne peuvent ĂȘtre utilisĂ©es Ă  des fins d’authentification.

Creer un bot keycloak#

Note

Cette section ne s’adresse qu’aux clients qui ont un plugin Keycloak deployĂ© 😬.

Si vous ne savez pas ce que c’est vous pouvez cliquer đŸ‘‰ïž ici đŸ‘ˆïž pour en apprendre plus sur cette fonctionalitĂ© premium.

Configurer un Bot Keycloak#

Configurer un Bot Keycloak vous permet de le gĂ©rer comme l’un de vos utilisateurs standard Keycloak. Il peut ĂȘtre ajoutĂ© ou supprimĂ© des groupes, et les utilisateurs peuvent interagir avec le bot via l’onglet « Annuaire » dans leur application. Cela facilite considĂ©rablement son intĂ©gration et son utilisation Ă  grande Ă©chelle.

Les étapes suivantes nécessitent un accÚs à la console de gestion Olvid de votre Keycloak.

Activer les bots dans Keycloak#

Astuce

Cette Ă©tape n’est nĂ©cessaire que pour votre premier bot.

Pour votre realm, si vous ne voyez pas le bouton « Bots » dans la barre latérale gauche, cliquez sur le bouton « ParamÚtres » de votre realm.

Bouton Bot

Bouton de paramĂštres du bot dans la console d'administration Keycloak

Bouton ParamĂštres du realm

Bouton de paramĂštres du realm dans la console d'administration Keycloak

Ensuite, dans les paramĂštres de votre realm, activez l’option « Activer les bots ».

Activer les bots

Section des paramĂštres personnalisables dans la page de paramĂštres de votre realm.

Créer un nouveau Bot Keycloak#

Accédez à la page « Bots » de votre Realm. Le bouton est situé dans le panneau latéral gauche.

Bouton Bots

Bouton de paramĂštres du bot dans la console d'administration Keycloak

Lorsque vous ĂȘtes sur la page de gestion des bots, cliquez sur le bouton « CrĂ©er un bot » en haut Ă  gauche.

Page de gestion des bots

Page de gestion des bots dans la console d'administration Keycloak.

Cela affichera un formulaire Ă  remplir avec le nom d’utilisateur et les dĂ©tails d’identitĂ© de votre nouveau bot.

Formulaire de création du bot

Formulaire pour créer un nouveau bot dans la console d'administration Keycloak.

Lorsque vous avez validé le formulaire, un lien de configuration (commençant par https://configuration.olvid.io/#) sera affiché. Enregistrez ce lien pour les étapes suivantes.

Astuce

Si vous avez perdu votre lien de configuration, vous pouvez le réinitialiser avec le bouton « Actualiser » dans la liste des bots.

CrĂ©er l’identitĂ© du bot#

Lorsque vous disposez du lien de configuration, vous devrez utiliser la CLI. Cliquez ici si vous ne vous souvenez pas comment l’utiliser.

Créer une nouvelle identité Keycloak

Démarrez la CLI et créez votre nouvelle identité en utilisant le lien de configuration. Elle générera automatiquement une clé client à passer à votre futur bot.

# create keycloak identity
0 > identity kc new https://configuration.olvid.io/#AAAAAAAAA.....
# client is automatically created
identity creation > Here is your client key to connect to daemon with this identity: 00000000-0000-0000-0000-000000000000

Note

Tous les utilisateurs Keycloak peuvent maintenant dĂ©couvrir et interagir avec votre bot via leur bouton « Annuaire » dans l’application Olvid.

Vous pouvez Ă©galement gĂ©rer votre bot Ă  partir de la console d’administration !

Configuration SSL#

Ajouté dans la version 1.4.1.

Configuration du Daemon#

Voici un exemple de configuration nginx pour mettre en place un daemon derriùre un reverse-proxy HTTP. Vous pouvez ensuite installer un certificat letsencrypt à l’aide de la commande certbot afin d’utiliser le protocole HTTPS.

server {
  server_name daemon.example.com;
  listen 80 http2;
  listen [::]:80 http2;

  access_log /var/log/nginx/bot-access.log;
  error_log /var/log/nginx/bot-error.log;

  location / {
    grpc_pass grpc://localhost:50050;
    grpc_pass_header daemon-client-key;
    grpc_pass_header daemon-identity-id;
  }
}

Fichier téléchargeable ici: grpc-reverse-proxy.conf

Important

Si le daemon utilise également du chiffrement TLS remplacer grpc:// par grpcs:// dans la directive gprc_pass.

Configuration du Client Python#

Pour se connecter Ă  un daemon en utilisant https, il suffit d’utiliser le prĂ©fixe https:// dans la valeur de la variable d’environnement OLVID_DAEMON_URL.

Configuration du Client Javascript#

Pour se connecter Ă  un daemon en utilisant https, il suffit d’utiliser le prĂ©fixe https:// dans la valeur de la variable d’environnement OLVID_DAEMON_URL.

Configuration TLS#

Ajouté dans la version 1.0.1.

Nativement gRPC prend en charge le chiffrement TLS. Nous pouvons distinguer deux modes :

  • Authentification serveur : Le daemon utilise son propre certificat auto-signĂ© et sa clĂ© privĂ©e associĂ©e. Les clients utiliseront ce certificat pour chiffrer les communications avec le daemon.

  • Authentification client : On crĂ©e notre propre AutoritĂ© de Certification (CA). On peut ainsi crĂ©er un certificat et une clĂ© privĂ©e pour le daemon et un par client. Ainsi, les clients peuvent chiffrer les communications avec le daemon, et le daemon peut vĂ©rifier que les clients ont Ă©tĂ© autorisĂ©s Ă  se connecter.

Authentification serveur#

Configuration du Daemon#

Dans un premier temps, on gĂ©nĂšre le certificat et la cle privĂ©e du serveur Ă  l’aide de la commande openssl.

Important

Remplacez localhost par le nom d’hĂŽte de votre daemon. Le nom d’hĂŽte est l’adresse IP ou le nom de domaine que les clients utiliseront pour Ă©tablir une connexion avec le daemon.

openssl req -x509 -newkey rsa:4096 -keyout server.key \
    -days 36500 -out server.pem -nodes -subj '/CN=localhost'

Si vous utilisez Docker, crĂ©ez un rĂ©pertoire credentials contenant le certificat et la clĂ© gĂ©nĂ©rĂ©s prĂ©cĂ©demment. Ajoutez ce rĂ©pertoire en tant que volume en lecture seule et utilisez une variable d’environnement pour activer l’authentification TLS simple dans le daemon.

On utilise les variables d’environnement suivantes pour configurer le daemon :

  • DAEMON_CERTIFICATE_FILE

  • DAEMON_KEY_FILE

Ce qui nous donne un fichier docker-compose.yaml similaire Ă  celui-ci.

daemon:
  image: olvid/bot-daemon::2.0.0
  environment:
    - OLVID_ADMIN_CLIENT_KEY_CLI=ToSet
    - DAEMON_CERTIFICATE_FILE=./credentials/server.pem
    - DAEMON_KEY_FILE=./credentials/server.key
  ports:
    - 50051:50051
  restart: unless-stopped
  volumes:
    - ./data:/daemon/data
    - ./backups:/daemon/backups
    - ./credentials:/daemon/credentials:ro

Configuration du Client Python#

Pour assurer le chiffrement des communications, votre bot a besoin du certificat du daemon.

On suppose que vous avez un répertoire credentials contenant le fichier server.pem généré précédemment. Il existe plusieurs moyens de faire en sorte que votre client utilise ce fichier pour authentifier le daemon et chiffrer le traffic.

Environnement

Configurez la variable d’environnement dans votre fichier docker-compose.yaml, dans votre commande docker ou votre environnement local.

OLVID_SERVER_CERTIFICATE_PATH=./credentials/server.pem

N’importe quel sous-classe de la classe OlvidClient chargera automatiquement la configuration TLS.

Fichiers

Au démarrage les sous-classes de la classe OlvidClient cherchent des noms de fichiers spécifiques pour charger les configurations TLS. Si un fichier .server.pem existe il sera automatiquement utilisé pour configurer le TLS.

ln -s ./credentials/server.pem .server.pem
Code

Vous pouvez également configurer manuellement les certificats et clés à utiliser dans votre code Python.

Dans ce cas, il faut créer un object GrpcSimpleTlsConfiguration et le passer en tant que tls_configuration à la creation du client.

import asyncio
from olvid import OlvidClient

async def main():
    client = OlvidClient(tls_configuration=OlvidClient.GrpcSimpleTlsConfiguration(
            server_certificate_path="./credentials/server.pem"
    ))
    print(await client.identity_get())

asyncio.set_event_loop(asyncio.get_event_loop())
asyncio.get_event_loop().run_until_complete(main())

Configuration du Client Javascript#

Actuellement notre implementation de Client JavaScript ne supporte pas nativement l’utilisation du protocole TLS.

Authentification client#

Génération des certificats#

Nous vous recommandons de crĂ©er un rĂ©pertoire credentials et d’exĂ©cuter les commandes suivantes depuis celui-ci.

Note

Pour générer le CA et le certificat serveur, vous aurez besoin de ces deux modÚles openssl. Téléchargez-les ou créez-les dans votre répertoire de travail actuel.

Génération de notre autorité de certification locale (CA)

# you can leave default values
openssl req -x509 -new -newkey rsa:2048 -nodes -keyout ca.key -out ca.pem \
  -config ca-openssl.cnf -days 36500 -extensions v3_req

Génération du certificat et la clé serveur.

Remplacez localhost par le nom d’hĂŽte de votre daemon. Le nom d’hĂŽte correspond Ă  l’adresse IP ou le nom de domaine que les clients utiliseront pour Ă©tablir une connexion avec le daemon.

# generate server private key
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out server.key
# generate server certificate
openssl req -new -key server.key -out server.csr -config server-openssl.cnf \
    -subj '/CN=localhost'
openssl x509 -req -CA ca.pem -CAkey ca.key -CAcreateserial -in server.csr \
  -out server.pem -extensions v3_req -extfile server-openssl.cnf -days 36500

GĂ©nĂ©ration d’un certificat et d’une clĂ© privĂ©e pour un client

# generate client private key
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out client.key

# generate client certificate request (leave default values)
openssl req -new -key client.key -out client.csr
openssl x509 -req -CA ca.pem -CAkey ca.key -CAcreateserial -in client.csr \
  -out client.pem -days 36500

Configuration du Daemon#

Le daemon aura besoin de son certificat, de sa clĂ© privĂ©e et du CA pour vĂ©rifier que les clients sont autorisĂ©s Ă  se connecter. Nous allons utiliser trois variables d’environnement pour spĂ©cifier les chemins des fichiers :

  • DAEMON_CERTIFICATE_FILE

  • DAEMON_KEY_FILE

  • DAEMON_ROOT_CERTIFICATE_FILE

Créez un répertoire credentials et copiez-y les fichiers générés précédemment.

Ce qui nous donne un fichier docker-compose.yaml similaire Ă  celui-ci.

daemon:
  image: olvid/bot-daemon:2.0.0
  environment:
    - OLVID_ADMIN_CLIENT_KEY_CLI=ToSet
    - DAEMON_CERTIFICATE_FILE=./credentials/server.pem
    - DAEMON_KEY_FILE=./credentials/server.key
    - DAEMON_ROOT_CERTIFICATE_FILE=./credentials/ca.pem
  ports:
    - 50051:50051
  restart: unless-stopped
  volumes:
    - ./data:/daemon/data
    - ./backups:/daemon/backups
    - ./credentials:/daemon/credentials:ro

Configuration du Client Python#

Pour configurer le client, vous pouvez utiliser l’une des mĂ©thodes suivantes :

Environnement

Configurez les variables d’environnement suivantes dans votre fichier docker-compose.yaml, dans votre commande docker ou votre environnement local.

OLVID_CLIENT_TLS_CERTIFICATE_FILE=./credentials/client.pem
OLVID_CLIENT_TLS_KEY_FILE=./credentials/client.key
OLVID_CLIENT_TLS_CA_FILE=./credentials/ca.pem

N’importe quel sous-classe de la classe OlvidClient chargera automatiquement la configuration TLS.

Fichiers

Au démarrage les sous-classes de la classe OlvidClient cherchent des noms de fichiers spécifiques pour charger les configurations TLS. Si elle trouve les trois fichiers suivants, ils seront automatiquement utilisé pour configurer le TLS.

  • .ca.pem

  • .client.pem

  • .client.key

ln -s ./credentials/ca.pem .ca.pem
ln -s ./credentials/client.pem .client.pem
ln -s ./credentials/client.key .client.key
Code

Vous pouvez Ă©galement configurer manuellement les certificats et clĂ©s Ă  utiliser dans votre code Python. Dans ce cas il faut crĂ©er un objet GrpcMutualAuthTlsConfiguration et le passer en tant que paramĂštre tls_configuration au constructeur d’une sous-classe OlvidClient.

import asyncio
from olvid import OlvidClient

async def main():
    client = OlvidClient(tls_configuration=OlvidClient.GrpcMutualAuthTlsConfiguration(
            root_certificate_path="/path/to/ca.pem",
            certificate_chain_path="/path/to/client.pem",
            private_key_path="/path/to/client.key"
    ))
    print(await client.identity_get())

asyncio.set_event_loop(asyncio.new_event_loop())
asyncio.get_event_loop().run_until_complete(main())

Configuration du Client Javascript#

Actuellement notre implementation de Client JavaScript ne supporte pas nativement l’utilisation du protocole TLS.

Sauvegardes#

Dans vos projets, le daemon est un Ă©lĂ©ment central, c’est lĂ  oĂč toutes les donnĂ©es sont stockĂ©es. En rĂ©alitĂ©, les donnĂ©es que vous manipulez (identitĂ©s, messages, 
) ne constituent qu’une petite partie des donnĂ©es gĂ©rĂ©es par le daemon. Ce sont ces donnĂ©e invisibles qui doivent ĂȘtre sauvegardĂ©es, car elles permettent un Ă©change sĂ©curisĂ© avec les contacts du bot.

Avertissements#

Danger

Veuillez examiner attentivement les recommandations et avertissements suivants avant de continuer.

  • Les sauvegardes contiennent des donnĂ©es sensibles Ă©quivalentes au rĂ©pertoire de donnĂ©es du daemon. Il est impĂ©ratif de les manipuler avec la mĂȘme rigueur et niveau de sĂ©curitĂ©.

  • Les sauvegardes mentionnĂ©es ici sont des sauvegardes Olvid, qui ne contiennent pas de messages ou de piĂšces jointes Ces sauvegardes vous permettent de restaurer votre carnet d’adresses, vos groupes et votre stockage, mais pas le contenu des discussions (messages et piĂšces jointes).

  • Les sauvegardes sont
 des sauvegardes. Vous devrez les conserver dans un endroit sĂ»r pour pouvoir les rĂ©utiliser si nĂ©cessaire.

  • La restauration d’une sauvegarde sur un autre daemon et l’exĂ©cution simultanĂ©e sur l’ancienne instance entraĂźnera un comportement imprĂ©visible.

Configuration des sauvegardes automatiques#

Le daemon crĂ©e automatiquement des sauvegardes chaque fois que cela est nĂ©cessaire (votre bot a ajoutĂ© un contact, rejoint ou quitte un groupe, 
). Ces sauvegardes sont stockĂ©es sur un serveur Olvid, et sont accessibles Ă  l’aide d’une clĂ©. Cette clĂ© est accessible Ă  l’aide de la commande cli backup key get.

La clé de sauvegarde est également stockée dans le dossier /daemon/backups. Vous pouvez accéder au fichier en montant le répertoire /daemon/backups en tant que volume. Voici un exemple de fichier docker-compose.yaml.

services:
  daemon:
    image: olvid/bot-daemon:2.0.0
    volumes:
      - ./data:/daemon/data
      - ./backups:/daemon/backups

Validation d’une sauvegarde#

Pour valider le fonctionnement des sauvegardes vous pouvez accĂ©der au contenu de votre sauvegarde Ă  l’aide de la CLI et de la commande backup get $BACKUP_KEY, en remplaçant $BACKUP_KEY par votre clĂ© de sauvegarde.

Restauration d’une sauvegarde#

Danger

La restauration d’une sauvegarde n’est pas une action triviale et ne doit ĂȘtre effectuĂ©e qu’en dernier recours. Vous perdrez tous vos messages et piĂšces jointes stockĂ©s dans le daemon au cours de ce processus. Seuls les Ă©lĂ©ments enregistrĂ©s Ă  l’aide de l’API de stockage, les clĂ©s client et les settings seront encore disponibles.

Une procédure de restauration de sauvegarde classique devrait se faire comme suit.

  • Valider que le daemon d’origine ne tourne plus

  • Dans la nouvelle installation exĂ©cuter la commande CLI suivante: backup restore daemon $BACKUP_KEY.

  • Valider la restauration des identitĂ©s Ă  l’aide de la commande cli: identity get

Commandes utiles#

Voici une liste non-exhaustive de commandes CLI en lien avec les sauvegardes.

  • backup key get: afficher la clĂ© de sauvegarde actuelle.

  • backup now: forcer le lancement d’une sauvegarde.

  • backup get $BACKUP_KEY: affiche le contenu d’une sauvegarde

  • backup restore daemon $BACKUP_KEY: restaurer la totalitĂ© d’une sauvegarde dans son Ă©tat le plus rĂ©cent.

  • backup restore admin $BACKUP_KEY: restaure les clĂ©s clients administrateur et le stockage associĂ©.

  • backup restore admin $BACKUP_KEY $SNAPHOST_ID: restaure une identitĂ© en particulier, Ă  un Ă©tat (snapshot) donnĂ© (contact, groupes, stockage, clĂ© clients, settings). Les identifiants des snapshots sont disponibles dans la description des sauvegardes.

Configuration JVM#

Ajouté dans la version 1.0.1.

Il est possible de passer des options arbitraires à la JVM qui fait tourner votre daemon. Pour cela, vous pouvez utiliser la variable d’environnement JAVA_FLAGS.

Configuration proxy#

Pour permettre au daemon d’utiliser un proxy HTTP, il faut passer des paramĂštres spĂ©cifiques a la JVM. (cf: Proxy Properties).

Voici un exemple de configuration possible pour utiliser un proxy fictif accessible en tant que proxy.example.com sur le port 8000, avec usage d’un login et mot de passe. Cette configuration est adaptable à vos besoins.

JAVA_FLAGS=-Dhttps.proxyHost=proxy.example.com -Dhttps.proxyPort=8000 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password