Ошибка "Сертификат, полученный от удаленного сервера, был выдан ненадежным центром сертификации" при подключении к SQL Server

Исходная версия продукта: SQL Server
Исходный номер базы знаний: 2007728

Сводка

В этой статье показано, как устранить ошибку "Сертификат, полученный от удаленного сервера, был выдан ненадежным центром сертификации", которая возникает, когда клиент выполняет зашифрованное подключение (TLS) к SQL Server. Ошибка означает, что клиент не может проверить сертификат, который экземпляр SQL Server предъявляет во время TLS-рукопожатия, обычно потому, что центр сертификации (CA), выдавший сертификат, отсутствует в хранилище «Доверенные корневые центры сертификации» клиента, или потому, что SQL Server использует самоподписанный сертификат.

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

Симптомы

При подключении к SQL Server может появиться следующее сообщение об ошибке:

Подключение к серверу успешно установлено, но затем произошла ошибка при входе. (поставщик: поставщик SSL, ошибка: 0 — цепочка сертификатов была выдана центром сертификации, не являющимся доверенным.) (поставщик данных .Net SqlClient)

Кроме того, следующее сообщение об ошибке регистрируется в журнале событий системы Windows:

Log Name:      System  
Source:        Schannel  
Date:          10/13/2020 3:03:31 PM  
Event ID:      36882  
Task Category: None  
Level:         Error  
Keywords:  
User:        USERNAME  
Computer:     COMPUTERNAME  
Description:  
The certificate received from the remote server was issued by an untrusted certificate authority. Because of this, none of the data contained in the certificate can be validated. The TLS connection request has failed. The attached data contains the server certificate.

Причина

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

Сценарий Шифрование на стороне сервера Шифрование на стороне клиента Тип сертификата Центр выдачи сертификатов присутствует в корневом хранилище центров сертификации
1 Да Нет Сертификат, полученный из источника, которому клиент не доверяет (центр сертификации, выдавший сертификат, не указан в списке «Доверенные корневые центры сертификации» на клиентском компьютере) Нет
2 Нет Да Самозаверяющий сертификат, который SQL Server создает № Самоподписанные сертификаты не отображаются в этом хранилище.

Когда клиент устанавливает зашифрованное подключение к SQL Server, Secure Channel (Schannel) создает список доверенных центров сертификации, выполнив поиск в хранилище доверенных корневых центров сертификации на локальном компьютере. Во время TLS-рукопожатия сервер отправляет клиенту сертификат с открытым ключом. Издатель сертификата открытого ключа называется центром сертификации (ЦС). Клиент должен подтвердить, что он доверяет ЦС, что он и делает, заранее зная открытые ключи доверенных ЦС. Когда Schannel обнаруживает сертификат, выданный ненадежным центром сертификации, например в предыдущих двух сценариях, вы получите сообщение об ошибке, указанное в разделе "Симптомы ".

Если подходящий сертификат не настроен или обнаружен, ядро СУБД создает самозаверяющий резервный сертификат во время запуска. Он использует этот сертификат для шифрования учетных данных для входа, а при включении шифрования на стороне сервера или на стороне клиента — всего соединения. По умолчанию ни один клиент не доверяет самоподписанному сертификату, поэтому эта ошибка может возникать при стандартной установке SQL Server, даже если клиент и сервер работают на одном и том же компьютере. Дополнительные сведения см. в разделе "Шифрование пакетов входа" и шифрование пакетов данных.

Почему эта ошибка появляется после обновления драйвера или средства

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

Клиентский драйвер или утилита Версия Поведение шифрования по умолчанию
Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL19) 19 и более поздние версии Encrypt по умолчанию равно Mandatory
Драйвер Microsoft ODBC для SQL Server версии 18 и более поздних Encrypt по умолчанию имеет значение Mandatory
Microsoft.Data.SqlClient версии 4.0 и более поздние Encrypt по умолчанию равно True
SQL Server Management Studio (SSMS) 20 и более поздних версий По умолчанию шифрование является обязательным

Если эта ошибка возникает сразу после миграции приложения из SQL Server Native Client 11.0 (SNAC) на Microsoft OLE DB Driver 19 или Microsoft ODBC Driver 18, см. статью "Цепочка сертификатов не доверена после обновления драйвера".

SNAC не поставляется с SQL Server 2022 (16.x) и более поздними версиями или с SSMS 19 и более поздними версиями, и не рекомендуется для новой разработки. Используйте драйвер Microsoft OLE DB для SQL Server, драйвер Microsoft ODBC для SQL Server или Microsoft.Data.SqlClient вместо этого. Дополнительные сведения см. в политиках поддержки для SQL Server Native Client.

Решение

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

Вариант 1. Установка центра сертификации на клиентском компьютере

Для сценария 1 добавьте удостоверяющий центр в хранилище «Доверенные корневые центры сертификации» на клиентском компьютере, с которого инициируется зашифрованное соединение. Для этого выполните следующие процедуры в указанной последовательности: Шаг 1: Экспортируйте сертификат сервера в файл и Шаг 2: Установите корневой центр сертификации (ЦС) на клиентском компьютере.

Шаг 1. Экспорт сертификата сервера в файл

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

  1. Нажмите кнопку "Пуск", введите mmc и откройте консоль управления (MMC).

  2. Выберите Файл>Добавить/Удалить оснастку.

  3. В списке Доступные оснастки выберите Сертификаты и нажмите Добавить.

  4. Выберите учетную запись компьютера, нажмите кнопку "Далее", выберите "Локальный компьютер": (компьютер, на котором выполняется консоль), а затем нажмите кнопку "Готово".

    Примечание.

    Сертификаты SQL Server устанавливаются в хранилище сертификатов Local Computer\Personal. Если выбрать учетную запись пользователя, MMC открывает другое хранилище сертификатов, а сертификат SQL Server не отображается.

  5. Нажмите ОК, чтобы закрыть диалоговое окно Добавление и удаление оснасток.

  6. В левой области разверните узел "Сертификаты (локальный компьютер)", разверните узел "Личные", а затем выберите "Сертификаты".

  7. Щелкните правой кнопкой мыши сертификат, который SQL Server использует, и выберите пункт "Все задачи>экспорта".

    Tip

    Чтобы определить, какой сертификат использует SQL Server, откройте диспетчер конфигурации SQL Server, разверните узел Сетевая конфигурация SQL Server, щелкните правой кнопкой мыши Протоколы для <имя экземпляра>, выберите Свойства, а затем — вкладку Сертификат. Если журнал ошибок SQL Server содержит запись "Самосозданный сертификат был успешно загружен для шифрования", SQL Server использует резервный сертификат, созданный автоматически. Этот сертификат нельзя экспортировать, поэтому используйте вариант 2 или вариант 3 .

  8. Нажмите кнопку "Далее", чтобы перейти к странице приветствиямастера экспорта сертификатов.

  9. Убедитесь, что выбран параметр Нет, не экспортировать закрытый ключ, а затем нажмите кнопку Далее.

  10. Убедитесь, что выбран либо двоичный файл X.509 в кодировке DER (.CER), либо X.509 в кодировке Base-64 (.CER), а затем нажмите Далее.

  11. Введите имя файла экспорта, например caCert.cer.

  12. Нажмите кнопку "Далее", а затем нажмите кнопку "Готово ", чтобы экспортировать сертификат.

  13. Скопируйте экспортируемый файл .cer на клиентский компьютер.

Шаг 2. Установка корневого центра сертификации (ЦС) на клиентском компьютере

  1. На клиентском компьютере откройте MMC, выберите Файл>, выберите Сертификаты в списке Доступные оснастки, а затем нажмите Добавить.

  2. В диалоговом окне "Сертификаты" выберите учетную запись компьютера и нажмите кнопку "Далее".

  3. В области "Выбор компьютера" выберите локальный компьютер: (компьютер, на котором выполняется консоль), а затем нажмите кнопку "Готово".

  4. Нажмите OK, чтобы закрыть диалоговое окно «Добавление или удаление оснастки».

  5. В левой области MMC разверните узел Сертификаты (локальный компьютер).

  6. Разверните узел Доверенные корневые центры сертификации, щелкните правой кнопкой мыши подпапку Сертификаты, выберите Все задачи, а затем — Импорт.

  7. В мастере импорта сертификатов на странице приветствия нажмите кнопку "Далее".

  8. На странице "Файл для импорта" нажмите кнопку "Обзор".

  9. Перейдите к расположению файла сертификата caCert.cer , выберите файл и нажмите кнопку "Открыть".

  10. На странице "Файл для импорта" нажмите кнопку "Далее".

  11. На странице хранилища сертификатов примите выбор по умолчанию и нажмите кнопку "Далее".

  12. На странице "Завершение работы мастера импорта сертификатов" нажмите кнопку "Готово".

Вариант 2. Доверять сертификату сервера без проверки его

В сценариях 1 и 2 задайте параметр сертификата сервера доверия в клиентском приложении. Этот параметр сохраняет зашифрованное подключение, но пропускает проверку сертификата. Имя ключевого слова и принятые значения зависят от клиентской библиотеки:

Клиентская библиотека Ключевое слово строки подключения
Microsoft.Data.SqlClient TrustServerCertificate=True
Драйвер Microsoft ODBC для SQL Server TrustServerCertificate=yes
Microsoft OLE DB Driver for SQL Server (строка поставщика данных) TrustServerCertificate=yes
Microsoft OLE DB Driver for SQL Server (ADO или IDataInitialize) Trust Server Certificate=true
Драйвер Microsoft JDBC для SQL Server trustServerCertificate=true

Если вы подключаетесь с помощью SQL Server Management Studio (SSMS) 20 или более поздней версии, установите флажок "Сертификат сервера доверия" на странице входа диалогового окна "Подключение к серверу". В более ранних версиях SSMS выберите "Параметры " в окне "Подключение к серверу ", перейдите на вкладку "Свойства подключения " и выберите сертификат сервера доверия.

Дополнительные сведения о настройке этого параметра для клиентской библиотеки см. в следующих статьях:

Примечание.

Параметр сертификата сервера доверия не отключает шифрование. Подключение остается зашифрованным, но клиент не проверяет удостоверение сервера.

Caution

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

Вариант 3. Изменение конфигурации шифрования

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

  • Настройте ядро СУБД для использования сертификата из доверенного центра. Этот параметр является наиболее безопасным долгосрочным исправлением, так как клиенты затем проверяют сертификат без дополнительной настройки. Дополнительные сведения см. в разделах Включение зашифрованных подключений к компоненту ядро СУБД и Требования к сертификатам для SQL Server.

  • Если шифрование не требуется:

    • Отключите шифрование в клиентском приложении. Задайте Encrypt=Optional для строки поставщика OLE DB, Use Encryption for Data=Optional для OLE DB ADO или Encrypt=no, Encrypt=False для ODBC и Microsoft.Data.SqlClient для IDataInitialize или Microsoft JDBC Driver. В SSMS 20 и более поздних версиях задайте для параметра Encryption значение "Необязательно " на странице входа диалогового окна "Подключение к серверу ".

    • Отключите шифрование на стороне сервера с помощью диспетчер конфигурации SQL Server. Разверните Конфигурация сети SQL Server, щелкните правой кнопкой мыши Протоколы для экземпляра <instance name>, выберите «Свойства», перейдите на вкладку «Флаги», задайте для параметра «Принудительное шифрование» значение «Нет», а затем перезапустите службу SQL Server. Дополнительные сведения см. в разделе "Протоколы" для свойств MSSQLSERVER (вкладка "Флаги").

      Предупреждение

      При отключении шифрования учетные данные и данные перемещаются по сети без защиты. Отключите шифрование только в доверенных изолированных сетях.