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 :
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 :
- 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.crtdes 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
Serverneutralisé : 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.