web-dev-qa-db-fra.com

Le service SQL Server ne démarre pas après la désactivation de TLS 1.0 et SSL 3.0

Pour des raisons de sécurité, nous avons désactivé TLS 1.0 et les protocoles plus anciens sur nos fenêtres, et activé uniquement TLS 1.1 et TLS 1.2 sous le chemin de registre suivant: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols Après cela, le service SQL a gagné ne commencez pas par l'erreur suivante:

2015-02-13 17:35:10.12 spid13s     The server could not load the certificate it needs to initiate an SSL connection. It returned the following error: 0x80090331. Check certificates to make sure they are valid.
2015-02-13 17:35:10.12 spid13s     Error: 26014, Severity: 16, State: 1.
2015-02-13 17:35:10.12 spid13s     Unable to load user-specified certificate [Cert Hash(sha1) "9B49E2FB65EE880F7C8818A90187F572566C9213"]. The server will not accept a connection. You should verify that the certificate is correctly installed. See "Configuring Certificate for Use by SSL" in Books Online.
2015-02-13 17:35:10.12 spid13s     Error: 17182, Severity: 16, State: 1.
2015-02-13 17:35:10.12 spid13s     TDSSNIClient initialization failed with error 0x80092004, status code 0x80. Reason: Unable to initialize SSL support. Cannot find object or property. 
2015-02-13 17:35:10.12 spid13s     Error: 17182, Severity: 16, State: 1.
2015-02-13 17:35:10.12 spid13s     TDSSNIClient initialization failed with error 0x80092004, status code 0x1. Reason: Initialization failed with an infrastructure error. Check for previous errors. Cannot find object or property. 
2015-02-13 17:35:10.12 spid13s     Error: 17826, Severity: 18, State: 3.
2015-02-13 17:35:10.12 spid13s     Could not start the network library because of an internal error in the network library. To determine the cause, review the errors immediately preceding this one in the error log.
2015-02-13 17:35:10.12 spid13s     Error: 17120, Severity: 16, State: 1.
2015-02-13 17:35:10.12 spid13s     SQL Server could not spawn FRunCommunicationsManager thread. Check the SQL Server error log and the Windows event logs for information about possible related problems.

Dans le gestionnaire d'événements, nous pouvons voir le flux suivant (avec la journalisation Schannel augmentée):

Info – Schannel – Creating an SSL client credential.
Info – Schannel – Creating an SSL server credential.
Error - Schannel - A fatal error occurred while creating an SSL client credential. The internal error state is 10013.

L'erreur Schannel détaillée:

<Event xmlns="http://schemas.Microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Schannel" Guid="{1F678132-5938-4686-9FDC-C8FF68F15C85}" /> 
    <EventID>36871</EventID> 
    <Version>0</Version> 
    <Level>2</Level> 
    <Task>0</Task> 
    <Opcode>0</Opcode> 
    <Keywords>0x8000000000000000</Keywords> 
    <TimeCreated SystemTime="2015-02-16T15:22:16.166776400Z" /> 
    <EventRecordID>5943102</EventRecordID> 
    <Correlation /> 
    <Execution ProcessID="712" ThreadID="772" /> 
    <Channel>System</Channel> 
    <Computer>(deleted)</Computer> 
    <Security UserID="S-1-5-18" /> 
  </System>
  <EventData>
    <Data Name="Type">server</Data> 
    <Data Name="ErrorState">10013</Data> 
  </EventData>
</Event>

Grâce à WireShark, nous ne pouvons voir aucun message Bonjour du client ou du serveur. Il semble que l'erreur se produise avant la négociation TLS - probablement lors de l'analyse du certificat du serveur.

À l'aide de ProccessMonitor, nous voyons le service sqlserver.exe lit le certificat à partir du Registre, puis lit les CRL (aucun), CTL (aucun), puis suit le premier message du journal des erreurs. Voici les derniers journaux de ProcMon avant la première erreur de journal:

12:22:09.8165314 PM sqlservr.exe    23256   RegCloseKey HKLM\SOFTWARE\Microsoft\SystemCertificates\MY\Certificates  SUCCESS 
12:22:09.8165667 PM sqlservr.exe    23256   RegQueryKey HKLM\SOFTWARE\Microsoft\SystemCertificates\MY\CRLs  SUCCESS Query: Cached, SubKeys: 0, Values: 0
12:22:09.8166280 PM sqlservr.exe    23256   RegQueryKey HKLM\SOFTWARE\Microsoft\SystemCertificates\MY\CTLs  SUCCESS Query: Cached, SubKeys: 0, Values: 0
12:31:01.0048783 PM sqlservr.exe    9928    RegCloseKey HKLM\SOFTWARE\Microsoft\SystemCertificates\MY   SUCCESS 
12:22:09.8177144 PM sqlservr.exe    23256   WriteFile   C:\Program Files\Microsoft SQL Server\MSSQL11.SQLSERVER2014\MSSQL\Log\ERRORLOG  SUCCESS Offset: 7,530, Length: 422

Nous avons également essayé de configurer le serveur SQL avec un certificat de Verisign (essai de 30 jours). Nous avons défini tous les paramètres comme décrit ici

Et nous avons également suivi la réponse comme indiqué ici (arrivé par référence de ici ).

Malheureusement, pas de chance. Toujours la même erreur.

Nous avons également essayé de désactiver le "Forcer le chiffrement" dans le gestionnaire de configuration SQL et nous en avons supprimé le certificat, mais le serveur SQL essaie toujours de créer un certificat auto-signé et échoue avec le même code d'erreur 0x80090331.

Je sais qu'une question similaire est publiée ici , mais elle est auto-acceptée sans désactiver le TLS 1.0:

Encore une note, avec les mêmes paramètres et le même certificat, lorsque TLS 1.0 est ACTIVÉ, alors tout fonctionne bien. Lorsque le TLS 1.0 est DÉSACTIVÉ, il échoue. Il semble donc que le TLS 1.1+ n'aime pas quelque chose dans notre certificat, ou que SQL Server n'aime pas le TLS 1.1+.

Nous ne pouvons pas autoriser l'activation de TLS 1.0. Toute aide serait très appréciée.

22
Jiri Mares

Comme dans l'autre réponse: vous avez besoin d'une CU récente pour TLS1.2. Voir https://support.Microsoft.com/en-us/kb/3052404 :

  • Mise à jour cumulative 8 pour SQL Server 2014
  • Mise à jour cumulative 1 pour SQL Server 2014 SP1
  • Mise à jour cumulative 6 pour SQL Server 2012 SP2
  • Mise à jour cumulative 7 pour SQL Server 2014

Après avoir activé uniquement TLS 1.2, vous rencontrerez probablement deux erreurs:

  1. L'agent SQL Server 2014 ne démarre pas. Solution: installez SNAC SQL Server 2012 à partir de l'une des UC 2012 ...
  2. SQL Server Management Studio ne peut pas se connecter. Solution: installez .net Framework v4.6.

De plus, vous devez mettre à jour le pilote SNAC/OBDC sur tous les clients se connectant à SQL Server.

15
Jens W.

SQL Server ne prend en charge que SSL 3.0 et TLS 1.0, vous devez en avoir au moins un activé sinon SQL Server ne pourra pas démarrer. SQL Server ne prend pas en charge TLS 1.1, 1.2, etc., il utilise spécifiquement TLS 1.0.

Vos options ici sont d'activer SSL 3.0 et/ou TLS 1.0, pas d'autre moyen, je le crains.

Tapis de joie

8
Mat

Depuis le 29 janvier, Microsoft SQL Server prend en charge TLS 1.2 pour SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 et SQL Server 2014 et les principaux pilotes clients comme Server Native Client, Microsoft ODBC Driver for SQL Server, Microsoft JDBC Driver pour SQL Server et ADO.NET (SqlClient).

Article de blog sur la version: http://blogs.msdn.com/b/sqlreleaseservices/archive/2016/01/29/tls-1-2-support-for-sql-server-2008-2008- r2-2012-et-2014.aspx

Liste des versions prenant en charge TLS 1.2 ainsi que les emplacements de téléchargement des composants client et serveur (KB3135244): http://support.Microsoft.com/kb/3135244

6
Amit Banerjee

Bien qu'il soit vrai que SQL a besoin de l'une de ces fonctionnalités, il existe une solution de contournement.

  • Ouvrez gpedit.msc. Dans l'éditeur de stratégie de groupe locale, double-cliquez sur Paramètres Windows sous le nœud Configuration ordinateur, puis double-cliquez sur Paramètres de sécurité.
  • Sous le nœud Paramètres de sécurité, double-cliquez sur Stratégies locales, puis cliquez sur Options de sécurité.
  • Dans le volet d'informations, double-cliquez sur Cryptographie système: utilisez des algorithmes compatibles FIPS pour le cryptage, le hachage et la signature.
  • Dans la boîte de dialogue Cryptographie système: utilisez des algorithmes compatibles FIPS pour le cryptage, le hachage et la signature, cliquez sur Activé, puis sur OK pour fermer la boîte de dialogue. Fermez l'éditeur de stratégie de groupe locale.
4
rmathus