Настройте ядро базы данных СУБД SQL Server для шифрования подключений
Область применения: SQL Server — только Для Windows
Вы можете зашифровать все входящие подключения к SQL Server или включить шифрование только для определенного набора клиентов. Для любого из этих сценариев сначала необходимо настроить SQL Server для использования сертификата, соответствующего требованиям к сертификату ДЛЯ SQL Server , прежде чем выполнять дополнительные действия на серверном компьютере или клиентских компьютерах для шифрования данных.
Примечание.
Эта статья относится к SQL Server в Windows. Сведения о настройке SQL Server на Linux для шифрования подключений см. в разделе "Указание параметров TLS".
В этой статье описывается настройка SQL Server для сертификатов (шаг 1) и изменение параметров шифрования экземпляра SQL Server (шаг 2). Оба шага необходимы для шифрования всех входящих подключений к SQL Server при использовании сертификата из общедоступного коммерческого центра. Другие сценарии см. в специальных случаях для шифрования подключений к SQL Server.
Шаг 1. Настройка SQL Server для использования сертификатов
Чтобы настроить SQL Server для использования сертификатов, описанных в требованиях к сертификату для SQL Server, выполните следующие действия.
- Установите сертификат на компьютере под управлением SQL Server.
- Настройте SQL Server для использования установленного сертификата.
В зависимости от версии Диспетчера конфигурации SQL Server, к которому у вас есть доступ на компьютере SQL Server, используйте одну из следующих процедур для установки и настройки экземпляра SQL Server.
Компьютеры с диспетчером конфигурации SQL Server для SQL Server 2019 и более поздних версий
В SQL Server 2019 (15.x) и более поздних версиях управление сертификатами интегрировано в диспетчер конфигурации SQL Server и может использоваться с более ранними версиями SQL Server. Сведения о добавлении сертификата в одном экземпляре SQL Server в конфигурации отказоустойчивого кластера или в конфигурации группы доступности см. в разделе "Управление сертификатами" (диспетчер конфигурации SQL Server). Configuration Manager значительно упрощает управление сертификатами, заботясь об установке сертификата и настройке SQL Server для использования установленного сертификата с помощью всего нескольких шагов.
Сертификаты хранятся локально на пользовательских компьютерах. Чтобы установить сертификат для использования SQL Server, необходимо запустить диспетчер конфигурации SQL Server с учетной записью с правами локального администратора.
Вы можете временно установить версию Express SQL Server 2019 (15.x) или более позднюю версию для использования Диспетчера конфигурации SQL Server, который поддерживает интегрированное управление сертификатами.
Компьютеры с диспетчером конфигурации SQL Server для SQL Server 2017 и более ранних версий
Если вы используете SQL Server 2017 (14.x) или более раннюю версию, а диспетчер конфигурации SQL Server для SQL Server 2019 (15.x) недоступна, выполните следующие действия, чтобы установить и настроить сертификат на компьютере SQL Server:
- В меню Пуск выберите команду Выполнить, в окне Открыть введите MMC и нажмите кнопку ОК.
- В консоли MMC в меню "Файл" выберите "Добавить/удалить оснастку...".
- В диалоговом окне Добавление или удаление оснастки выберите Сертификаты, затем выберите Добавить.
- В диалоговом окне "Сертификаты" выберите Учетная запись компьютера, затем выберите Далее>Готово.
- В диалоговом окне "Добавление или удаление оснастки" нажмите кнопку "ОК".
- В консоли MMC разверните раздел "Сертификаты (локальный компьютер)>Личные", щелкните правой кнопкой мыши сертификаты, наведите указатель на все задачи и выберите "Импорт".
- Завершите работу мастера импорта сертификатов, чтобы добавить сертификат на компьютер.
- В консоли MMC щелкните правой кнопкой мыши импортированный сертификат, наведите указатель на все задачи и выберите "Управление закрытыми ключами". В диалоговом окне Безопасность добавьте разрешение на чтение для учетной записи пользователя, используемой учетной записью службы SQL Server.
- В Диспетчер конфигурации SQL Server разверните Конфигурация сети SQL Server, щелкните правой кнопкой мыши Протоколы для экземпляра сервера> и выберите "Свойства".
- В диалоговом окне "Протоколы для свойства имени экземпляра" на вкладке "Сертификат" выберите нужный сертификат в раскрывающемся списке для поля "Сертификат" и нажмите ОК.
- Если требуется шифрование всех подключений к SQL Server, см . шаг 2. Настройка параметров шифрования в SQL Server. Если требуется включить шифрование только для определенных клиентов, перезапустите службу SQL Server и ознакомьтесь со специальными случаями для шифрования подключений к SQL Server.
Примечание.
Чтобы установить сертификаты в конфигурации группы доступности, повторите предыдущую процедуру на каждом узле в группе доступности, начиная с основного узла.
Внимание
Учетная запись службы SQL Server должна иметь разрешения на чтение сертификата, используемого для принудительного шифрования экземпляра SQL Server. Для не привилегированной учетной записи службы необходимо добавить разрешения на чтение в сертификат. Несоблюдение этого требования может привести к сбою перезапуска службы SQL Server.
Дополнительная процедура для экземпляров отказоустойчивого кластера
Сертификат, используемый SQL Server для шифрования подключений, указан в следующем разделе реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.x\MSSQLServer\SuperSocketNetLib\Certificate
Этот ключ содержит свойство сертификата, известного как отпечаток, который идентифицирует каждый сертификат на сервере. В кластеризованной среде этот ключ задается Null
, даже если правильный сертификат существует в хранилище. Чтобы устранить эту проблему, необходимо выполнить следующие дополнительные действия по каждому из узлов кластера после установки сертификата на каждый узел:
Перейдите в хранилище сертификатов, где хранится полный сертификат доменного имени (FQDN). На странице свойств сертификата перейдите на вкладку "Сведения " и скопируйте значение отпечатка сертификата в окно Блокнота .
Удалите пробелы между шестнадцатеричными символами в значении отпечатка в Блокноте.
Запустите редактор реестра, перейдите к следующему разделу реестра и вставьте значение из шага 2.
HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib\Certificate
Если виртуальный сервер SQL в настоящее время находится на этом узле, перенесите его на другой узел в вашем кластере и выполните перезапуск узла, на котором произошло изменение реестра.
Повторите эту процедуру на всех узлах.
Предупреждение
Неправильное изменение реестра может серьезно повредить вашу систему. Прежде чем вносить изменения в реестр, рекомендуется создать резервную копию всех значений данных на компьютере.
Примечание.
SQL Server 2008 R2 (10.50.x) и SQL Server 2008 R2 (10.50.x) Native Client (SNAC) поддерживают подстановочные сертификаты. SNAC устарел и был заменен на Microsoft OLE DB Driver for SQL Server и Microsoft ODBC Driver for SQL Server. Другие клиенты могут не поддерживать универсальные сертификаты.
Нельзя выбрать подстановочный сертификат с помощью диспетчера конфигурации SQL Server. Чтобы использовать сертификат с подстановочным знаком, нужно изменить раздел реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQLServer\SuperSocketNetLib
, и ввести отпечаток сертификата без пробелов в значение Сертификат.
Примечание.
Чтобы использовать шифрование в отказоустойчивом кластере, необходимо установить сертификат сервера с полным именем DNS виртуального сервера на все узлы отказоустойчивого кластера. Для параметра ForceEncryption в поле свойства Протоколы для virtsql в окне Сетевая конфигурация SQL Server можно выбрать значение Да.
При создании зашифрованных подключений для индексатора поиска Azure к SQL Server на виртуальной машине Azure см. Подключения индексатора к экземпляру SQL Server на виртуальной машине Azure.
Шаг 2. Настройка параметров шифрования в SQL Server
Следующие действия требуются только в том случае, если вы хотите принудительно зашифровать зашифрованные сообщения для всех клиентов:
- В диспетчере конфигурации SQL Server разверните Настройка сети SQL Server, щелкните правой кнопкой мыши Протоколы для <экземпляра> сервера, и затем выберите Свойства.
- На вкладке Флаги в поле ForceEncryption выберите Да, затем нажмите кнопку ОК, чтобы закрыть диалоговое окно.
- Перезапустите службу SQL Server.
Примечание.
В некоторых сценариях сертификатов может потребоваться выполнить дополнительные действия на клиентском компьютере и в клиентском приложении, чтобы обеспечить зашифрованные подключения между клиентом и сервером. Дополнительные сведения см. в специальных случаях шифрования подключений к SQL Server.
Дополнительные сведения
Шифрование пакетов входа и шифрование пакетов данных
На высоком уровне существует два типа пакетов в сетевом трафике между клиентским приложением SQL Server и SQL Server: пакетами учетных данных (пакетами входа) и пакетами данных. При настройке шифрования (на стороне сервера или на стороне клиента) оба этих типа пакетов всегда шифруются. Но даже если шифрование не настроено, учетные данные (в пакете входа), передаваемые при подключении клиентского приложения к SQL Server, всегда шифруются. SQL Server использует сертификат, соответствующий требованиям к сертификату из доверенного центра сертификации, если он доступен. Этот сертификат настраивается системным администратором вручную, используя одну из процедур, описанных ранее в статье, или присутствует в хранилище сертификатов на компьютере SQL Server.
Сертификаты, созданные SQL Server с самоподписью
SQL Server использует сертификат из доверенного центра сертификации, если он доступен для шифрования пакетов входа. Если доверенный сертификат не установлен, SQL Server создает самозаверяющий сертификат (резервный сертификат) во время запуска и использует самозаверяющий сертификат для шифрования учетных данных. Этот самозаверяющий сертификат помогает повысить безопасность, но он не защищает от подделки личности сервером. Если используется самозаверяющий сертификат, а значение параметра ForceEncryption имеет значение "Да", все данные, передаваемые через сеть между SQL Server и клиентским приложением, шифруются с помощью самозаверяющего сертификата.
При использовании самозаверяющего сертификата SQL Server записывает следующее сообщение в журнал ошибок:
Самостоятельно сформированный сертификат успешно загружен для шифрования.
SQL Server 2016 (13.x) и более ранних версиях используют алгоритм SHA1. Однако алгоритм SHA1 и многие старые алгоритмы устарели, начиная с SQL Server 2016 (13.x). Дополнительные сведения см. в статье Устаревшие функции в ядре СУБД в SQL Server 2016 (13.x).
В этих средах, если вы используете автоматически созданный самозаверяющий сертификат, созданный SQL Server, либо только для предварительного рукопожатия, либо для шифрования всех обменов данными между сервером и клиентом, программное обеспечение для обнаружения уязвимостей, программное обеспечение безопасности или политики компании могут пометить это как проблему безопасности. Для этих сценариев доступны следующие варианты.
- Создайте самозаверяющий сертификат или сторонний сертификат, который использует более строгие алгоритмы шифрования и настройте SQL Server для использования этого нового сертификата.
- Так как теперь вы понимаете причину флага, вы можете игнорировать сообщение (не рекомендуется).
- Обновление до SQL Server 2017 (14.x) или более поздней версии, которая использует более строгий хэш-алгоритм (SHA256) для самозаверяющих сертификатов.
Скрипт PowerShell для создания самозаверяющего сертификата для SQL Server
Следующий фрагмент кода можно использовать для создания самозаверяющего сертификата на компьютере под управлением SQL Server. Сертификат соответствует требованиям шифрования для автономного экземпляра SQL Server и сохраняется в хранилище сертификатов локального компьютера (PowerShell должен быть запущен в качестве администратора):
# Define parameters
$certificateParams = @{
Type = "SSLServerAuthentication"
Subject = "CN=$env:COMPUTERNAME"
DnsName = @("$($env:COMPUTERNAME)", $([System.Net.Dns]::GetHostEntry('').HostName), 'localhost')
KeyAlgorithm = "RSA"
KeyLength = 2048
HashAlgorithm = "SHA256"
TextExtension = "2.5.29.37={text}1.3.6.1.5.5.7.3.1"
NotAfter = (Get-Date).AddMonths(36)
KeySpec = "KeyExchange"
Provider = "Microsoft RSA SChannel Cryptographic Provider"
CertStoreLocation = "cert:\LocalMachine\My"
}
# Call the cmdlet
New-SelfSignedCertificate @certificateParams
Проверка шифрования сети
Чтобы убедиться, что шифрование сети настроено и включено успешно, выполните следующий запрос Transact-SQL:
USE [master];
GO
SELECT DISTINCT (encrypt_option)
FROM sys.dm_exec_connections
WHERE net_transport <> 'Shared memory';
GO
Столбец encrypt_option
— это логическое значение, указывающее, включено ли шифрование для этого подключения. Если значение равно TRUE
, подключение безопасно зашифровано. Если значение равно FALSE
, подключение не шифруется.
Поведение сертификата SQL Server с разрешениями
Служба SQL Server обнаруживает и использует сертификат автоматически для шифрования, если выполняются все следующие условия:
- Сертификат имеет тему, содержащую полное доменное имя компьютера.
- Сертификат устанавливается в хранилище сертификатов локального компьютера
- Учетной записи службы SQL Server предоставлен доступ к закрытому ключу сертификата.
Это происходит, даже если сертификат не выбран в диспетчере конфигурации SQL Server.
Чтобы переопределить это поведение, выполните одно из следующих действий:
Настройка другого сертификата для использования в диспетчер конфигурации SQL Server
или
Удаление разрешений учетной записи службы SQL Server для нежелательного сертификата