Aktivieren Sie TLS 1.2 für SQL Server 2016-Datenbankmail


8

Ich bin seit fast 1 Woche von diesem Problem verwirrt. Hoffentlich hat jemand in unserer Community das gleiche Problem erlebt und bereits eine Lösung gefunden.

Also hier ist mein Problem:

Gemäß unserer Unternehmensrichtlinie möchten wir, dass Datenbank-E-Mails E-Mails über Port 25 mit aktiviertem TLS 1.2 und deaktiviertem TLS 1.0 und TLS 1.1 senden können.

Unser Mailserver ist Exchange Server 2010, unsere SQL Server 2016-Boxen (Entwickler- und Enterprise-Editionen) verfügen über das Betriebssystem der Windows Server 2016-Standardeditionen.

Unsere SQL Server-Version lautet:

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)

Wir haben die DB-Mail-Konfiguration wie hier gezeigt.

Geben Sie hier die Bildbeschreibung ein

Das Problem ist, wann immer wir SSL aktivieren

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

Wir können keine Datenbank-E-Mails senden (unabhängig davon, ob es sich bei unserer SMTP-Authentifizierung um Windows-Authentifizierung, Standardauthentifizierung oder anonyme Authentifizierung handelt). Die Fehlermeldung im Datenbank-Mail-Protokoll lautet wie folgt:

Botschaft

Die E-Mail konnte aufgrund des Ausfalls des Mailservers nicht an die Empfänger gesendet werden. (Senden von E-Mails mit Konto 2 (2018-07-30T10: 52: 41). Ausnahmemeldung: E-Mails können nicht an den Mailserver gesendet werden. (Fehler beim Senden von E-Mails.)

Wenn wir dieses SSL deaktivieren, gibt es kein Problem für die versendete Datenbank-Mail.

Wie können wir also SSL aktivieren und TLS 1.2 für DB Mail verwenden?

Ich habe TLS 1.2 durch Hinzufügen der Registrierung wie unten gezeigt aktiviert

Geben Sie hier die Bildbeschreibung ein

Die Details stammen von diesem Link (siehe FAQ)

Antworten:


9

TLS1.2 ist die einzige Version von TLS, die derzeit als sicher gilt (März 2019). Es hat viel Zeit und Mühe gekostet, herauszufinden, dass zwei wesentliche zusätzliche Einstellungen erforderlich sind, damit dies funktioniert, die weder von Microsoft noch im Internet allgemein bekannt oder gut dokumentiert sind. Das Folgende kann Ihnen viel Zeit und Mühe sparen .

Dies sind die 2 neuen Registrierungseinstellungen, die das Problem für uns behoben haben:

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

Dies ist ein Verweis auf den Thread, in dem wir diese Informationen gefunden haben, die sich in der Mitte des Threads befinden: /programming/33761919/tls-1-2-in-net-framework-4-0

Unten ist der Inhalt für eine einfache ausführbare Registrierungsdatei, die ich zusammengestellt habe, um die 2 neuen Einstellungen und die Einstellungen vorzunehmen, die bereits im obigen Thread angezeigt wurden (dh dies macht alle erforderlichen Registrierungseinstellungen * ):

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

Hinweis 1: SQL muss neu gestartet werden, damit diese Einstellungen wirksam werden. Es ist jedoch besser, Windows neu zu starten, da sich die neuen Einstellungen generell auf .NET 4.x auswirken.

Hinweis 2: In SQL muss das Kontrollkästchen SSL im E-Mail-Profil aktiviert sein, um TLS1.2 verwenden zu können.

* Hinweis 3: Zu Ihrer Information Wir haben das kostenlose Tool Crypto V2 mit aktivierter Option "Best Practices" ausgeführt, bevor wir damit begonnen haben. Wir haben unsere Änderungen anschließend mit der neuen Crypto Version 3 überprüft.

Hoffentlich spart dies anderen viel Zeit, Mühe und Frust;)


4

Da anscheinend niemand diese Frage beantworten kann, habe ich einen Support-Fall bei Microsoft eröffnet. Trotzdem dauerte es fast eine Woche, bis der MS-Support eine Antwort erhielt, als er verschiedene interne Ressourcen durchging, um die endgültige Antwort zu erhalten.

Die Zusammenfassung lautet:

SQL Server-Datenbankmail verwendet System.Net.Mail, um die Arbeit zu erledigen. System.Net.Mail kann Mail mit TLS 1.2 senden, jedoch nur, wenn die Build-Laufzeitversion 4.6 oder höher ist. SQL Server 2016-Datenbankmail wurde für .NET 3.5 erstellt, daher unterstützt SQL Server 2016-Datenbankmail TLS 1.2 derzeit nicht.


Hallo, gibt es ein Update zu dem oben genannten Fall? Ich habe das genaue Problem. Es ist wirklich seltsam, wenn es sich um eine Version handelt, die 2 Jahre alt ist, als die aktuelle Version, die das gesicherte Protokoll nicht unterstützt. Jede Antwort oder Hilfe wäre sehr dankbar B Grüße
Mohammad Omar

Nein, kein Update, aber hoffen wir, dass SQL Server 2019 dieses Problem behebt.
Jyao

2

Es ist seltsam, weil der verlinkte Artikel klar sagt:

Unterstützung für TLS v1.2 in .NET Framework Version 3.5 SP1 unter Windows 8.1 und Windows Server 2012 R2

Dies widerspricht der Antwort, die Sie vom MS-Support erhalten. Bearbeiten: Ich habe in dieser StackOverflow-Frage festgestellt , dass .NET 3.5, obwohl es zunächst keine Unterstützung für TLS 1.2 enthielt, später von MS hinzugefügt wurde:

Unterstützung für TLS-Systemstandardversionen, die in .NET Framework 3.5.1 unter Windows 7 SP1 und Server 2008 R2 SP1 enthalten sind

Beim Lesen des FAQ-Abschnitts besteht das Problem darin, dass Sie beim Aktivieren von TLS 1.2 einen Registrierungsschlüssel verpasst haben. Der FAQ-Bereich sagt:

Die korrekten Registrierungseinstellungen lauten wie folgt:

[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  

Diese Einstellungen sind sowohl für Server- als auch für Client-Computer erforderlich.

Aber in dem von Ihnen bereitgestellten Screenshot, den ich nur sehe "Enabled"=dword:00000001, "DisabledByDefault"=dword:00000000fehlt der Schlüssel.

Es heißt auch:

Wird TLS 1.1 unter SQL Server 2016 unterstützt?

Ja. SQL Server 2016 und SQL Server 2017 unter Windows werden mit TLS 1.0 bis TLS 1.2 unterstützt. Sie müssen TLS 1.0 und 1.1 deaktivieren, wenn Sie nur TLS 1.2 für die Client-Server-Kommunikation verwenden möchten.

Dies kann so interpretiert werden, dass Sie TLS 1.0 und 1.1 deaktivieren müssen, um 1.2 zu verwenden, aber ich bin mir nicht sicher.


Sie haben gute Fragen aufgeworfen, aber ich kann sie nicht direkt beantworten, da ich jetzt keine Umgebung habe. Ich weiß jedoch, dass der MS-Support mehrere Testumgebungen eingerichtet hat und diese immer noch nicht erhalten konnte. Er musste die Frage an das Entwicklerteam richten, um die Antwort für mich zu erhalten.
Jyao
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.