Aller au contenu

Sécurité du connecteur

En bref

Le connecteur héberge des données comptables : il s'expose en HTTPS, authentifie chaque appel par un jeton, et conserve ses secrets dans un fichier chiffré lié à la machine. Cette page décrit l'état réel des protections livrées et les réglages qui restent à votre main.

HTTPS et certificat

Le connecteur écoute en HTTPS par défaut (port 443). Le certificat se paramètre dans l'écran Serveur Web :

  • Certificat local .pfx — l'outil sait en générer un auto-signé, avec un mot de passe et une durée de validité en années. Il est écrit dans le dossier de configuration du connecteur.
  • Let's Encrypt — mode alternatif, sans certificat local à gérer.

Un certificat auto-signé chiffre la liaison mais n'est reconnu par aucun client sans installation préalable de l'autorité : réservez-le aux usages internes, et utilisez un certificat reconnu pour une exposition sur Internet.

L'option Rediriger automatiquement HTTP vers HTTPS n'a d'effet que si le port HTTP est ouvert.

Certificat manquant

Si vous activez HTTPS sans que le fichier .pfx existe, l'outil de configuration vous en avertit au moment d'appliquer la configuration. Le service ne pourra pas démarrer son écoute HTTPS tant que le certificat est absent.

Authentification et jetons

Mécanisme État livré
Mots de passe des utilisateurs Hachés (BCrypt), jamais stockés en clair
Politique de mot de passe 10 à 72 caractères, au moins une lettre et un chiffre
Jeton d'accès JWT signé avec une clé propre à l'installation, générée aléatoirement puis conservée chiffrée
Durée du jeton d'accès 20 minutes
Jeton de rafraîchissement Valeur aléatoire, 7 jours, déposée dans un cookie HttpOnly, Secure, SameSite=Strict
Stockage du jeton de rafraîchissement Seule une empreinte est conservée en base ; la valeur en clair ne vit que côté client
Réponse d'authentification Indifférenciée : elle ne révèle pas si un compte existe
Limitation de débit 30 requêtes par minute et par adresse IP sur les routes d'authentification

La clé de signature étant propre à chaque installation, un jeton émis par un connecteur n'est valable sur aucun autre.

Pas de politique CORS, volontairement

Aucune politique de partage entre origines n'est déclarée. L'API vise des clients natifs, pas des pages web tierces : sans en-têtes CORS, les navigateurs refusent d'eux-mêmes les appels depuis un autre domaine. C'est le comportement le plus sûr par défaut.

Hôtes autorisés

Le champ Hôtes autorisés de l'écran Serveur Web liste les noms d'hôte acceptés dans l'en-tête Host des requêtes, séparés par des points-virgules. Il protège contre l'usurpation d'hôte.

La valeur par défaut est * (tous les hôtes). Restreignez-la dès que vous connaissez le nom par lequel vos clients joignent le connecteur, par exemple sensaas.monentreprise.fr;localhost.

Proxys de confiance

Par défaut, le connecteur ignore les en-têtes X-Forwarded-* : n'importe quel client peut les forger, et s'y fier fausserait l'adresse réelle du client et la limitation de débit.

Si un proxy inverse est placé devant le connecteur, déclarez-le dans le champ Proxys de confiance (écran Serveur Web), une entrée par ligne, sous forme d'adresse IP ou de réseau CIDR :

192.0.2.10
192.0.2.0/24

Conséquences lorsque ce champ est renseigné :

  • l'adresse réelle du client transmise par ces proxys fait foi, notamment pour la limitation de débit ;
  • le schéma d'origine transmis par le proxy est honoré (redirection HTTPS et cookies corrects derrière un proxy TLS) ;
  • un seul saut de proxy est honoré ;
  • une entrée mal formée est refusée à la saisie par l'outil de configuration.

Laissez ce champ vide en exposition directe ou via EasyConnect. Le paramètre n'est pris en compte qu'au redémarrage du service.

Le fichier de configuration chiffré

Tous les secrets du connecteur (identifiants SQL, mot de passe du certificat, clé de signature des jetons, mot de passe administrateur de l'outil) résident dans un seul fichier :

C:\ProgramData\Sage\SenSaaS\SenSaaS.config
  • Il est chiffré avec une clé aléatoire propre à l'installation, elle-même protégée par le mécanisme de protection de données de Windows, à portée machine.
  • Il est relu à chaud par le service : une modification faite depuis l'outil de configuration est prise en compte sans redémarrage, sauf pour les paramètres signalés comme nécessitant un redémarrage (ports, proxys de confiance, écritures v2).
  • L'outil de configuration en est la seule autorité d'écriture. Ne l'éditez jamais à la main.

La configuration n'est pas transférable d'une machine à l'autre

Puisque la clé de chiffrement est liée à la machine, copier SenSaaS.config sur un autre serveur ne permet pas de le relire. C'est voulu. En cas de changement de machine, resaisissez la configuration via l'assistant.

Durcissements recommandés

L'audit de sécurité du connecteur relève deux points qui restent à la charge de l'administrateur :

  • Restreindre les droits du dossier C:\ProgramData\Sage\SenSaaS\ au compte du service et aux administrateurs de la machine.
  • Exclure la copie de secours sensaas.crt des sauvegardes externalisées : contrairement au fichier principal, elle n'est pas protégée par une clé propre à la machine. Son retrait est prévu une fois la synchronisation de configuration vers le portail généralisée.

Mot de passe administrateur de l'outil

Le mot de passe demandé à l'ouverture de l'outil de configuration est haché (BCrypt) dans le fichier de configuration. Il protège l'interface d'administration, pas les données : l'oublier ne fait perdre aucune donnée, seule la réouverture de l'outil est bloquée. La procédure de récupération est décrite dans Se connecter à l'outil.

Changez-le depuis l'écran Configuration.

Autres protections en place

  • Erreurs normalisées : toute erreur est renvoyée au format ProblemDetails. Aucune pile d'appels n'est exposée, et le détail est masqué sur les erreurs serveur.
  • En-tête Server neutralisé : la version du serveur n'est pas publiée.
  • SQL libre refusé : la possibilité d'envoyer du SQL brut depuis un client est désactivée par défaut et destinée à disparaître avec l'API v1.
  • Écritures v2 fermées par défaut : les routes d'écriture de l'API v2 répondent « service indisponible » tant que l'option correspondante n'a pas été activée dans l'écran Serveur Web.
  • Corps encodés bornés : le décodage des corps de requête encodés est plafonné à 10 Mo.
  • Endpoint réseau interne restreint : les routes de gestion du réseau privé ne répondent qu'en local.

Bonnes pratiques

  • N'ouvrez le port HTTP que si un proxy inverse assure le chiffrement, ou sur un réseau de confiance.
  • N'activez l'outil de test de l'API que le temps d'un diagnostic : il expose la documentation et permet d'exécuter des requêtes.
  • Ne laissez la journalisation détaillée active que ponctuellement : voir Journalisation.
  • Créez un compte par utilisateur réel, et désactivez les comptes inutilisés plutôt que de partager un compte.

Voir aussi