Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Protéger des colonnes contenant des informations sensibles

0000003085     -      28/06/2022

Mercator 10.10 ou ultérieur permet d'apporter une protection supplémentaire à des colonnes contenant des données sensibles. Par exemple, des codes d'accès, des informations confidentielles liées à un client ou un produit, ... Cette protection est réalisée sous la forme d'un encryptage dans la base de données SQL. Ces données deviennent alors uniquement lisibles dans Mercator et pour autant que ce Mercator fonctionne sur un poste disposant du certificat ayant servi au cryptage.
En résumé, ces colonnes

  • depuis un Mercator sans ce certificat, sont illisibles
  • depuis un autre programme que Mercator, sont illisibles (par exemple les outils clients de SQL Server)
  • depuis un autre programme que Mercator, avec ce certificat sur le poste, sont toujours illisibles
  • depuis Mercator avec le certificat adéquat, sont lisibles
  • depuis une application externe ayant instancié MercatorUi.Main, sur un poste/serveur disposant du certificat, et utilisant les outils de Mercator (Api.Zselect), sont lisibles.

Le cryptage et le décryptage sont effectués par Mercator. Il ne faut dès lors rien changer dans le paramétrage ou la programmation sur mesure autour de Mercator, hormis si des sauvegardes sont effectuées en direct dans la base de données sur ces colonnes.

Cette fonctionnalité ne dispense en aucune manière de protéger le réseau local accédant à la base de données SQL, ni de protéger le serveur SQL, dont l'accès ne peut jamais être exposé sur l'internet public.

 

Installation du certificat

Sur chaque poste utilisant Mercator et pour chaque utilisateur, un certificat SSL avec clé publique et clé privée doit être installé. L'origine de ce certificat est libre. Il est toutefois conseillé de travailler avec une clé RSA de 2048 bits :

  • pas moins, sinon la sécurité du cryptage est considérée comme insuffisante,
  • pas plus, car cela peut grever les performances lors du décryptage.

Le certificat doit être installé dans le magasin de certificats personnels de l'utilisateur courant. Ce magasin est disponible via

  • Démarrer / Exécuter
  • MMC
  • Fichier / Ajouter composant enfichable (Files / Add snapin)
  • Certificats -> Ajouter
  • Mon compte d'utilisateur -> Terminer.

Nous recommandons de toujours installer ce certificat en excluant la possibilité d'exporter la clé privée. Cela rend le certificat non déplaçable vers un autre poste.

Les certificats ajoutés sous "compte d'ordinateur" ne sont pas pris en compte. Cela permet, sur un serveur utilisé par différents utilisateurs, de déterminer quels sont ceux qui ont accès aux informations cryptées.

Ce certificat peut être fourni par Mercator. Pour cela, il faut 

  1. Demander que le certificat soit produit.
  2. Télécharger le certificat une fois produit, via le menu "Outils Avancés > Base de données SQL > Colonnes Cryptées > Installer Certificat". (Si cette procédure provoque une erreur "Accès refusé - access denied", alors il suffit normalement de rentrer une fois dans le magasin de certificats personnels de l'utilisateur courant tel qu'indiqué ci-dessus.)

Dès cette procédure terminée avec succès, le redémarrage de Mercator est proposé et l'empreinte du certificat est automatiquement placée dans l'option "Autres / Empreinte certificat cryptage données" (id = CERT_THUMB).

Si le certificat ne provient pas de Mercator, alors il faut l'installer manuellement dans le magasin dont l'accès est rappelé ci-dessus. Il conviendra ensuite de noter son empreinte (thumprint) et de la reporter dans l'option mentionnée ci-dessus.

 

Vérification de la mise en place du certificat

Une fois le certificat mis en place, son statut peut être vérifié via "Outils > Information Système".

certificate_status

Si l'empreinte est affichée, le certificat est opérationnel. Dans le cas contraire, un message d'erreur sera affiché.

Si ce message indique que la clé privée n'est pas accessible, il convient de vérifier que les informations du certificat indiquent bien que la clé privée existe.

Si tel n'est pas le cas, ce certificat ne peut être utilisé.

 

Mise en place du cryptage d'une colonne

Le cryptage de colonnes se limite aux colonnes de type varchar(MAX) (mémo) et varbinary(MAX). Ces colonnes sont cryptables dans les tables suivantes :

  • tous les signalétiques : CLI, FOU, STOCK, GEN, ANA, IMM, XLEAD, YPREST, ...
  • les actions du CRM : ACTIONS
  • les tables libres
  • les tables "custom".

Le cryptage est mis en place via "Outils Avancés > Base de données SQL > Colonnes Cryptées > Crypter". Il faut ensuite choisir la table et la colonne à crypter.

Après ce cryptage, Mercator doit être redémarré. Une colonne cryptée est reconnaissable dans le Database Viewer de l'éditeur de code, grâce à ce petit cadenas :

Il ne faut en aucun cas crypter des colonnes qui participeraient à des recherches dans la base de données. Il ne faut pas non plus crypter des colonnes qui sont mises à jour par des calculs (par ex. triggers). En d'autres termes, il ne faut crypter que des colonnes contenant des informations statiques.

Concernant les colonnes char ou varchar, il n'est pas interdit de convertir au préalable une colonne de char vers varchar(MAX) afin de pouvoir la crypter ultérieurement.

Une valeur cryptée ne sera jamais décryptable en dehors de Mercator (ou sans les outils de Mercator). En d'autres termes, la base de données SQL ne contiendra jamais ce qui est nécessaire pour effectuer le décryptage. Ce design est souhaité, puisqu'il permet de protéger les données en cas de vol de la base de données ou d'un de ses backups.

Pour les chaînes de caractères , une valeur vide ou null, une fois cryptée, sera toujours vide ou null. Dès lors, un test tel que celui-ci reste valide après cryptage :

where c_memo <> '' 

Pour les colonnes binaires, les valeurs null ou dont la taille du tableau de bytes est zéro restent inchangées après cryptage. Ce test reste donc valide :

where (c_imgbin is not null) and (DATALENGTH(c_imgbin) > 0)

Il est possible de retirer le cryptage via le menu "Outils Avancés > Base de données SQL > Colonnes Cryptées > Retirer Cryptage".

Dès qu'une colonne est cryptée, l'option  "Autres / Empreinte certificat cryptage données" (id = CERT_THUMB) devient non modifiable.

 

Précautions importantes

  • La fiabilité du cryptage repose sur la protection de la confidentialité qui doit être assurée quant au certificat. Si ce certificat et son mot de passe sont "volés", alors les données cryptées pourront être décryptées à tout instant par une personne non autorisée. Le certificat et son mot de passe doivent donc être conservés en lieu sûr et protégés de façon maximale.
  • Le décryptage est strictement impossible sans ce certificat. Dès lors, ce certificat et son mot de passe doivent être conservés en lieu sûr et protégés de façon maximale.
  • Si plusieurs Mercator partagent des données communes, par exemple des données clients propagées par trigger, vers d'autres bases de données (ex. : dans le cadre d'une centralisation comptable multi-dossiers), alors
    • ces différents Mercator doivent utiliser le même certificat,
    • dans les tables synchronisées, les mêmes colonnes doivent être cryptées.
  • En ce qui concerne les échanges entre sites, via McdServerService, il n'est pas obligatoire que le certificat soit commun à tous les sites (mais ce n'est pas interdit non plus). Il est toutefois nécessaire de redémarrer McdServerService après installation ou modification du certificat mentionné dans l'option CERT_THUMB. (Version min. de McdServerService.exe : 1.0.5.0)
  • Il est nécessaire d'analyser l'opportunité d'encrypter des colonnes eu égard aux applications externes éventuelles, liées à Mercator, qui ne pourront pas décrypter ces données.

 

Encrypter les données par code depuis Mercator

Si les données à encrypter sont sauvegardées dans la base de données par les algorithmes de Mercator, alors ces données peuvent être laissées "en clair" ; le code de Mercator effectuant la sauvegarde procédera au cryptage adéquat. Si, par contre, un code sur mesure place directement une donnée dans une colonne cryptée de la base de données SQL, alors il est nécessaire de la crypter au préalable.

Ci-dessous un exemple de code :

Zoom
string c_memo = "Le contenu du mémo qui doit être crypté.";
using (SqlCommand cmd = new SqlCommand("update CLI set c_memo=@c_memo where c_id=..."))
{
    cmd.Parameters.AddWithValue("@c_memo", MercatorCryptorEngine.CryptorEngine.MercatorEncryptRsaAes(c_memo)).SqlDbType = System.Data.SqlDbType.VarChar;
    Api.SqlExec(MercatorUi.Globals.RepData, cmd);
}

 

Décrypter les données par code depuis Mercator

Aucune adaptation du code ne doit être effectuée. Le décryptage est inclus dans toutes les méthodes Api.Zselect : Zselect, ZselectDirect, ZSelect<T> et leurs équivalents async. Le décryptage est aussi effectué par toutes les xFunctions.

 

Encrypter les données par code depuis l'extérieur de Mercator

Il est possible d'encrypter les données depuis une application sans rapport avec Mercator, mais qui doit effectuer des modifications de données dans une colonne cryptée de la base de données de Mercator. Pour cela, il faut disposer de la clé publique du certificat qui permet le cryptage. Pour obtenir cette clé publique, il convient de procéder comme suit :

  • se rendre dans le magasin de certificats de l'utilisateur
  • localiser le certificat dans le nœud "Personnel" (s'il s'agit d'un certificat fourni par Mercator, il porte un nom composé du nom de licence, du site et du type de Mercator, séparés par des @)
  • sur ce certificat, clic-droit, "Toutes les tâches / Exporter"
  • Ne pas exporter la clé privée
  • Choisir le format X.909 binaire encodé DER 
  • Finaliser l'export en notant le nom du fichier produit

Ci-dessous un exemple de code :

Zoom
byte[] certifContent = System.IO.File.ReadAllBytes(@"c:\...\mycertif.cer");
using (System.Security.Cryptography.X509Certificates.X509Certificate2 certif = new X509Certificate2(certifContent))
{
    string c_memo = "Le contenu du mémo qui doit être crypté.";
    using (SqlCommand cmd = new SqlCommand("update CLI set c_memo=@c_memo where c_id='AGK'"))
    {
        cmd.Parameters.AddWithValue("@c_memo", MercatorCryptorEngine.CryptorEngine.MercatorEncryptRsaAes(c_memo, certificate: certif)).SqlDbType = System.Data.SqlDbType.VarChar;
        bool b = Api.SqlExec(@"K:\MercatorDev\Data\", cmd);
    }
}

 

Décrypter les données par code depuis l'extérieur de Mercator

Ceci n'est pas possible et ne le sera jamais.

 

Visualiser les colonnes cryptées

Pour ce faire, veuillez installer l'export Excel fourni en pièce jointe. Il est accessible via le menu "Clients / Documents".

 



A télécharger : 0000003085.zip (1 Kb - 13/06/2022)