Шифрование соединений с SQL Server

SQL Server поддерживает протокол SSL и совместим с протоколом IPSec.

Протокол SSL

В Microsoft SQL Server поддерживается использование протокола SSL для шифрования данных, которыми обмениваются по сети экземпляр SQL Server и клиентское приложение. Шифрование SSL выполняется на уровне протокола и доступно всем клиентам SQL Server, за исключением библиотеки DB и клиентов MDAC 2.53.

Протокол SSL можно использовать для проверки сервера, если для соединения клиента требуется шифрование. Если экземпляр SQL Server запущен на компьютере, которому выдан сертификат общего центра сертификации, то идентификатор компьютера и экземпляра SQL Server подтверждается цепочкой сертификатов, ведущей к доверенному корневому центру сертификации. Для выполнения такой проверки необходимо, чтобы компьютер, на котором запущено клиентское приложение, был настроен для доверия корневому центру сертификации, который использует сервер. Допускается шифрование с использованием самозаверяющих сертификатов (см. следующий раздел), однако такие сертификаты обеспечивают ограниченную защиту.

Уровень шифрования, который используется протоколом SSL (40- или 128-разрядное), зависит от версии операционной системы Microsoft Windows, установленной на компьютерах клиента и базы данных.

Шифрование SSL повышает защищенность обмена данными по сети между экземплярами SQL Server и приложениями. Включение шифрования не снижает производительности. Если между SQL Server и клиентским с помощью SSL шифруется весь трафик, то требуется следующая дополнительная обработка.

  • Во время подключения требуется дополнительный цикл обращений по сети.

  • Пакеты, передаваемые от приложения экземпляру SQL Server, должны шифроваться клиентской сетевой библиотекой и расшифровываться серверной сетевой библиотекой.

  • Пакеты, передаваемые от экземпляра SQL Server приложению, должны шифроваться сетевой библиотекой сервера и расшифровываться клиентской сетевой библиотекой.

Настройка протокола SSL для сервера SQL Server

В следующей процедуре описана настройка SSL в SQL Server.

Настройка SSL

  1. Установите сертификат в хранилище сертификатов Windows на сервере.

  2. В меню Пуск в программной группе Microsoft SQL Server выберите Средства настройки и щелкните Диспетчер конфигурации SQL Server.

  3. Разверните узел Сетевая конфигурация SQL Server, щелкните правой кнопкой мыши протоколы для нужного сервера и выберите Свойства.

    ПримечаниеПримечание

    Это раздел Протоколы для<instance_name> на левой панели средства, а не отдельный протокол на правой панели.

  4. На вкладке Сертификат настройте компонент Database Engine для использования сертификата.

  5. На вкладке Флаги просмотрите или задайте параметр шифрования протокола. Пакет входа всегда будет зашифрован.

    • Если параметр ForceEncryption в компоненте Database Engine установлен в Да, все данные, которыми обмениваются клиент и сервер, шифруются, поэтому клиентам, не поддерживающим шифрование, доступ запрещен.

    • Если параметр ForceEncryption компонента Database Engine установлен в Нет, клиентское приложение может запросить шифрование, однако оно не требуется.

    • После изменения значения параметра ForceEncryption необходимо перезапустить SQL Server.

    Учетные данные (в пакете входа), передаваемые при соединении клиентского приложения с SQL Server, всегда зашифрованы. SQL Server будет использовать сертификат доверенного корневого центра сертификации, если он есть. Если доверенный сертификат не установлен, то SQL Server сформирует самозаверяющий сертификат при запуске экземпляра и будет шифровать учетные данные с его помощью. Такой самозаверяющий сертификат повышает безопасность, но не обеспечивает защиту от имитации удостоверения сервером. Если используется самозаверяющий сертификат, а параметр ForceEncryption имеет значение Yes, то с помощью такого самозаверяющего сертификата будут зашифрованы все данные, переданные по сети между SQL Server и клиентским приложением.

    ПредупреждениеВнимание!

    Соединения SSL, зашифрованные с помощью самозаверяющего сертификата, не обеспечивают надежную защиту. Они чувствительны к атакам «злоумышленник в середине». Не следует надеяться на защиту SSL с сертификатами с собственной подписью в производственной среде или на серверах, подключенных к сети Интернет.

Требования к сертификатам

Для загрузки SSL-сертификата в SQL Server сертификат должен удовлетворять следующим условиям.

  • Сертификат должен находиться в хранилище сертификатов локального компьютера или текущего пользователя.

  • Текущее системное время должно быть больше значения свойства сертификата Valid from и быть меньше значения свойства сертификата Valid to.

  • Сертификат должен быть предназначен для проверки подлинности сервера. Для этого свойство Enhanced Key Usage сертификата должно быть установлено в значение Server Authentication (1.3.6.1.5.5.7.3.1).

  • Сертификат должен быть создан со значением KeySpec параметра AT_KEYEXCHANGE. Обычно в свойстве использования ключа сертификата (KEY_USAGE) также предусмотрено шифрование ключа (CERT_KEY_ENCIPHERMENT_KEY_USAGE).

  • Свойство Subject сертификата должно указывать, что общее имя (CN) совпадает с именем узла или полным доменным именем (FQDN) сервера. Если SQL Server выполняется в кластере отработки отказа, общее имя должно совпадать с именем узла или полным доменным именем виртуального сервера, а сертификаты должны быть предоставлены всем узлам отказоустойчивого кластера.

  • SQL Server 2008 R2 и собственный клиент SQL Server 2008 R2 поддерживают сертификаты на основе шаблонов. Другие клиенты могут не поддерживать сертификаты на основе шаблонов. Дополнительные сведения см. в документации по клиенту и в статье базы знаний KB258858.

Требования собственного клиента SQL Server к сертификатам

Приложения, использующие "SERVER=shortname; ENCRYPT=yes" с сертификатами, где в cубъектах указаны полные доменные имена (FQDN), ранее выполняли соединение благодаря ослабленной проверке. SQL Server 2008 R2 расширяет защиту, включая проверку точного соответствия субъектов сертификатам. В приложениях, где используется ослабленная проверка, необходимо предпринять следующие меры.

  • Используйте FQDN в строке соединения.

    • Этот параметр не требует повторной компиляции приложения, если ключевое слово SERVER в строке соединения настраивается отдельно от него.

    • Этот параметр не работает в приложениях, где строка соединения жестко задана в коде.

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

  • Чтобы обеспечить соответствие FQDN, добавьте для короткого имени псевдоним.

    • Этот параметр работает даже в тех приложениях, у которых строка соединения жестко задана в коде.

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

  • Получите сертификат для короткого имени.

    • Этот параметр работает во всех приложениях.

Шифрование в кластере

Для применения шифрования в кластере отработки отказа необходимо установить на все узлы кластера отработки отказа сертификат сервера с полным именем DNS для экземпляра кластера отработки отказа. Например, для кластера из двух узлов с именами test1.имя_компании.com и test2. имя_компании.com и экземпляра кластера отработки отказа SQL Server с именем fcisql нужно получить сертификат для fcisql.имя_компании.com и установить его на оба узла. Чтобы включить шифрование кластера отработки отказа, установите флажок Принудительное шифрование для свойства Протоколы для <сервера> диалогового окна Сетевая конфигурация SQL Server.

Протокол IPSec

Данные SQL Server можно шифровать во время передачи с помощью протокола IPSec. Протокол IPSec поддерживается операционными системами клиента и сервера, дополнительная настройка SQL Server не требуется. Дополнительные сведения о протоколе IPSec см. в документации по Windows или сетевым протоколам.