Бөлісу құралы:


Настройка ядро СУБД 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, выполните следующие действия.

  1. Установите сертификат на компьютере под управлением SQL Server.
  2. Настройте 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 с учетной записью с правами локального администратора.

Вы можете временно установить выпуск 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:

  1. В меню Пуск выберите команду Выполнить, в окне Открыть введите MMC и нажмите кнопку ОК.
  2. В консоли MMC в меню "Файл" выберите "Добавить/удалить оснастку...".
  3. В диалоговом окне "Добавление или удаление оснастки" выберите "Сертификаты" и нажмите кнопку "Добавить".
  4. В диалоговом окне "Сертификаты" выберите учетную запись компьютера и нажмите кнопку "Далее>готово".
  5. В диалоговом окне "Добавление или удаление оснастки" нажмите кнопку "ОК".
  6. В консоли MMC разверните раздел "Сертификаты (локальный компьютер)>Личные", щелкните правой кнопкой мыши сертификаты, наведите указатель на все задачи и выберите "Импорт".
  7. Завершите работу мастера импорта сертификатов, чтобы добавить сертификат на компьютер.
  8. В консоли MMC щелкните правой кнопкой мыши импортированный сертификат, наведите указатель на все задачи и выберите "Управление закрытыми ключами". В диалоговом окне Безопасность добавьте разрешение на чтение для учетной записи пользователя, используемой учетной записью службы SQL Server.
  9. В диспетчер конфигурации SQL Server разверните конфигурацию сети SQL Server, щелкните правой кнопкой мыши протоколы для <экземпляра> сервера и выберите "Свойства".
  10. В диалоговом окне "Протоколы для <свойств имени> экземпляра" на вкладке "Сертификат" выберите нужный сертификат в раскрывающемся списке для поля "Сертификат" и нажмите кнопку "ОК".
  11. Если требуется шифрование всех подключений к 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 , даже если правильный сертификат существует в хранилище. Чтобы устранить эту проблему, необходимо выполнить следующие дополнительные действия по каждому из узлов кластера после установки сертификата на каждый узел:

  1. Перейдите в хранилище сертификатов, где хранится полный сертификат доменного имени (FQDN). На странице свойств сертификата перейдите на вкладку "Сведения " и скопируйте значение отпечатка сертификата в окно Блокнота .

  2. Удалите пробелы между шестнадцатеричными символами в значении отпечатка в Блокноте.

  3. Запустите редактор реестра, перейдите к следующему разделу реестра и вставьте значение из шага 2.

    HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib\Certificate

  4. Если виртуальный сервер SQL в настоящее время находится на этом узле, отработка отказа на другой узел в кластере и перезапуск узла, на котором произошло изменение реестра.

  5. Повторите эту процедуру на всех узлах.

Предупреждение

Неправильное изменение реестра может вызвать серьезные проблемы. Прежде чем вносить изменения в реестр, рекомендуется создать резервную копию всех значений данных на компьютере.

Примечание.

SQL Server 2008 R2 (10.50.x) и SQL Server 2008 R2 (10.50.x) поддерживают подстановочные сертификаты. Интерфейс 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

Следующие действия требуются только в том случае, если вы хотите принудительно зашифровать зашифрованные сообщения для всех клиентов:

  1. В диспетчер конфигурации SQL Server разверните конфигурацию сети SQL Server, щелкните правой кнопкой мыши протоколы для <экземпляра> сервера и выберите пункт "Свойства".
  2. На вкладке Флаги в поле ForceEncryption выберите Да, затем нажмите кнопку ОК, чтобы закрыть диалоговое окно.
  3. Перезапустите службу 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 = @("{0}" -f [System.Net.Dns]::GetHostByName($env:computerName).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;
GO

Столбец encrypt_option — это логическое значение, указывающее, включено ли шифрование для этого подключения. Если значение равно TRUE, подключение безопасно зашифровано. Если значение равно FALSE, подключение не шифруется.

Поведение сертификата SQL Server с разрешениями

Служба SQL Server обнаруживает и использует сертификат автоматически для шифрования, если выполняются все следующие условия:

  • Сертификат имеет тему, содержащую полное доменное имя компьютера.
  • Сертификат устанавливается в хранилище сертификатов локального компьютера
  • Учетная запись службы SQL Server предоставляется доступ к закрытому ключу сертификата.

Это происходит, даже если сертификат не выбран в диспетчер конфигурации SQL Server.

Чтобы переопределить это поведение, выполните следующие действия:

  • Настройка другого сертификата для использования в диспетчер конфигурации SQL Server

    or

  • Удаление разрешений учетной записи службы SQL Server для нежелательного сертификата