Sécurité

Ce document fournit des informations sur les mots de passe, l’authentification, la configuration SSL, la séparation de réseaux, les communications chiffrées, les en-têtes HTTP et le protocole TLS, dans le contexte du client de l’API WhatsApp Business.

Mots de passe et authentification

Veuillez consulter la documentation sur la connexion et l’authentification pour en savoir plus sur les tokens d’authentification et les recommandations concernant les mots de passe.

Configuration SSL

L’accès au client de l’API WhatsApp Business requiert HTTPS.

Lors de sa création, le client de l’API WhatsApp Business génère un certificat auto-signé par défaut. Le certificat d’autorité de certification (AC) utilisé pour générer le certificat auto-signé peut être configuré de manière à vérifier le point de terminaison du client de l’API WhatsApp Business et à éviter un avertissement de sécurité relatif au certificat. Vous pouvez aussi importer le certificat de l’AC, au lieu du certificat auto-signé. Consultez la documentation sur les certificats d’AC pour plus d’informations.

Comme Webhooks exige également HTTPS pour les rappels, vous pouvez utiliser vos propres certificats d’AC afin d’éviter que l’application déclenche des erreurs SSL lorsqu’elle envoie des requêtes POST au Webhook configuré. Consultez la documentation sur le certificat d’AC Webhooks pour plus d’informations.

Séparation de réseaux

Nous vous recommandons d’héberger les nœuds Webapp et Coreapp sur des réseaux distincts et de ne les exposer qu’aux services nécessaires.

Le nœud Webapp doit exposer les points de terminaison de l’API et de l’administration web uniquement aux réseaux sur lesquels les clients de l’API WhatsApp Business et les postes de travail du personnel de gestion sont hébergés.

Les nœuds Coreapp ne doivent exposer que le service de communication aux nœuds Webapp, et ce dans une configuration Multiconnect, et seul le service de contrôle doit être exposé aux nœuds Coreapp.

Communications chiffrées

Communication entre Webapp et Coreapp

Nous vous recommandons de définir la variable d’environnement WA_SECRET dans les conteneurs Coreapp et Webapp pour garantir le chiffrement de leurs communications.

Remarque : les horloges des hôtes Coreapp et Webapp doivent être synchronisées pour que le chiffrement fonctionne parfaitement. En cas d’écart entre les horloges, la protection anti-rejeu (à savoir une vérification de l’horodatage avec un délai de grâce de 10 secondes) peut entraîner un échec de la communication.

Communication avec la base de données

Vous pouvez configurer les paramètres SSL utilisés pour chiffrer la connexion à la base de données et protéger ainsi les données en transit.

Auparavant, seule la connexion du Coreapp à la base de données pouvait être chiffrée avec la variable d’environnement WA_DB_CONNECTION_OPTION, car il était traditionnellement le seul à avoir accès à la base de données. Cependant, le conteneur Webapp accède lui aussi à la base de données et il est important de chiffrer sa connexion à la base de données. Pour ce faire, la configuration SSL est modifiée de manière à la rendre neutre afin que tous les conteneurs puissent y accéder. Le chiffrement peut être configuré avec les variables d’environnement suivantes :

  • WA_DB_SSL_KEY
  • WA_DB_SSL_CERT
  • WA_DB_SSL_CA
  • WA_DB_SSL_VERIFY

WA_DB_SSL_VERIFY peut être configurée pour vérifier l’identité du serveur. Cela est obligatoire dans certaines configurations de développement internes et il est vivement recommandé de ne pas désactiver cette vérification. Si ce paramètre n’est pas défini, la vérification est activée par défaut. Pour désactiver la vérification, utilisez :

WA_DB_SSL_VERIFY=0

Remarque :WA_DB_SSL_VERIFY est applicable uniquement au Webapp.

Par souci de rétrocompatibilité, WA_DB_CONNECTION_OPTION continuera d’être pris en charge en mode obsolète et utilisé pour chiffrer la connexion de Coreapp à la base de données. Nous vous recommandons vivement d’adopter ces nouveaux paramètres.

Tous les fichiers configurés dans les variables d’environnement Key, Cert et CA doivent être accessibles à l’intérieur du conteneur. Pour cela, vous pouvez créer un dossier certs dans le volume des données avec les autorisations appropriées. Le volume des données est généralement monté sous /usr/local/waent/data et le dossier des certificats serait alors accessible sous /usr/local/waent/data/certs dans le conteneur.

Serveur web (TLS)

Le protocole et les chiffrements TLS ont été configurés selon les configurations recommandées par Mozilla. Le Webapp prend en charge trois profils : MODERN (par défaut), INTERMEDIATE et OLD.

Nous vous recommandons de conserver la configuration par défaut pour plus de sécurité. Cependant, vous pouvez choisir un profil moins sécurisé avec la variable d’environnement WA_WEB_SECURITY_LEVEL.

En-têtes HTTP

Les en-têtes HTTP suivants sont pris en charge pour l’administration web, mais pas pour les points de terminaison de l’API, et ils sont soumis au navigateur utilisé.

NomDescription

X-Content-Security-policy

Définit la règle qui autorise uniquement les scripts provenant du même domaine à s’exécuter sur l’administration web.

X-Frame-Options

Empêche n’importe quel domaine d’inclure la page d’administration web en tant qu’iframe.

X-XSS

Assure la protection de la page d’administration web contre les attaques de scripts intersites en épurant les entrées en cas d’attaque.

X-Content-Type-Options

Garantit que le type de contenu reçu par le serveur est le même que celui demandé par le serveur.

Strict-Transport-Security

Garantit que l’administration web n’est accessible que par HTTPS.