Поделиться через


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

В этой статье описываются требования к сертификатам для SQL Server и проверка соответствия сертификата этим требованиям.

Требования к сертификату для шифрования SQL Server

Для использования tls для шифрования SQL Server необходимо подготовить сертификат (один из трех цифровых типов), соответствующий следующим условиям:

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

  • Учетная запись службы SQL Server должна иметь необходимые разрешения для доступа к сертификату TLS. Дополнительные сведения см. в статье "Шифрование подключений к SQL Server путем импорта сертификата".

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

    Примечание.

    Сертификат должен быть предназначен для проверки подлинности сервера. Для этого требуется свойство расширенного использования ключа сертификата, чтобы указать проверку подлинности сервера (1.3.6.1.5.5.7.3.1).

  • Сертификат должен быть создан с помощью опции KeySpecAT_KEYEXCHANGE. Для этого требуется сертификат, использующий устаревший поставщик криптографического хранилища для хранения закрытого ключа. Как правило, свойство использования ключа сертификата (KEY_USAGE) также включает в себя шифрование ключей (CERT_KEY_ENCIPHERMENT_KEY_USAGE) и цифровую подпись (CERT_DIGITAL_SIGNATURE_KEY_USAGE).

  • Альтернативное имя субъекта должно содержать все имена, которые клиенты могут использовать для подключения к экземпляру SQL Server.

Клиент должен иметь возможность проверить владение сертификатом, используемым сервером. Если у клиента есть сертификат открытого ключа центра сертификации, подписанный сертификатом сервера, дополнительная конфигурация не требуется. Microsoft Windows включает сертификаты открытого ключа многих центров сертификации. Если сертификат сервера подписан общедоступным или частным центром сертификации, для которого у клиента нет сертификата открытого ключа, необходимо установить сертификат открытого ключа центра сертификации, подписавший сертификат сервера на каждом клиенте, который будет подключаться к SQL Server.

Это важно

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

Группа доступности AlwaysOn

Если экземпляр SQL Server входит в группу доступности AlwaysOn, можно использовать один из следующих методов для создания сертификата:

  • Метод 1. Используйте один сертификат во всех репликах группы доступности. Общее имя является произвольным, поэтому может быть любым значением заполнителя. Имя узла и полное доменное имя всех реплик SQL Server в группе доступности и имена прослушивателей группы доступности должны быть включены в альтернативное имя сертификата субъекта. Если в группу доступности добавляются дополнительные реплики после создания исходного сертификата, сертификат необходимо создать с именами всех реплик и повторно импортировать в каждую реплику. Сертификат также должен быть импортирован в хранилище сертификатов на всех клиентах, которые подключаются к реплике группы доступности или прослушивателю группы доступности, если сертификат не подписан общедоступным или официальным центром сертификации (ЦС). Если в сертификате не включены реплики группы доступности и имена прослушивателей, необходимо включить одно из значений альтернативного имени субъекта в HostNameInCertificate сертификат или путь к сертификату в ServerCertificate значениях строки подключения при подключении к группе доступности. Указание имен в сертификате — это рекомендуемый подход.

    Ниже приведен пример свойств, определяющих правильно настроенный сертификат для группы доступности с двумя серверами с именем test1.<your company>.com и test2.<your company>.comпрослушивателем aglistener.<your company>.comгруппы доступности:

    CN = <hostname is recommended but not required when certificates are configured using SQL Server Configuration Manager>
    DNS Name = aglistener.<your company>.com 
    DNS Name = test1.<your company>.com
    DNS Name = test2.<your company>.com
    DNS Name = aglistener
    DNS Name = test1
    DNS Name = test2
    
  • Метод 2. Используйте отдельный сертификат для каждой реплики группы доступности. Добавление реплик в группу доступности после создания сертификата проще при использовании отдельных сертификатов, так как необходимо создать сертификат только для новой реплики, а не изменять все сертификаты во всех существующих репликах. Общее имя является произвольным, поэтому может быть любым значением заполнителя. Имя узла и полное доменное имя соответствующего экземпляра SQL Server и имена прослушивателей группы доступности должны быть включены в альтернативное имя сертификата субъекта для каждой соответствующей реплики. Импортируйте каждый сертификат в соответствующую реплику и, если сертификат не подписан общедоступным или официальным центром сертификации (ЦС ), импортируйтевсе сертификаты во все хранилища сертификатов на всех клиентах, которые подключаются к репликам или прослушивателю группы доступности.

    Ниже приведены примеры свойств, определяющих правильно настроенные сертификаты для группы доступности с двумя экземплярами с именем test1.<your company>.comtest2.<your company>.comи aglistener.<your company>.comпрослушивателем группы доступности:

    Сертификат на тест1:

    CN= <hostname is recommended but not required when certificates are configured using SQL Server Configuration Manager>
    DNS Name= test1.<your company>.com 
    DNS Name= aglistener.<your company>.com
    DNS Name= aglistener
    DNS Name= test1
    

    Сертификат на тест2:

    CN= <hostname is recommended but not required when certificates are configured using SQL Server Configuration Manager>
    DNS Name= test2.<your company>.com 
    DNS Name= aglistener.<your company>.com 
    DNS Name= aglistener
    DNS Name= test2 
    

Экземпляр отказоустойчивого кластера

Если SQL Server настроен как экземпляр отказоустойчивого кластера, необходимо установить сертификат сервера с именем узла или полное доменное имя виртуального сервера на всех узлах в отказоустойчивом кластере. и сертификаты должны быть подготовлены на всех узлах отказоустойчивого кластера. Например, если у вас есть два кластера узлов с именами узлов и test1.<your company>.comвиртуальный сервер с именем test2.<your company>.comvirtsql, необходимо установить сертификат для virtsql.<your company>.com обоих узлов.

Импортируйте сертификат в отказоустойчивый кластер в последовательности, описанной в разделе "Настройка ядра СУБД SQL Server для шифрования подключений".

Ниже приведен пример свойств, определяющих правильно настроенный сертификат для экземпляра отказоустойчивого кластера:

CN = virtsql.<your company>.com
DNS Name = virtsql.<your company>.com
DNS Name = virtsql

Дополнительные сведения о кластерах SQL см. в разделе "Перед установкой отказоустойчивой кластеризации".

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

В SQL Server 2019 (15.x) и более поздних версиях диспетчер конфигурации SQL Server автоматически проверяет все требования к сертификату на этапе настройки. Если SQL Server успешно запускается после настройки сертификата, это хороший признак того, что SQL Server может использовать этот сертификат. Но некоторые клиентские приложения по-прежнему могут иметь другие требования к сертификатам, которые можно использовать для шифрования, и могут возникать различные ошибки в зависимости от используемого приложения. В этом сценарии необходимо проверить документацию по поддержке клиентского приложения, чтобы получить дополнительные сведения об этой теме.

Вы можете использовать один из следующих методов для проверки допустимости сертификата для использования с SQL Server:

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

    Details for SQL Server Instance: This Certificate row in this section provides more details regarding the certificate being used by SQL Server (Self-generated, hard-coded thumbprint value, etc.).
    
    Certificates in the Local Computer MY Store: This section shows detailed information regarding all the certificates found in the computer certificate store.
    

    Дополнительные сведения о возможностях инструмента и инструкции по скачиванию см. в разделе "Добро пожаловать в вики-сайт CSS_SQL_Networking_Tools".

  • Средство certutil: certutil.exe это программа командной строки, установленная в составе служб сертификатов. Вы можете использовать certutil.exe для дампа и отображения сведений о сертификате. -v Используйте параметр для получения подробных сведений. Дополнительные сведения см. в разделе certutil.

  • Оснастка сертификатов. Вы также можете использовать окно оснастки "Сертификаты " для просмотра дополнительных сведений о сертификатах в различных хранилищах сертификатов на компьютере. Но это средство не отображает KeySpec информацию. Дополнительные сведения о том, как просматривать сертификаты с помощью оснастки MMC, см. в статье "Практическое руководство. Просмотр сертификатов с помощью оснастки MMC".

Импортируйте сертификат с другим именем в имя хоста

В настоящее время сертификат можно импортировать только с помощью диспетчера конфигурации SQL Server, если имя субъекта сертификата соответствует имени узла компьютера.

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

  1. Импортируйте сертификат в хранилище сертификатов локального компьютера с помощью оснастки "Сертификаты".

  2. В диспетчере конфигурации SQL Server разверните узел конфигурации сети SQL Server правой кнопкой мыши экземпляр SQL Server, а затем выберите свойства, чтобы открыть диалоговое окно "Протоколы для <свойств instance_name>".

  3. На вкладке "Сертификат" выберите сертификат, импортированный в хранилище сертификатов, в раскрывающемся списке сертификатов :

    Снимок экрана: вкладка сертификата диалогового окна свойств в диспетчере конфигурации SQL Server.

Импорт сертификата с другим именем в имя узла приводит к следующему сообщению об ошибке:

The selected certificate name does not match FQDN of this hostname. This property is required by SQL Server
Certificate name: random-name
Computer name: sqlserver.domain.com

Сертификаты с истекшим сроком действия

SQL Server проверяет допустимость сертификатов только во время настройки. Например, нельзя использовать диспетчер конфигурации SQL Server в SQL Server 2019 (15.x) и более поздних версиях для подготовки сертификата с истекшим сроком действия. SQL Server продолжает работать без проблем, если сертификат становится недействительным после его выдачи. Но некоторые клиентские приложения, такие как Power BI, проверяют допустимость сертификата для каждого подключения и вызывают ошибку, если экземпляр SQL Server настроен на использование истекшим сроком действия сертификата для шифрования. Рекомендуется не использовать сертификат с истекшим сроком действия для шифрования SQL Server.

Следующий шаг