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

前端之家收集整理的这篇文章主要介绍了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相关文章