java – Sql Server 2016:为SQL Server连接启用TLS 1.2

我在 Windows 2012 R2上运行sql Server 2016并且我应用了TLSv1.2支持的补丁并重新启动了VM,https://support.microsoft.com/en-us/help/3135244/tls-1-2-support-for-microsoft-sql-server我确实看到在sql Server VM上使用IISCrypto工具启用了TLS 1.2

我们有Java 8 Web应用程序,我们强制Web应用程序只使用TLS1.2使用JVM参数-Djdk.tls.client.protocols =“TLSv1.2”(如果我删除此JVM参数应用程序连接到sql server罚款),但我们看到下面的错误虽然为sql服务器启用了TLSv1.2

org.apache.commons.dbcp.sqlnestedException: Cannot create PoolableConnectionFactory (The driver Could not establish a secure connection to sql Server by using Secure Sockets Layer (SSL) encryption. Error: "Server chose TLSv1,but that protocol version is not enabled or not supported by the client.". ClientConnectionId:7564b6a1-60c0-4a24-8baa-7bd21f9512cf)

我们还有一个.Net 2.0 Windows服务(在注册表中只启用了TLSv1.2),它也无法连接到sql Server 2016

System.Data.OleDb.OleDbException: [dbnETLIB][Connectionopen (SECCreateCredentials()).]SSL Security error.
at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr,OleDbConnection connection)
at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionoptions options,Object poolGroupProviderInfo,DbConnectionPool pool,DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection,DbConnectionPoolGroup poolGroup)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory)
at System.Data.OleDb.OleDbConnection.open()

但是,如果我在注册表中启用SSL3和TLS1.0,.Net 2.0 Windows服务可以很好地连接到sql Server 2016.

我怀疑,问题是sql Server没有使用TLSv1.2,虽然在sql Server VM上启用了TLSv1.2,如果有更多的配置或补丁需要应用于sql Server以支持TLSv1.2,有人可以帮助我吗?

解决方法

Microsoft Windows Server存储有关Windows Server支持的不同安全性增强通道协议的信息.此信息存储在以下注册表项中:

HKey_Local_Machine\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols

通常,此键包含以下子项:

PCT 1.0,SSL 2.0,SSL 3.0,TLS 1.0 …

每个密钥都包含有关密钥协议的信息.可以在服务器上启用这些协议中的任何一个.为此,您需要在协议的服务器子项中创建新的DWORD值.您将DWORD值设置为“1”.

重要说明:在修改注册表之前备份注册表.然后,您可以在出现问题时还原注册表.

要启用TLS 1.x协议,请执行以下步骤:

单击“开始”,单击“运行”,键入regedt32或键入regedit,然后单击“确定”.
注册表编辑器中,找到以下注册表项:

HKey_Local_Machine\System\CurrentControlSet\Control\SecurityProviders \SCHANNEL\Protocols\TLS 1.x\Server

在“编辑”菜单上,单击“添加值”.
在“数据类型”列表中,单击“DWORD”.
在“值名称”框中,键入“已启用”,然后单击“确定”.

注意如果存在此值,请双击该值以编辑其当前值.

在二进制编辑器中键入11111111,将新键的值设置为“1”.
单击确定.重启电脑.

希望这可以帮助…

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...