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.
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 :
Après avoir activé uniquement TLS 1.2, vous rencontrerez probablement deux erreurs:
De plus, vous devez mettre à jour le pilote SNAC/OBDC sur tous les clients se connectant à SQL Server.
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
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
Bien qu'il soit vrai que SQL a besoin de l'une de ces fonctionnalités, il existe une solution de contournement.