SQL Server не запускается с, когда сервер настроен для использования SSL
В этой статье описывается устранение ошибки 17182 (Сбой инициализации TDSSNIClient с ошибкой 0xd, код состояния 0x38), возникающей при настройке сервера на использование SSL.
Применяется к: SQL Server
Исходный номер базы знаний: 2023869
Симптомы
Рассмотрим следующий сценарий.
У вас есть экземпляр SQL Server 2005 или более поздней версии, размещенный в системе под управлением Windows Server 2008 или более поздней версии операционной системы.
Вы настроили шифрование SSL для SQL Server, вручную введя отпечаток сертификата в значение Сертификат в следующем разделе реестра:
HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib
В этом сценарии SQL Server может не запуститься, и в журнал ошибок SQL Server заносятся следующие сообщения:
<Ошибка сервера даты и времени> : 17182, серьезность: 16, состояние: 1.
<Сбой инициализации сервера TDSSNIClient даты и времени> с ошибкой 0xd, код состояния 0x38.
<Ошибка сервера даты и времени> : 17182, серьезность: 16, состояние: 1. <> Сбой инициализации сервера TDSSNIClient с ошибкой 0xd, код состояния 0x1.
<Ошибка сервера даты и времени> : 17826, серьезность: 18, состояние: 3.
<Серверу Datetime> не удалось запустить сетевую библиотеку из-за внутренней ошибки в сетевой библиотеке. Чтобы определить причину, просмотрите ошибки, непосредственно предшествующие этой, в журнале ошибок.
<Ошибка сервера даты и времени> : 17120, серьезность: 16, состояние: 1.
<SQL Server сервера даты и времени> не удалось создать поток FRunCM. Сведения о возможных связанных проблемах см. в журнале ошибок SQL Server и журналах событий Windows.
Причина
Общей первопричиной этих симптомов является невидимый символ, который может быть случайно добавлен в значение отпечатка сертификата, когда он копируется из элемента управления полного редактирования оснастки "Сертификаты" в MMC.
Разрешение
Можно использовать одно из следующих решений:
Избегайте копирования символов из оснастки "Сертификаты" в MMC при копировании значения отпечатка сертификата.
Используйте средство Certutil вместо оснастки сертификатов в MMC, чтобы экспортировать сертификат в текстовый файл, а затем скопируйте значение отпечатка необходимого сертификата из текстового файла. Использование показано ниже:
Чтобы просмотреть содержимое хранилища сертификатов текущего пользователя компьютера, введите в командной строке следующую команду:
certutil -store -user my
Чтобы просмотреть содержимое хранилища сертификатов локального компьютера, введите в командной строке следующую команду:
certutil -store my
Выходные данные приведенной выше команды можно направить в текстовый файл с помощью следующего кода в командной строке администратора в операционных системах на основе Vista:
certutil -store my > cert.txt
Отпечаток может находиться в строке, которая начинается с хэша сертификатов(sha1)
Например: Cert Hash(sha1): e7 02 4b 42 c4 04 fd 44 8c ec 21 f1 91 76 5c b7 c3 ad 1d 55
Затем можно скопировать это значение (без пробелов — в приведенном выше примере оно будет e7024b42c404fd448cec21f1765cb7c3ad1d55) в значение Certificate в следующем разделе реестра:
HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib
Дополнительная информация
Код состояния 0x38 в сообщении об ошибке 17182 означает, что во время инициализации SSL SQL Server произошла ошибка. Дополнительные сведения см. в статье Протоколы SQL .
Код возврата 0xd обозначает ошибку ОС 0xd (13), которая переводится как "Данные недопустимы". Приведенная выше ошибка 17182 "Не удалось инициализация TDSSNIClient с ошибкой 0xd, код состояния 0x38" возникает в частности из-за того, что строку в разделе Значение сертификата невозможно преобразовать правильно обратно в допустимый отпечаток сертификата.
Эта проблема с графическим интерфейсом для оснастки "Сертификаты" не возникает в более старых версиях Windows (например, Windows XP, Windows Server 2003), так как они не используют расширенный элемент управления редактированием в оснастке "Сертификаты"
Чтобы проверка, возникла ли проблема, описанная в этой статье, выполните следующую процедуру:
Откройте regedit, перейдите к следующему разделу реестра и экспортируйте ключ в SSLKey.reg файл:
HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib
Откройте файл SSLKey.reg из шага 1 с помощью Блокнота и диалогового окна Сохранить как в меню Файл , щелкните ANSI в списке кодировки и нажмите кнопку Сохранить.
Если вы получите предупреждение ниже, перейдите к шагу 3, нажав кнопку ОК.
Предупреждение
Этот файл содержит символы в формате Юникода, которые будут потеряны при сохранении этого файла как текстового файла в кодировке ANSI. Чтобы сохранить сведения в Юникоде, нажмите кнопку Отмена ниже, а затем выберите один из параметров Юникода в раскрывающемся списке Кодировка. Продолжить?
Закройте файл SSLKey.reg и снова откройте его в Блокноте.
Если теперь в отпечатке сертификата отображается знак вопросов или любой другой недопустимый символ, это указывает на то, что вы, вероятно, возникли проблемы, описанные в этой статье:
Пример записи может выглядеть примерно так:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer\SuperSocketNetLib]
"Certificate"="?b009d02038431da332f095b4ea6a126f4f5c7d18"
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по