Назад | Перейти на главную страницу

SQL Server 2014, включающий TLS 1.1 вместе с TLS 1.2

У меня есть Windows Server 2012 R2, который является контроллером домена с SQL Server 2014 (Express), обновленным до последней версии SP2 с CU10 12.2.5571.0 (среда тестирования). Я отключил все протоколы кроме TLS1.1 и TLS1.2 установив ключи реестра по пути:

HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols.

Изначально я включил только TLS1.2, но мне также нужен TLS1.1 для обратной совместимости с Java-приложением, работающим на другом компьютере того же домена. Для использования TLS1.2 необходим конкретный драйвер JDBC, а для URL-адреса JDBC должно быть указано свойство (см. Обсуждение Вот).

А пока я хочу, чтобы приложение работало с TLS1.1, поэтому снова включил его. Однако приложение не может подключиться к базе данных, и похоже, что TLS1.1 не используется SQL Server. Чтобы проверить соединение, я попробовал следующие команды:

1) openssl s_client -connect <Server IP>:1433 -ssl3

2) openssl s_client -connect <Server IP>:1433 -tls1_1

3) openssl s_client -connect <Server IP>:1433 -tls_1_2

Тест 1) терпит неудачу, как ожидалось (отказ рукопожатия), в то время как тест 2) занимает некоторое время (около 30 секунд или более) для получения успешного ответа. Тест 3) дает успешный результат, как и ожидалось.

Я также пробовал использовать Management Studio с клиентского компьютера, и соединение работает, только если TLS1.2 включен как на клиенте, так и на сервере. В противном случае, если включен только TLS1.1, отображается следующая ошибка:

Соединение с сервером было успешно установлено, но во время входа в систему произошла ошибка. (поставщик: поставщик SSL, ошибка: 0 - клиент и сервер не могут взаимодействовать, потому что у них нет общего алгоритма.)

Как это возможно?

Мне нужно принудительно что-то использовать в защищенном канале?

Почему SQL Server больше не разрешает подключения TLS1.1?

Протокол - это не то же самое, что алгоритм.

Независимо от того, как вы настраиваете SQL Server, ОС должна поддерживать протоколы и алгоритмы.

Для получения дополнительной информации прочтите: https://blogs.msdn.microsoft.com/sql_protocols/2007/06/29/ssl-cipher-suites-used-with-sql-server/

Определите протокол самого высокого уровня, взаимно поддерживаемый клиентом и сервером. В настоящее время распознаются протоколы, от самого высокого до самого низкого: TLS1.1, TLS1.0, SSL3.0, SSL2.0. Клиент предоставит серверу список своих наборов шифров из согласованного протокола. Сервер выберет самый надежный шифр. набор, который он может поддерживать из списка клиентов.

Вы можете найти дополнительную информацию о передовых методах использования SSL здесь. https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices

Если вам неудобно возиться с реестром Windows, вы можете использовать бесплатный инструмент Nartact. IIS Crypto для настройки вашего сервера Windows. Часть IIS не имеет значения. Этот инструмент фактически настраивает ОС.

Я проверил, что для использования протокола TLS1.1 необходимо установить следующие ключи:

  • SHA хэш включен (Включено ключ установлен на 1)

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\SHA

  • TLS 1.0 протокол включен (Включено ключ установлен на 1 и DisabledByDefault установлено значение 0 как для клиента, так и для сервера)

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server

ПРИМЕЧАНИЕ. После изменения этих ключей перезагрузите устройство, чтобы сбросить соединение по защищенному каналу.

Если либо хэш SHA, либо протокол TLS 1.0 отключены, протокол TLS 1.1 перестает работать по неизвестным причинам.