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


Требования к сертификату для 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).

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

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

Это важно

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

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

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

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

    Ниже приведен пример свойств, определяющих правильно настроенный сертификат для группы доступности с двумя серверами с именами 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>.com и test2.<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 настроен как экземпляр отказоустойчивого кластера, необходимо установить сертификат сервера с именем хоста или полное DNS-имя (FQDN) виртуального сервера на всех узлах в отказоустойчивом кластере. и сертификаты должны быть установлены на всех узлах отказоустойчивого кластера. Например, если у вас есть кластер из двух узлов с именами test1.<your company>.com и test2.<your company>.com, и у вас есть виртуальный сервер с именем virtsql, необходимо установить сертификат для virtsql.<your company>.com на обоих узлах.

Импортируйте сертификат в отказоустойчивый кластер в последовательности, описанной в Configure SQL Server Database Engine для шифрования подключений.

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

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

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

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

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

Проверьте KeySpec и использование ключа

Требование KeySpec (AT_KEYEXCHANGE) является распространенной причиной сбоев конфигурации сертификата. Используйте следующие методы, чтобы убедиться, что сертификат соответствует этому требованию.

Используйте certutil

Запустите certutil с параметром -v для отображения подробных свойств сертификата, включая KeySpec и Key Usage:

certutil -v -store My "<certificate_thumbprint>"

В выходных данных найдите следующие значения:

KeySpec = 1 -- AT_KEYEXCHANGE
Key Usage = Key Encipherment, Digital Signature (a0)
Enhanced Key Usage:
    Server Authentication (1.3.6.1.5.5.7.3.1)

Если KeySpec = 2 (AT_SIGNATURE), сертификат нельзя использовать для шифрования SQL Server.

Использование PowerShell

Выполните следующие команды PowerShell, чтобы проверить KeySpec наличие сертификатов в локальном хранилище компьютеров:

Get-ChildItem Cert:\LocalMachine\My | ForEach-Object {
    $cert = $_
    $key = $cert.PrivateKey
    [PSCustomObject]@{
        Subject   = $cert.Subject
        Thumbprint = $cert.Thumbprint
        KeySpec   = if ($key) { $key.CspKeyContainerInfo.KeyNumber } else { 'No private key' }
        NotAfter  = $cert.NotAfter
    }
} | Format-Table -AutoSize

Убедитесь, что KeySpec отображается как Exchange (соответствующий AT_KEYEXCHANGE). Если отображается Signature, запросите новый сертификат с правильным KeySpec параметром.

Создание сертификата с помощью AD CS

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

  1. Откройте оснастку MMC для локального компьютера Сертификатов (certlm.msc).
  2. Разверните Личное, щелкните правой кнопкой мыши Сертификаты и выберите пункт "Все задачи">Запросить Новый Сертификат.
  3. Выберите Политика выдачи сертификатов Active Directory и выберите Далее.
  4. Выберите шаблон сертификата, поддерживающий проверку подлинности сервера. Веб-сервер или пользовательский шаблон, настроенный для проверки подлинности сервера, обычно соответствует требованиям. Убедитесь у администратора центра сертификации, что в шаблоне используется устаревший поставщик услуг шифрования (CSP), а KeySpec = AT_KEYEXCHANGE не поставщик хранилища ключей (KSP).
  5. На странице свойств сертификата :
    • Установите Common Name (CN) на имя хоста или полное доменное имя (FQDN) вашего экземпляра SQL Server.
    • На вкладке "Альтернативное имя субъекта" добавьте записи DNS для всех имен узлов, которые клиенты используют для подключения (имя узла, полное доменное имя и все псевдонимы).
  6. Завершите работу мастера регистрации и убедитесь, что новый сертификат отображается в личных>сертификатах.
  7. Проверьте KeySpec с использованием certutil или PowerShell, как описано в разделе "Проверка KeySpec и использования ключа".

Это важно

Сертификаты, созданные с помощью поставщика хранилища ключей (KSP), таких как Microsoft Software Key Storage Provider, используют KeySpec = 0 и не совместимы с SQL Server. При создании шаблона сертификата в AD CS выберите устаревший поставщик CSP, например Microsoft RSA SChannel Cryptographic Provider, чтобы гарантировать KeySpec = AT_KEYEXCHANGE.

Чтобы проверить допустимость сертификата для использования с 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 Configuration Manager, если имя субъекта сертификата соответствует имени узла компьютера.

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

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

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

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

    Снимок экрана вкладки сертификатов в диалоговом окне свойств в SQL Server Configuration Manager.

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

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

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