Jir*_*res 22 sql-server sql-server-2008-r2 encryption ssl
出于安全原因,我们在windows上禁用了TLS 1.0和旧协议,在以下注册表路径下只启用了TLS 1.1和TLS 1.2:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols 之后,SQL服务赢了'不以以下错误开头:
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.
Run Code Online (Sandbox Code Playgroud)
在事件管理器中,我们可以看到以下流程(增加了 Schannel 日志记录):
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.
Run Code Online (Sandbox Code Playgroud)
Schannel错误详述:
<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>
Run Code Online (Sandbox Code Playgroud)
使用 WireShark,我们看不到任何 Client 或 Server Hello 消息。错误似乎发生在 TLS 协商之前 - 可能是在解析服务器证书期间。
使用 ProccessMonitor,我们看到 sqlserver.exe 服务从注册表读取证书,然后读取 CRL(无)、CTL(无),然后跟随第一条错误日志消息。以下是第一个日志错误之前 ProcMon 的最后几个日志:
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
Run Code Online (Sandbox Code Playgroud)
我们还尝试使用 Verisign 的证书设置 SQL 服务器(30 天试用)。我们已按照此处所述设置所有设置
我们也按照此处所示的答案进行操作(通过此处的参考到达那里)。
不幸的是,没有运气。还是一样的错误。
我们还尝试禁用 SQL 配置管理器中的“强制加密”,并从中删除了证书,但 SQL 服务器仍然尝试创建自签名证书并失败,并显示相同的错误代码 0x80090331。
我知道这里发布了一个类似的问题,但它在不禁用 TLS 1.0 的情况下自我接受:
还要注意的是,使用相同的设置和相同的证书,当启用 TLS 1.0 时,一切正常。当 TLS 1.0 被禁用时,它就会失败。因此,似乎 TLS 1.1+ 不喜欢我们证书中的某些内容,或者 SQL Server 不喜欢 TLS 1.1+。
我们不允许启用 TLS 1.0。任何帮助将非常感激。
Jen*_* W. 15
与另一个答案一样:您需要一个最近的 TLS1.2 CU。请参阅https://support.microsoft.com/en-us/kb/3052404:
仅启用 TLS 1.2 后,您可能会遇到两个错误:
此外,您必须更新所有连接到 SQL Server 的客户端上的 SNAC/OBDC 驱动程序。
小智 8
SQL Server 仅支持 SSL 3.0 和 TLS 1.0,您必须至少启用其中之一,否则 SQL Server 将无法启动。SQL Server 不支持 TLS 1.1、1.2 等,它专门使用 TLS 1.0。
您在这里的选择是启用 SSL 3.0 和/或 TLS 1.0,恐怕没有其他办法了。
干杯垫
截至 1 月 29 日,Microsoft SQL Server 支持 SQL Server 2008、SQL Server 2008 R2、SQL Server 2012 和 SQL Server 2014 的 TLS 1.2 以及主要的客户端驱动程序,如 Server Native Client、Microsoft ODBC Driver for SQL Server、Microsoft JDBC Driver for SQL Server和 ADO.NET (SqlClient)。
关于发布的博客文章:http : //blogs.msdn.com/b/sqlreleaseservices/archive/2016/01/29/tls-1-2-support-for-sql-server-2008-2008-r2-2012- and-2014.aspx
支持 TLS 1.2 的版本列表以及客户端和服务器组件下载位置 (KB3135244):http : //support.microsoft.com/kb/3135244
| 归档时间: |
|
| 查看次数: |
109200 次 |
| 最近记录: |