web-dev-qa-db-fra.com

Activer TLS 1.2 pour la messagerie de base de données SQL Server 2016

J'ai été intrigué par ce problème pendant près d'une semaine. J'espère que quelqu'un dans notre communauté a rencontré le même problème et a déjà trouvé une solution.

Voici donc mon problème:

Conformément à notre politique d'entreprise, nous souhaitons que le courrier de la base de données puisse envoyer des e-mails via le port 25 avec TLS 1.2 activé et TLS 1.0 et TLS 1.1 désactivés.

Notre serveur de messagerie est Exchange Server 2010, nos boîtes SQL Server 2016 (éditions Developer et Enterprise) ont le système d'exploitation des éditions Windows Server 2016 Standard.

Notre version de SQL Server est:

select @@version
----------------------------------------
Microsoft SQL Server 2016 (SP1-CU7-GDR) (KB4057119) - 13.0.4466.4 (X64) 
    Dec 22 2017 11:25:00 
    Copyright (c) Microsoft Corporation
    Developer Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)

Nous avons la configuration de messagerie DB comme indiqué ici.

enter image description here

Le problème est à chaque fois que nous activons SSL

use msdb
exec dbo.sysmail_update_account_sp @account_id=2, @enable_ssl = 1;

Nous NE POUVONS PAS envoyer de courrier électronique (que notre authentification SMTP soit l'authentification Windows, l'authentification de base ou l'authentification anonyme). Le message d'erreur dans le journal de messagerie db est le suivant:

Message

Le courrier n'a pas pu être envoyé aux destinataires en raison de la défaillance du serveur de messagerie. (Envoi de courrier à l'aide du compte 2 (2018-07-30T10: 52: 41). Message d'exception: impossible d'envoyer des courriers au serveur de messagerie. (Échec d'envoi du courrier.).)

Mais si nous désactivons ce SSL, il n'y a aucun problème pour le courrier db envoyé.

Alors, comment pouvons-nous activer SSL et utiliser TLS 1.2 pour la messagerie db?

J'ai activé TLS 1.2 en ajoutant un registre comme indiqué ci-dessous

enter image description here

Les détails proviennent de cette lien (voir la section FAQ)

8
jyao

Comme il semble que personne ne puisse répondre à cette question, j'ai ouvert un dossier de support avec Microsoft, et il a quand même fallu près d'une semaine pour que le support MS revienne avec une réponse alors qu'il parcourait diverses ressources internes pour obtenir la réponse définitive.

Le résumé est:

Le courrier de la base de données SQL Server utilise System.Net.Mail pour effectuer le travail, le System.Net.Mail est capable d'envoyer du courrier à l'aide de TLS 1.2 mais uniquement lorsque la version d'exécution de la build est de 4,6 ou supérieure. La messagerie db SQL Server 2016 est conçue pour .Net 3.5, par conséquent, la messagerie db SQL Server 2016 ne prend pas en charge TLS 1.2 pour l'instant.

4
jyao

TLS1.2 est la seule version de TLS considérée comme sécurisée actuellement (mars 2019). Il a fallu beaucoup de temps et d'efforts pour découvrir qu'il y a 2 paramètres supplémentaires essentiels qui sont nécessaires pour faire fonctionner ce qui ne sont pas bien connus ou bien documentés, par Microsoft ou sur le Web en général. Les éléments suivants pourraient vous faire économiser beaucoup de temps et d'efforts .

Ce sont les 2 nouveaux paramètres du Registre qui ont résolu le problème pour nous:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

Il s'agit d'une référence au thread où nous avons finalement trouvé ces informations, enfouies à mi-chemin dans le thread: https://stackoverflow.com/questions/33761919/tls-1-2-in-net-framework-4-

Vous trouverez ci-dessous le contenu d'un simple fichier de registre exécutable que j'ai mis en place qui fera les 2 nouveaux paramètres et les paramètres déjà affichés sur le fil ci-dessus (c'est-à-dire cela fait tous les paramètres de registre nécessaires * ):

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

Remarque 1: SQL doit être redémarré pour que ces paramètres prennent effet, mais il est préférable de redémarrer Windows car les nouveaux paramètres affecteront. NET 4.x en général.

Note 2: En SQL, la case SSL doit être cochée dans le profil de messagerie pour utiliser TLS1.2.

* Note 3: pour info Nous avons exécuté l'outil gratuit, Crypto V2, avec l'option "Meilleures pratiques" activée avant de commencer à faire fonctionner cela. Nous avons ensuite vérifié nos modifications en utilisant la nouvelle version 3 de Crypto.

Espérons que cela permettra d'économiser beaucoup de temps, d'efforts et de frustration pour les autres;)

9
Zeek

C'est étrange parce que article lié indique clairement:

Prise en charge de TLS v1.2 inclus dans le .NET Framework version 3.5 SP1 sur Windows 8.1 et Windows Server 2012 R2

ce qui contredit la réponse que vous obtenez du support MS. Edit: J'ai trouvé dans cette question StackOverflow que même si .NET 3.5 n'incluait pas la prise en charge de TLS 1.2 au début, c'était ajouté plus tard par MS:

Prise en charge des versions par défaut du système TLS incluses dans le .NET Framework 3.5.1 sur Windows 7 SP1 et Server 2008 R2 SP1

Lecture de la section FAQ Je pense que le problème est que vous avez manqué une clé de registre lors de l'activation de TLS 1.2. La section FAQ dit:

Les paramètres de registre corrects sont les suivants:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2] 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
  "DisabledByDefault"=dword:00000000
  "Enabled"=dword:00000001 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
  "DisabledByDefault"=dword:00000000
  "Enabled"=dword:00000001  

Ces paramètres sont requis pour les ordinateurs serveur et clients.

Mais dans la capture d'écran que vous avez fournie, je ne vois que "Enabled"=dword:00000001, La clé "DisabledByDefault"=dword:00000000 Est manquante.

Il dit aussi:

TLS 1.1 est-il pris en charge sur SQL Server 2016?

Oui. SQL Server 2016 et SQL Server 2017 sur les versions Windows sont livrés avec la prise en charge de TLS 1.0 à TLS 1.2. Vous devez désactiver TLS 1.0 et 1.1 si vous souhaitez utiliser uniquement TLS 1.2 pour la communication client-serveur.

qui peut être interprété comme ce que vous devez désactiver TLS 1.0 et 1.1 pour utiliser 1.2, mais je ne suis pas sûr de celui-ci.

2
Alberto Martinez