Сертификат SSL отсутствует в раскрывающемся списке диспетчера конфигурации SQL Server

Я пытаюсь настроить SQL Server 2014, чтобы я мог подключиться к нему удаленно с помощью SSL. На сервере установлен действительный сертификат подстановки, а доменное имя cert (example.com) соответствует полному доменному имени сервера (test.windows-server-test.example.com).

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

пустое раскрывающееся меню

То есть, я застрял на шаге 2.e.2 из этого учебника MS.

Ответ 1

После сообщения в комментариях я могу предположить, что ваша основная проблема - это часть CN используемого вами сертификата. Чтобы иметь успешную связь TLS для IIS Server, у вас нет таких сильных ограничений, как SQL Server.

Microsoft требует (см. здесь), что Имя сертификата должно быть полным доменным именем (FQDN) компьютера. Это означает, что часть сертификата Тема выглядит как CN = test.widows-server-test.example.com, где тест. widows-server-test.example.com - полное доменное имя вашего компьютера. Недостаточно того, что вы используете, например, CN = *.example.com и Альтернативное имя субъекта, которое содержит DNS Name=*.example.com и DNS Name=test.widows-server-test.example.com, DNS Name=test1.widows-server-test.example.com, DNS Name=test.widows-server-test2.example.com и т.д. Такой сертификат будет в порядке для TLS, но SQL Server отменит его. См. статью, в которой описаны тесные проблемы.

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

ОБНОВЛЕНО. Я немного проанализировал проблему в отношении Process Monitor и выяснил, что два значения в реестре важны для SQL Server Configuration Manager: значения Hostname и Domain в ключ

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

Если я изменил Domain и Hostname на значения, соответствующие CN сертификата, тогда сертификат будет отображаться в диспетчере конфигурации SQL Server. Это может быть не все проблемы, но это показывает, что SQL Server требуется гораздо больше как веб-сервер (например, IIS).

ОБНОВЛЕНО 2: Я подробно рассмотрел проблему, и я думаю, что нашел способ настройки общего сертификата SSL, который у вас уже есть (например, бесплатный SSL-сертификат от Разрешить шифрование, StartSSL или некоторые другие).

Важно определить, что делает Диспетчер конфигурации SQL Server из конфигурации, требуемой SQL Server. Вкладка "Сертификат" свойств Configuration Manager имеет более жесткие ограничения, чем SQL Server. Я описываю выше только ограничения диспетчера конфигурации SQL Server, но можно настроить конфигурацию непосредственно в реестре, чтобы использовать более распространенный сертификат SSL/TLS от SQL Server. Ниже я описываю, как это можно сделать.

Что нужно сделать в реестре под ключом, например HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\MSSQLServer\SuperSocketNetLib, где часть MSSQL12.SQL2014 может быть немного различной в вашем случае. Диспетчер конфигурации SQL Server помогает нам установить два значения в реестре: ForceEncryption и Certificate:

введите описание изображения здесь

Значение Certificate представляет собой SHA1-хэш, который можно найти, исследуя свойства сертификата:

введите описание изображения здесь

или расширенные свойства сертификата, которые вы видите по использованию certutil.exe -store My:

введите описание изображения здесь

Нужно просто скопировать значение "Cert Hash (sha1)", удалить все пробелы и поместить в значение Certificate значение в реестре. После внесения настроек и перезапуска службы Windows Server SQL вы увидите в файле ERRORLOG в каталоге C:\Program Files\Microsoft SQL Server\...\MSSQL\Log строку типа

2016-04-25 21: 44: 25.89 Сервер Сертификат [Cert Hash (sha1) "C261A7C38759A5AD96AC258B62A308A26DB525AA" ] был успешно загружен для шифрования.

Ответ 2

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

Надеюсь, это поможет следующему парню.

Ответ 3

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

Невозможно загрузить указанный пользователем сертификат [Cert Hash (sha1) "отпечаток сертификата"]. Сервер не примет соединение. Вы должны убедиться, что сертификат установлен правильно. См. "Настройка сертификата для использования по SSL" в электронной документации.

Инициализация TDSSNIClient завершилась с ошибкой 0x80092004, код состояния 0x80. Причина: не удалось инициализировать поддержку SSL. Не удается найти объект или свойство.

Инициализация TDSSNIClient завершилась ошибкой 0x80092004, код состояния 0x1. Причина: инициализация завершилась ошибкой инфраструктуры. Проверьте на наличие предыдущих ошибок. Не удается найти объект или свойство.

получил ошибку в журнале ошибок SQL Server:

Серверу не удалось загрузить сертификат, необходимый для установления соединения SSL. Он вернул следующую ошибку: 0x8009030d. Проверьте сертификаты, чтобы убедиться, что они действительны.

погуглил и нашел решение:

Убедитесь, что учетная запись Windows, на которой запущена служба SQL Server (в моем случае NT Service\MSSQLServer), имеет полные разрешения для следующих папок/записи реестра:

  1. C:\Program Files\Microsoft SQL Server [Ваш экземпляр сервера Sql]\MSSQL\
  2. C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
  3. HKLM\System\CurrentControlSet\Services\Winsock2\Parameters

Я проверил No.1 NT Service\MSSQLSERVER уже имеет разрешение.

Я проверил № 2, NT Service\MSSQLSERVER не имеет разрешения, и я добавил разрешение. Появилось сообщение об ошибке, говорящее, что одному из файлов в этой папке было отказано в операции, но я просто проигнорировал это (больше ничего не могу сделать)

Я не проверял № 3 и пытался запустить SQL Server, он работал !!

Ответ 4

Я вошел на сервер с учетной записью домена SQL Server (пришлось временно добавить учетную запись локальным администраторам) и импортировал сертификат в личную папку учетной записи службы SQL Server. перезагрузил сервер, после чего SQL Server смог увидеть сертификат. Надеюсь, это кому-нибудь поможет.

Ответ 5

Дополнительным режимом сбоя является длина ключа - для SQL требуется минимальная длина ключа 2048. При отключенном канале DH.