đ©âđ« 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 ParamĂštres du realm
Ensuite, dans les paramĂštres de votre realm, activez lâoption « Activer les bots ».
Activer les bots
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
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
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
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_FILEDAEMON_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_FILEDAEMON_KEY_FILEDAEMON_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 sauvegardebackup 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