Исправить ошибку шифрования SQL Server — решение в один клик
SQL Server подключается, а затем отклоняет вход в систему, поскольку не может доверять сертификату сервера. Это не проблема сети, и ваши данные не пропали — это проблема доверия. Выполняйте исправления в том порядке, в котором они показаны в видео: быстрый вариант на стороне клиента, тот же переключатель внутри строки подключения приложения и правильное исправление на самом сервере.
📑Главы
- Ошибка входа: «Цепочка сертификатов выдана ненадежным центром»
- Что на самом деле означает ошибка: требуется шифрование, сертификат сервера не может подтвердить его подлинность.
- Быстрое исправление клиента: сертификат доверенного сервера в окне подключения SSMS
- То же самое исправление внутри строки подключения приложения
- Правильное решение — предоставить серверу настоящий сертификат, которому клиенты доверяют самостоятельно.
- Проверка исправления: повторно подключитесь строгим способом и убедитесь, что шифрование действительно включено.
📋 Обзор и пошаговое руководство
Прочтите ошибку — это проблема доверия, а не проблема сети
С вашей сетью все в порядке, сервер работает. Соединение достигло SQL-сервера, сервер предложил зашифрованный канал для входа, а ваш компьютер отказался от него, поскольку сертификат, подтверждающий личность сервера, подписан никем, кому ваш компьютер не доверяет. Полная ошибка, которую показывает SSMS:
По умолчанию SQL Server защищает вход в систему с помощью самозаверяющего сертификата, который он создает сам. Самозаверяющий сертификат шифрует трафик, но он не может доказать, что сервер действительно является вашим сервером, поэтому клиенты, требующие проверенного шифрования, отклоняют его. Каждое честное исправление — это одно из двух: заставить клиента сознательно принять этот конкретный сервер (шаги 2 и 3) или предоставить серверу сертификат, которому клиенты доверяют самостоятельно (шаг 4).
Быстрое исправление клиента в SSMS — сертификат доверенного сервера
Это быстрый маршрут, показанный на видео. Это ничего не меняет на сервере; он сообщает этому соединению принять сертификат сервера, не проверяя, кто его подписал. В окне SSMS Подключение к серверу нажмите Параметры, чтобы открыть дополнительные вкладки, перейдите на вкладку Свойства подключения, установите для шифрования значение Обязательное (или оставьте его предложенным), отметьте Доверять сертификат сервера и нажмите Подключиться. Вход в систему происходит сразу.
То же исправление внутри строки подключения приложения
Если происходит сбой приложения вместо SSMS, в его строке подключения находится тот же ключ. Добавьте два параметра явно: Encrypt=True включает защищенный канал, а TrustServerCertificate=True — это написание строки подключения флажка SSMS:
Server=SQL01;Database=AppDB;User Id=appuser;Password=YourPassword;Encrypt=True;TrustServerCertificate=True;
Используйте собственное имя сервера, базу данных и логин вместо значений примера. Компромисс точно такой же, как и при выборе флажка на шаге 2, но с одной дополнительной опасностью: встроенная в конфигурацию поставляемого приложения пропущенная проверка применяется к каждому пользователю, невидимо и навсегда. Сохраняйте его в конфигурациях разработки и промежуточной конфигурации, а в рабочей среде рассматривайте его как заимствованное время, пока не будет установлен сертификат сервера на шаге 4.
Шифрование по умолчанию. Строки подключения, в которых никогда не упоминалось шифрование, начали требовать его от серверов, чьи самозаверяющие сертификаты не могут пройти проверку. В вашей базе данных ничего не изменилось; контракт внутри строки сделал это. Явное написание настроек означает, что следующее обновление драйвера не сможет изменить поведение вашего приложения за вашей спиной.Правильное решение — дайте серверу настоящий сертификат
Постоянное восстановление происходит один раз на сервере, а затем каждый клиент подключается строго без флажков и предупреждений. Сначала получите сертификат для полного DNS-имени сервера (например, sql01.company.local) от внутреннего центра сертификации или общедоступного центра сертификации с использованием Аутентификации сервера. Импортируйте его вместе с закрытым ключом в хранилище сертификатов Локальный компьютер на компьютере SQL Server. Затем щелкните сертификат правой кнопкой мыши, выберите Все задачи → Управление закрытыми ключами и предоставьте учетной записи службы SQL Server разрешение Чтение для закрытого ключа. Откройте Диспетчер конфигурации SQL Server, разверните Конфигурация сети SQL Server, щелкните правой кнопкой мыши Протоколы для MSSQLSERVER, выберите Свойства и выберите сертификат на вкладке Сертификат. На вкладке Флаги вы также можете установить для параметра ForceEncryption значение Да, чтобы каждый клиент требовал шифрования. Перезапустите службу SQL Server — изменение ничего не даст, пока вы этого не сделаете.
Проверьте исправление строгим способом
Успешный вход в систему незаметно доказывает меньше, чем думают люди, потому что некоторые комбинации настроек подключаются без реальной защиты. Докажите обе половины. Сначала подключитесь от клиента строгим способом: подключитесь, используя DNS-имя сервера — имя внутри сертификата — установите для шифрования значение «Обязательное» и оставьте флажок Доверительный сертификат сервера неактивным. Вход в систему должен завершиться успешно без предупреждения. Затем в том же сеансе спросите сервер, действительно ли соединение зашифровано, выполнив этот запрос в SSMS:
SELECT session_id, encrypt_option, auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID;
encrypt_option, показывающий TRUE, является проходным баллом. Значение FALSE при рабочем входе означает, что соединение удалось установить, сняв защиту, и задание не выполнено. Это прохождение теста является настоящей финишной чертой: любой правильно настроенный клиент, включая будущие версии SSMS, теперь подключается с полной проверкой и без каких-либо специальных настроек.
🏷️Переменные и ключевые слова поиска по теме
🎙️ Полная расшифровка — нажмите, чтобы развернуть.
__TOK_24__
__TOK_25__
__TOK_26__
❓ Часто задаваемые вопросы
Это руководство на 100 % бесплатно?
__TOK_27__
Могут ли новички следовать этому руководству?
__TOK_28__
Где я могу задать вопросы, если застрял?
__TOK_29__