Implémenter S/MIME avec Exchange Online et OWA


Aaah l’email, inventé à la fin du 20ème siècle et toujours la pierre angulaire de la communication d’aujourd’hui. Cependant, les besoins en sécurité augmentent et nous avons dû trouver de nouvelles façons de garantir la sécurité de nos communications email. Pourquoi ? Parce que pour échanger des emails, les serveurs email utilisent SMTP, un protocole non chiffré, donc on peut oublier la garantie de confidentialité et d’authenticité. Il est vrai que nous pouvons l’encapsuler dans TLS en utilisant SMTPS ou STARTTLS mais si vous utilisez Exchange Online et que le serveur de messagerie du destinataire ne prend pas en charge TLS, alors la communication sera simplement en SMTP non chiffré.
C’est là que des standards comme S/MIME (Secure/Multipurpose Internet Mail Extensions) viennent à notre secours !
En utilisant ce standard, vous pouvez signer votre email avec votre clé privée avant de l’envoyer au destinataire qui peut le vérifier avec votre clé publique (clé publique que vous échangez avec le destinataire par un autre moyen sécurisé). Vous pouvez également chiffrer un email avec la clé publique du destinataire pour garantir que seul ce destinataire peut l’ouvrir.
Et là vous allez me dire que toute cette petite histoire est très intéressante mais comment fait-on pour l’implémenter ? Vous pourriez implémenter S/MIME sur chacun de vos clients email s’ils le prennent en charge comme Outlook classic, mais alors vous devez ajouter la clé publique de vos contacts sur chaque client email, ce qui peut être un peu fastidieux mais fonctionne ! Il est également bon de noter que le Nouvel Outlook ne prend pas encore en charge S/MIME mais devrait le prendre en charge durant ce mois de novembre 2024.
Cependant, si vous avez Exchange Online, vous pourriez configurer les clés publiques de tous les contacts une seule fois pour tout le monde sur votre serveur ! Mais ce n’est pas magique, chaque utilisateur devra toujours installer sa propre clé privée localement sur son appareil.
Dans cet article, nous verrons comment l’implémenter sur Exchange Online avec Outlook sur le Web (OWA).
Installer la clé privée sur votre machine locale
Installer le contrôle S/MIME pour OWA
Tout d’abord, vous devrez installer le contrôle S/MIME sur votre navigateur (à ce jour, il n’est disponible que sur Edge et Chrome) afin qu’OWA puisse appeler l’API Windows de votre machine locale pour chiffrer/signer les emails en utilisant la clé privée installée dessus.
- Ouvrez
outlook.office.com
et allez dans les paramètres en cliquant sur l’engrenage en haut à droite - Cliquez sur
Mail > SMIME
et sur le liencliquez ici
pour installer l’extension du navigateur - Une fois l’extension du navigateur installée, retournez à la page des paramètres et cliquez sur le lien
cliquez ici
pour télécharger et installer l’extension de contrôleSmimeOutlookWebChrome.msi
. - Une fois cela fait, vous pouvez redémarrer votre navigateur et vous assurer que ces cases ne sont plus grisées.
Installer votre certificat S/MIME
Si vous n’avez pas encore de certificat, vous devrez en demander un. Vous pouvez en demander un à une CA publique (Autorité de Certification) mais à part Actalis, je ne connais pas d’autres CA publiques gratuites pour les certificats S/MIME. Vous pouvez également en demander un à votre propre CA privée (par exemple en utilisant openssl) mais vous devrez alors importer le certificat public de la CA privée dans crtmngr
.
Vous devrez ensuite installer votre certificat sur la machine de votre navigateur :
- Double-cliquez sur votre certificat
.p12
, suivez l’assistant et fournissez le mot de passe du certificat : - Une fois installé, ouvrez l’utilitaire
Gérer les certificats utilisateur
depuis la barre de recherche Windows : - Allez dans le dossier où votre certificat est installé. Cela devrait être
Personnel > Certificats
: - Faites un clic droit sur votre certificat et sélectionnez
Toutes les tâches > Exporter
: - Suivez l’assistant pour enregistrer votre certificat au format
.der
, vous en aurez besoin pour télécharger la clé publique sur Exchange Online plus tard.
Télécharger la chaîne de confiance sur Exchange Online
Contrairement à Windows, Exchange Online n’a pas d’autorités de certification préinstallées. Vous devrez y ajouter toutes les autorités de certification qui peuvent vérifier vos certificats d’utilisateur final et de contacts.
- Ouvrez
usercrtmngr
à nouveau et double-cliquez sur le certificat de l’utilisateur final - Dans l’onglet
Chemin de certification
, vous verrez tous les certificats vérifiant le certificat de l’utilisateur final, c’est ce qu’on appelle la chaîne de confiance - Assurez-vous que tous ces certificats sont dans le même dossier ou copiez ceux qui sont en dehors dans le dossier actuel pour pouvoir les concaténer plus tard
- Répétez les étapes ci-dessus pour tous vos utilisateurs finaux et contacts
- Utilisez
ctrl+clic gauche
pour sélectionner chaque certificat de la chaîne de confiance (s’il n’y a qu’un seul certificat dans la chaîne de confiance, incluez un autre certificat avec pour pouvoir exporter la liste au format.sst
) - Faites un clic droit sur l’un des certificats sélectionnés et sélectionnez
Toutes les tâches > Exporter
, suivez l’assistant et sélectionnez le format.sst
- En utilisant Powershell 7 (en dessous de 7, vous aurez l’erreur
unable to find type [uint]
) :
Install-Module ExchangeOnlineManagement
Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline -UserPrincipalName <exchangeadmin_for_yourdomain>
Set-SmimeConfig -SMIMECertificateIssuingCA ([System.IO.File]::ReadAllBytes('C:\Users\Gold\Downloads\chainOfTrust.sst'))
- Attendez un peu de temps pour que la modification soit propagée
Super ! Nous avons maintenant tout ce qu’il faut pour signer et déchiffrer nos emails dans OWA, qu’en est-il du chiffrement ou de la vérification de la signature des emails ?
Installer la clé publique sur Exchange Online
Cette partie n’est pas bien documentée, en particulier le cas d’utilisation pour ajouter un contact en dehors de notre Exchange Online où je n’ai trouvé aucune documentation à ce sujet, mais cela fonctionne ! Alors commençons.
- Rassemblez les clés publiques de vos contacts au format DERv3 (comme mentionné à l’étape 5 de Installer votre certificat S/MIME)
- Utilisez le code powershell suivant pour concaténer chaque DERv3 en
.sst
:
$certArray = New-Object System.Collections.ArrayList
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("D:\Gold\Documents\VM-apps\baptiste@cravaterouge.com.cer") <- DERv3 format
$certArray.Insert(0, $cert.GetRawCertData())
- Si le contact appartient au même Exchange Online, utilisez la commande powershell suivante :
Set-Mailbox -Identity baptiste -UserCertificate $certArray
- Si le contact est externe à cet Exchange Online, utilisez la commande suivante :
# Utilisez cette commande si le contact n'est pas déjà créé
New-MailContact -Name CravateRouge_SMIME -ExternalEmailAddress baptiste@cravaterouge.com
Set-MailContact -Identity CravateRouge_SMIME -UserCertificate $certArray
- Assurez-vous que le certificat a été correctement mis à jour en vérifiant que
Get-Mailbox/Get-MailContact -Identity CravateRouge | select UserCertificate
renvoie le même binaire que$cert.GetRawCertData()
- Pour envoyer un email à ces contacts, vous devez les sélectionner dans les contacts GAL avec le nom d’identité exact que vous avez donné dans la commande powershell ci-dessus. Par exemple, pour envoyer un email à Baptiste, je dois utiliser le contact nommé CravateRouge_SMIME et non en tapant directement baptiste@cravaterouge.com ou en utilisant une autre carte de contact même si elle contient la même adresse email.
Résultat
- Vous pouvez maintenant signer chacun de vos emails pour prouver aux destinataires que vous êtes l’expéditeur original et déchiffrer les emails qui vous sont envoyés
- Et vous pouvez également chiffrer/vérifier les emails des contacts que vous avez ajoutés à Exchange Online
