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 :

  1. Lancez Microsoft Outlook en tant qu'administrateur.
  2. Ouvrez le Centre de gestion de la confidentialité dans les options Outlook et cliquez sur Paramètres du Centre de gestion de la confidentialité :


  3. 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)