Piloter Stormshield Data Mail Édition Outlook
Stormshield Data Mail Édition Outlook peut être piloté par un script PowerShell ou un programme .NET pour envoyer et lire des messages chiffrés et/ou signés.
Configurer Microsoft Outlook
Microsoft Outlook restreint par défaut l'exécution de programmes externes.
Lorsqu'un script PowerShell ou un programme .NET sont exécutés en utilisant les propriétés Microsoft Outlook, la fenêtre suivante s'ouvre :
Cliquez sur Accepter pour autoriser le script PowerShell ou le programme .NET à piloter Microsoft Outlook. L'accès est autorisé pour une durée définie (1, 2, 5 ou 10 minutes).
Pour exécuter un script PowerShell ou un programme .NET via Microsoft Outlook et éviter cette fenêtre, configurez Microsoft Outlook afin de pouvoir l'utiliser à partir d'autres programmes :
- Lancez Microsoft Outlook en tant qu'administrateur.
- Ouvrez le Centre de gestion de la confidentialité dans les options Outlook et cliquez sur Paramètres du Centre de gestion de la confidentialité :
-
Sélectionnez Ne jamais m'avertir des activités douteuses dans l'onglet Accès par programme.
Vous pouvez configurer une clé de registre sur chaque poste de travail afin d'autoriser automatiquement l'exécution de programmes externes dans Microsoft Outlook. Pour Microsoft Outlook 2019 et Office 365, la clé de registre est :
-
Microsoft Outlook 32 bits ou 64 bits :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Outlook\Security
DWORD: ObjectModelGuard
Value: 0, 1 or 2
-
Microsoft Outlook 32 bits exécuté sur un système 64 bits :
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\16.0\Outlook\Security
DWORD: ObjectModelGuard
Value: 0, 1 or 2
Les valeurs ObjectModelGuard dépendent des paramètres sélectionnés dans Sécurité de l'accès par programme :
-
M'avertir des activités douteuses lorsque mon logiciel antivirus est inactif ou n'est pas à jour (recommandé) → Valeur 0
-
Toujours m'avertir des activités douteuses → Valeur 1
-
Ne jamais m'avertir des activités douteuses (non recommandé) → Valeur 2
Configurer Stormshield Data Mail Édition Outlook
En mode de fonctionnement normal de l'add-in Stormshield Data Mail Édition Outlook, la valeur EnableScripting de la clé de registre HKLM\SOFTWARE\Arkoon\Security BOX Enterprise\Properties\Mail\ est désactivée (valeur = 0). Ainsi, durant l'envoi ou la lecture de messages chiffrés et/ou signés, si des erreurs surviennent (problème de certificat par exemple), des boîtes de dialogue nécessitant une réponse manuelle de l'utilisateur s'affichent.
Pour piloter l'add-in en mode "script", c'est-à-dire à partir d'un script PowerShell ou d'un programme .NET, il faut activer cette valeur de registre (valeur = 1). Ainsi les éventuelles erreurs ne provoqueront pas l'affichage de boîtes de dialogue nécessitant la réponse de l'utilisateur.
Si cette valeur n'est pas activée et que l'add-in est piloté en mode "script", les boîtes de dialogue qui pourraient s'ouvrir bloqueraient l'éxécution du processus d'envoi ou de lecture d'un message chiffré et/ou signé. Les éventuelles erreurs survenant durant le processus sont recensées dans le fichier de trace %TEMP%\Arkoon.SecurityBox.Mail.Scripting.log.
A la fin de l'exécution du processus d'envoi ou de lecture d'un message chiffré et/ou signé, il faut si nécessaire désactiver la valeur pour rebasculer sur un mode de fonctionnement normal de l'add-in Stormshield Data Mail Édition Outlook.
La valeur par défaut de la valeur de registre EnableScripting est 0.
Interagir avec Stormshield Data Mail Édition Outlook
Le module Stormshield Data Mail Édition Outlook traite les messages sortants pour les chiffrer et/ou les signer et les messages entrants pour les déchiffrer et/ou lire leur signature en fonction des propriétés affectées au message.
Envoyer un message chiffré et/ou signé
Créez un script PowerShell ou un programme .NET qui utiliseront l'interface de programmation Outlook Object Model.
Ajoutez les propriétés suivantes au message créé :
- SDSEncrypt pour chiffrer un message.
- SDSSign pour signer un message.
Le chiffrement est réalisé avec les certificats trouvés dans l'annuaire de l'utilisateur Stormshield Data Security courant. Si aucun utilisateur n'est connecté, une fenêtre de connexion s'ouvre.
La signature du message sera effectuée par l’utilisateur connecté à Stormshield Data Security, mettant en œuvre sa clé privée de signature.
Pour plus d'informations sur la création de nouvelles propriétés utilisateur dans la collection UserProperties et sur le comportement de sécurité de Outlook Object Model, consultez le site Web Microsoft Developer Network (MSDN).
Les exemples suivants illustrent les deux méthodes pour ouvrir une instance Microsoft Outlook et envoyer un message signé et chiffré.
Le script PowerShell et le programme . NET envoient automatiquement un message chiffré et signé au destinataire john.doe@mycompany.com. Ce message est également chiffré pour l’expéditeur.
PowerShell
Connect-SDSUser –Id "Alice Smith" –Interactive Set-ItemProperty –Path "HKLM:\SOFTWARE\Arkoon\Security BOX Enterprise\Properties\Mail" -Name "EnableScripting" -Value 1 $outlook = New-Object -ComObject Outlook.Application $session = $outlook.Session $session.Logon("Outlook") # maps to configured Outlook profile name $mailItem = $outlook.CreateItem(0) $mailItem.Recipients.Add("john.doe@mycompany.com") $mailItem.Subject = "Simple text Subject" $mailItem.Body = "Simple text Body" $userProp = $mailItem.UserProperties.Add("SDSEncrypt", 6, $false, 1) $userProp.Value = $true $userProp = $mailItem.UserProperties.Add("SDSSign", 6, $false, 1) $userProp.Value = $true $mailItem.Send() Set-ItemProperty –Path "HKLM:\SOFTWARE\Arkoon\Security BOX Enterprise\Properties\Mail" -Name "EnableScripting" -Value 0
Le script ci-dessus ne tient pas compte de la libération des objets COM instanciés depuis Microsoft Outlook. Il est nécessaire de les libérer en utilisant :
[Runtime.InteropServices.Marshal]::ReleaseComObject($variable)
.NET
using Stormshield.DataSecurity.Connector; using Microsoft.Office.Interop.Outlook; namespace SDConnectorSample { class Program { static void Main(string[] args) { string keyPath = @"SOFTWARE\ARKOON\Security BOX Enterprise\Properties\Mail"; #region Enabling registry key using (RegistryKey baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)) { using (RegistryKey subKey = baseKey.OpenSubKey(keyPath, true)) { subKey.SetValue("EnableScripting", 1); } } #endregion using (API api = new API()) { api.Execute("Connect-SDSUser –Id 'Alice Smith' –Interactive"); } Application outlook = new Application(); NameSpace session = outlook.Session; session.Logon("Outlook"); // maps to configured Outlook profile name MailItem mailItem = outlook.CreateItem(OlItemType.olMailItem); mailItem.Recipients.Add("john.doe@mycompany.com"); mailItem.Subject = "Simple text Subject"; mailItem.Body = "Simple text Body"; UserProperty userPropEncrypt = mailItem.UserProperties.Add("SDSEncrypt", OlUserPropertyType.olYesNo, false, OlFormatYesNo.olFormatYesNoYesNo); userPropEncrypt.Value = true; UserProperty userPropSign = mailItem.UserProperties.Add("SDSSign", OlUserPropertyType.olYesNo, false, OlFormatYesNo.olFormatYesNoYesNo); userPropSign.Value = true; ((Microsoft.Office.Interop.Outlook._MailItem)mailItem).Send(); #region Disabling registry key using (RegistryKey baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)) { using (RegistryKey subKey = baseKey.OpenSubKey(keyPath, true)) { subKey.SetValue("EnableScripting", 0); } } #endregion } } }
Le programme ci-dessus ne tient pas compte de la libération des objets COM instanciés depuis Microsoft Outlook. Il est nécessaire de les libérer en utilisant :
Marshal.ReleaseComObject(variable)
Lire un message chiffré et/ou signé
Lors de la lecture d’un message depuis Microsoft Outlook par le biais d’un script PowerShell ou d'un programme .NET, l’add-in Stormshield Data Édition Outlook déchiffre le message de manière transparente. L’objet MailItem ainsi récupéré est en clair et deux propriétés permettent de déterminer si le message était chiffré et/ou signé :
- SDSReadEncrypted si le message est chiffré
- SDSReadSigned si le message est signé
Les exemples suivants illustrent les deux méthodes pour ouvrir une instance Microsoft Outlook et lire un message depuis la boîte de réception.
Powershell
Connect-SDSUser –Id "Alice Smith" –Interactive Set-ItemProperty –Path "HKLM:\SOFTWARE\Arkoon\Security BOX Enterprise\Properties\Mail" -Name "EnableScripting" -Value 1 $outlook = New-Object -ComObject Outlook.Application $session = $outlook.Session $session.Logon("Outlook") # maps to configured Outlook profile name $mapi = $outlook.GetNamespace("MAPI") $inbox = $mapi.GetDefaultFolder(6) $items = $inbox.Items $mailItem = $items.GetLast() $userProp = $mailItem.UserProperties.Find("SDSReadEncrypted") $isEncrypted = $userProp.Value $userProp = $mailItem.UserProperties.Find("SDSReadSigned”) $isSigned = $userProp.Value Set-ItemProperty –Path "HKLM:\SOFTWARE\Arkoon\Security BOX Enterprise\Properties\Mail" -Name "EnableScripting" -Value 0
Le script ci-dessus ne tient pas compte de la libération des objets COM instanciés depuis Microsoft Outlook. Il est nécessaire de les libérer en utilisant :
[Runtime.InteropServices.Marshal]::ReleaseComObject($variable)
.NET
using Stormshield.DataSecurity.Connector; using Microsoft.Office.Interop.Outlook; namespace SDConnectorSample { class Program { static void Main(string[] args) { string keyPath = @"SOFTWARE\ARKOON\Security BOX Enterprise\Properties\Mail"; #region Activation de la clé de registre using (RegistryKey baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)) { using (RegistryKey subKey = baseKey.OpenSubKey(keyPath, true)) { subKey.SetValue("EnableScripting", 1); } } #endregion using (API api = new API()) { api.Execute("Connect-SDSUser –Id 'Alice Smith' –Interactive"); } Application outlook = new Application(); NameSpace session = outlook.Session; session.Logon("Outlook"); // maps to configured Outlook profile name NameSpace mapi = outlook.GetNamespace("MAPI"); MAPIFolder inbox = mapi.GetDefaultFolder(OlDefaultFolders.olFolderInbox); Items items = inbox.Items; MailItem mailItem = items.GetLast(); UserProperty userPropEncrypted = mailItem.UserProperties.Find("SDSReadEncrypted"); bool isEncrypted = userPropEncrypted.Value; UserProperty userPropSigned = mailItem.UserProperties.Find("SDSReadSigned"); bool isSigned = userPropSigned.Value; #region Désactivation de la clé de registre using (RegistryKey baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)) { using (RegistryKey subKey = baseKey.OpenSubKey(keyPath, true)) { subKey.SetValue("EnableScripting", 0); } } #endregion } } }
Le programme ci-dessus ne tient pas compte de la libération des objets COM instanciés depuis Microsoft Outlook. Il est nécessaire de les libérer en utilisant :
Marshal.ReleaseComObject(variable)