Partager via


Configurer la signature de certificat des charges utiles de sérialisation PowerShell dans Exchange Server

S’APPLIQUE À :oui-img-162016 oui-img-192019 oui-img-se Édition d’abonnement

Vue d’ensemble

La signature basée sur un certificat des charges utiles de sérialisation PowerShell est une fonctionnalité de sécurité de défense en profondeur qui empêche la manipulation malveillante de données sérialisées à échanger via des sessions EMS (Exchange Management Shell). Il est disponible Exchange Server 2013, Exchange Server 2016 et Exchange Server 2019.

La fonctionnalité a été introduite avec la mise à jour de sécurité Exchange Server de janvier 2023. Il a été expédié comme désactivé par défaut (opt-in) et doit être activé par l’administrateur Exchange Server. Il peut être activé via un remplacement de paramètre (Exchange Server 2016 et Exchange Server 2019) ou à l’aide d’une valeur de Registre (Exchange Server 2013).

En installant la mise à jour de sécurité Exchange Server de novembre 2023 (ou ultérieure), la fonctionnalité est activée par défaut (refus) par serveur et doit être désactivée par l’administrateur Exchange Server si vous ne souhaitez pas l’utiliser. Assurez-vous que les conditions préalables à l’activation de la signature de certificat des données sérialisées sont remplies avant d’installer la mise à jour de sécurité Exchange Server de novembre 2023 (ou ultérieure). Pour désactiver la fonctionnalité, vous devez créer un remplacement de paramètre qui désactive explicitement la fonctionnalité.

Qu’est-ce que la sérialisation des données ?

La sérialisation des données est le processus de conversion de l’état d’un objet en une forme (flux d’octets) qui peut être conservée ou transmise à la mémoire, à une base de données ou à un fichier. PowerShell, par exemple, utilise la sérialisation lors du passage d’objets .NET entre des sessions. Une fois qu’un objet a été soumis ou stocké, il peut être reconstruit dans son format précédent. Ce processus est appelé désérialisation.

Si vous souhaitez en savoir plus sur la sérialisation des données dans PowerShell, nous vous recommandons de lire le billet de blog Comment les objets sont envoyés vers et à partir de sessions à distance .

Conditions préalables à l’activation de la signature de certificat des données sérialisées

Certaines conditions préalables doivent être remplies avant que la signature de certificat des charges utiles de sérialisation PowerShell puisse être activée sans interrompre la connectivité entre les serveurs Exchange :

  • Tous les serveurs Exchange de votre environnement doivent exécuter la mise à jour de sécurité Exchange Server de janvier 2023 ou ultérieure. Si la fonctionnalité est activée dans un environnement qui a des serveurs Exchange, qui ne prennent pas en charge la signature de sérialisation, vous pouvez rencontrer des problèmes dans la communication de serveur à serveur ou lors de l’utilisation d’Exchange Management Shell.

  • Tous les serveurs Exchange (à l’exception des serveurs des outils de transport et de gestion Edge uniquement) doivent avoir accès au certificat d’authentification Exchange Server qui doit être valide et ne doit pas avoir expiré.

    Conseil

    Vous pouvez utiliser le script MonitorExchangeAuthCertificate pour case activée si le certificat d’authentification Exchange Server est valide. Il peut également être utilisé pour renouveler automatiquement le certificat OAuth ou pour le remplacer s’il a déjà expiré.

Vérifier que la signature de certificat des charges utiles de sérialisation PowerShell est utilisée

Vous pouvez vérifier si la signature de certificat des charges utiles de sérialisation PowerShell est activée en vérifiant le DataSerialization fichier journal, qui est conservé par Exchange Server. Vous trouverez le fichier journal dans le répertoire suivant : <ExchangeInstallPath>\V15\Logging\Data\Serialization.

Exchange gère un fichier journal par processus. Si vous ouvrez un environnement de ligne de commande Exchange Management Shell (EMS), un nouveau fichier journal est créé. Si vous ouvrez un deuxième EMS, un autre fichier journal est écrit. La syntaxe de nommage du fichier journal est DataSerialization<yyyyMMdd>-<N>.LOG. Chacun des fichiers journaux peut avoir une 10 MB taille maximale. La taille maximale du répertoire du journal de sérialisation est limitée à 1 GB par défaut. Les fichiers journaux sont supprimés s’ils sont antérieurs à 30 days.

La EventData colonne contient le nom du processus et l’indicateur qui indique si la signature de sérialisation est utilisée ou non.

Exemple d’utilisation de la connexion de sérialisation :

"S:MSG=SerializationTypeConverter Initialized, Process Name = w3wp, SerializationSigningEnabled = True, IsCustomParserEnabled = True"

Exemple de signature de sérialisation non utilisée :

"S:MSG=SerializationTypeConverter Initialized, Process Name = powershell, SerializationSigningEnabled = False, IsCustomParserEnabled = True"

Activer la signature de certificat des charges utiles de sérialisation PowerShell

Importante

Il n’est pas nécessaire de créer le remplacement du paramètre lors de l’exécution de la mise à jour de sécurité de novembre 2023 (ou ultérieure) Exchange Server. La fonctionnalité de signature de certificat des charges utiles de sérialisation PowerShell est activée par défaut lors de l’exécution de cette build.

Activer lors de l’exécution Exchange Server 2016 et Exchange Server 2019

Vous devez créer un nouveau paramètre de remplacement pour activer la signature de certificat des charges utiles de sérialisation PowerShell.

  1. Exécutez la commande suivante à partir d’un environnement de ligne de commande Exchange Management Shell (EMS) avec élévation de privilèges sur un serveur qui exécute Exchange Server dans votre environnement :

    New-SettingOverride -Name "EnableSigningVerification" -Component Data -Section EnableSerializationDataSigning -Parameters @("Enabled=true") -Reason "Enabling Signing Verification"
    

    Remarque

    Cette commande active tous les serveurs qui exécutent Exchange Server 2016 et Exchange Server 2019 dans votre environnement pour la signature de certificat des charges utiles de sérialisation PowerShell. Vous n’avez pas besoin d’exécuter la commande sur chaque serveur Exchange.

  2. Actualisez l’argument VariantConfiguration en exécutant la commande suivante :

    Get-ExchangeDiagnosticInfo -Process Microsoft.Exchange.Directory.TopologyService -Component VariantConfiguration -Argument Refresh 
    
  3. Il est nécessaire de redémarrer le World Wide Web Publishing service et sur Windows Process Activation Service le serveur Exchange, sur lequel le remplacement du paramètre a été créé. Exécutez la commande suivante à partir d’une fenêtre PowerShell avec élévation de privilèges ou redémarrez le serveur :

    Restart-Service -Name W3SVC, WAS -Force 
    

Activer lors de l’exécution Exchange Server 2013

Si vous exécutez Exchange Server 2013, la signature de certificat des charges utiles de sérialisation PowerShell doit être activée en créant une valeur de Registre sur chaque Exchange Server 2013.

  1. Créez la valeur de Registre sur un Exchange Server 2013 en exécutant la commande suivante :

    New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\ExchangeServer\v15\Diagnostics -Name "EnableSerializationDataSigning" -Value 1 -Type String
    
  2. Il est nécessaire de redémarrer et World Wide Web Publishing service sur Windows Process Activation Service chaque serveur Exchange 2013 sur lequel la valeur de Registre a été créée. Exécutez la commande suivante à partir d’une fenêtre PowerShell avec élévation de privilèges ou redémarrez le serveur :

    Restart-Service -Name W3SVC, WAS -Force 
    

Désactiver la signature de certificat des charges utiles de sérialisation PowerShell

Désactiver lors de l’exécution Exchange Server 2016 et Exchange Server 2019

Pour désactiver la fonctionnalité sur Exchange Server 2016 ou Exchange Server 2019, le remplacement du paramètre doit être supprimé ou explicitement défini sur désactivé.

Avertissement

La désactivation de la signature de certificat des charges utiles de sérialisation PowerShell rend votre serveur vulnérable aux vulnérabilités Exchange connues et affaiblit la protection contre les menaces inconnues. Nous vous recommandons de laisser cette fonctionnalité activée.

  1. Supprimez le remplacement du paramètre ou définissez-le explicitement sur Enabled=false:

    Lors de l’exécution de l’unité de su exchange de janvier 2023 à octobre 2023, le remplacement du paramètre doit être supprimé pour désactiver la fonctionnalité.

    Exécutez la commande suivante à partir d’un environnement de ligne de commande Exchange Management Shell avec élévation de privilèges :

    Get-SettingOverride -Identity "EnableSigningVerification" | Remove-SettingOverride
    

    ou

    Lors de l’exécution de l’unité de su Exchange de novembre 2023 ou ultérieure, un remplacement de paramètre doit être créé pour désactiver explicitement la fonctionnalité.

    Exécutez la commande suivante à partir d’un environnement de ligne de commande Exchange Management Shell avec élévation de privilèges :

    New-SettingOverride -Name "DisableSigningVerification" -Component Data -Section EnableSerializationDataSigning -Parameters @("Enabled=false") -Reason "Disable Signing Verification"
    
  2. Actualisez l’argument VariantConfiguration en exécutant la commande suivante :

    Get-ExchangeDiagnosticInfo -Process Microsoft.Exchange.Directory.TopologyService -Component VariantConfiguration -Argument Refresh 
    
  3. Il est nécessaire de redémarrer le World Wide Web Publishing service et sur Windows Process Activation Service le serveur Exchange, sur lequel le remplacement du paramètre a été supprimé ou mis à jour. Exécutez la commande suivante à partir d’une fenêtre PowerShell avec élévation de privilèges ou redémarrez le serveur :

    Restart-Service -Name W3SVC, WAS -Force 
    
  4. Fermez l’environnement de ligne de commande Exchange Management Shell (EMS) qui a été utilisé pour exécuter les commandes mentionnées dans les étapes précédentes. Il est important d’appliquer la configuration immédiatement.

Désactiver lors de l’exécution Exchange Server 2013

Pour désactiver la fonctionnalité sur Exchange Server 2013, la valeur de Registre doit être supprimée pour définir explicitement sur 0.

  1. Définissez la valeur 0 de Registre sur Exchange Server 2013 en exécutant la commande suivante :

    Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\ExchangeServer\v15\Diagnostics -Name "EnableSerializationDataSigning" -Value 0
    
  2. Il est nécessaire de redémarrer le World Wide Web Publishing service et Windows Process Activation Service sur chaque serveur Exchange 2013, sur lequel la valeur de Registre a été modifiée. Exécutez la commande suivante à partir d’une fenêtre PowerShell avec élévation de privilèges ou redémarrez le serveur :

    Restart-Service -Name W3SVC, WAS -Force 
    

Problèmes connus liés à la signature de certificat des données sérialisées

Importante

Veillez à toujours installer la dernière mise à jour Exchange Server, car elle résout certains des problèmes répertoriés dans cette section. Les problèmes résolus par la dernière mise à jour sont marqués d’une coche.

  • ❌ Si la signature des charges utiles de sérialisation PowerShell est activée, un certificat d’authentification expiré empêche l’applet Get-ExchangeCertificate de commande de retourner les détails du certificat.

  • ✅ Si la signature des charges utiles de sérialisation PowerShell est activée, l’applet Get-ExchangeCertificate de commande ne retourne pas de valeur visible lorsqu’elle est exécutée sur un ordinateur sur lequel seuls les outils de gestion Exchange sont installés, quelle que soit la validité du certificat d’authentification.

  • ❌Certains scripts inclus avec Exchange Server, tels que RedistributeActiveDatabases.ps1, peuvent ne pas fonctionner comme prévu dans les conditions suivantes :

    • La fonctionnalité de signature des charges utiles de sérialisation PowerShell est activée.
    • Vous n’utilisez pas les groupes de sécurité par défaut fournis par le RBAC Exchange.
    • Le script est exécuté par un utilisateur qui n’est pas membre du Organization Management groupe de rôles.
  • Les scripts PowerShell suivants ne fonctionnent pas correctement lorsqu’ils sont exécutés sur un ordinateur sur lequel seuls les outils de gestion Exchange sont installés, sans aucun autre rôle Exchange Server. Pour résoudre ce problème, exécutez le script sur un Exchange Server avec le rôle de boîte aux lettres, à l’aide d’un environnement de ligne de commande Exchange Management Shell (EMS) avec élévation de privilèges.

    • RedistributeActiveDatabases.ps1
    • StartDagServerMaintenance.ps1
    • Manage-MetaCacheDatabase.ps1
    • Move-PublicFolderBranch.ps1
  • ❌Certaines applets de commande PowerShell redirigées peuvent échouer à s’exécuter sur un ordinateur sur lequel seuls les outils de gestion Exchange sont installés et aucun autre rôle Exchange Server. Pour résoudre ce problème, utilisez ForEach-Object comme illustré dans les exemples ou exécutez-les sur un serveur Exchange sur lequel le rôle de boîte aux lettres est installé. Cela affecte différentes combinaisons d’applets de commande, telles que :

    • Get-Mailbox | Get-CalendarDiagnosticLog

    • Get-Mailbox | Get-MailboxFolderPermission

    • Get-Mailbox | Get-MailboxFolderStatistics

    • Get-MailboxDatabase | Get-MailboxStatistics

    • Get-MailboxDatabase | Get-Mailbox

    • Get-MailboxDatabase | Test-ExchangeSearch

    • Get-PublicFolderClientPermission | Remove-PublicFolderClientPermission

      Si vous souhaitez les utiliser sur un serveur Exchange Management Tools (sans aucun autre rôle Exchange Server installé), vous pouvez contourner ce problème comme indiqué ici :

      Get-Mailbox | ForEach-Object { Get-CalendarDiagnosticLog -Identity $_.Name }
      Get-Mailbox | ForEach-Object { Get-MailboxFolderPermission -Identity $_.Name }
      Get-Mailbox | ForEach-Object { Get-MailboxFolderStatistics -Identity $_.Name }
      Get-MailboxDatabase | ForEach-Object { Get-MailboxStatistics -Database $_.Name }
      Get-MailboxDatabase | ForEach-Object { Get-Mailbox -Database $_.Name }
      Get-MailboxDatabase | ForEach-Object { Test-ExchangeSearch -MailboxDatabase $_.Name }
      Get-PublicFolderClientPermission \pf1 | ForEach-Object { Remove-PublicFolderClientPermission -Identity $_.Identity.ToString() -User $_.User.ToString() }