Проверка шифрования и сертификата в Microsoft.Data.SqlClient

Скачать ADO.NET

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

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

Настоятельно рекомендуется предоставить SQL Server подтверждаемый сертификат для безопасного подключения. Безопасность транспортного уровня (TLS) может быть защищена только при проверке сертификатов.

Приложения могут запрашивать шифрование всего сетевого трафика с помощью ключевого слова Encrypt в строке подключения или свойства подключения. По умолчанию для шифрования всего трафика соединения требуется, чтобы на сервере присутствовал сертификат. Настроив на сервере доверие клиента к сертификату, вы можете стать уязвимыми для атак типа "злоумышленник в середине". Если вы развертываете на сервере проверяемый сертификат, убедитесь, что параметры клиента Encrypt имеют значение True, а параметры Trust Server Certificate — значение False.

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

Изменения в поведении проверки шифрования и сертификата

Версия 4.0 Microsoft.Data.SqlClient содержит критические изменения в параметрах шифрования. Encrypt Теперь по умолчанию используется Trueзначение .

Версия 2.0 Microsoft.Data.SqlClient представляет критические изменения в поведении Trust Server Certificate параметра. Ранее, если для Encrypt было задано значение False, сертификат сервера не проверялся независимо от значения параметра Trust Server Certificate. Теперь сертификат сервера проверяется на основе параметра Trust Server Certificate, если сервер принудительно использует шифрование, даже если для Encrypt задано значение False.

Версия 4.0

В следующей таблице описываются результаты шифрования и проверки для параметров шифрования и сертификата:

Encrypt параметр клиента Trust Server Certificate параметр клиента Force encryption Параметр сервера Результат
Ложь False (по умолчанию) Нет Шифрование выполняется только для LOGIN пакетов. Сертификат не проверяется.
Ложь False (по умолчанию) Да (Изменение поведения с версии 1.0 до версии 2.0) Шифрование всего сетевого трафика происходит только в том случае, если есть проверяемый сертификат сервера, в противном случае попытка подключения завершается ошибкой.
Ложь Истина Да Шифрование всего сетевого трафика происходит, и сертификат не проверяется.
True (новое значение по умолчанию) False (по умолчанию) Н/П Шифрование всего трафика применяется только при наличии подтверждаемого сертификата сервера, в противном случае попытка подключения завершается сбоем.
True (новое значение по умолчанию) Истина Н/П Шифрование всего сетевого трафика происходит, но сертификат не проверяется.
Strict (добавлено в версии 5.0) Н/П Н/П Шифрование всего сетевого трафика происходит с помощью TDS 8.0, только если есть проверяемый сертификат сервера, в противном случае попытка подключения завершается ошибкой.

Внимание

В приведенной выше таблице представлено только краткое описание поведения системы в различных конфигурациях. Чтобы подключение было безопасным, убедитесь, что для клиента и сервера требуется шифрование. Кроме того, убедитесь, что сервер имеет проверяемый сертификат, а TrustServerCertificate параметр на клиенте установлен False.

Начиная с версии 5.0 Microsoft.Data.SqlClient, HostNameInCertificate является новым вариантом подключения. Проверка сертификата сервера гарантирует, что имя общего имени (CN) или альтернативное имя субъекта (SAN) в сертификате совпадает с именем сервера, к которому подключено. В некоторых случаях, например для псевдонимов DNS, имя сервера может не совпадать с CN или SAN. Значение HostNameInCertificate можно использовать для указания другого, ожидаемого CN или SAN в сертификате сервера.

Версия 2.0

Начиная с версии 2.0, когда сервер принудительно включает шифрование, клиент проверяет сертификат сервера на основе параметра Trust Server Certificate, независимо от параметра Encrypt.

В следующей таблице описываются результаты шифрования и проверки для параметров шифрования и сертификата:

Encrypt параметр клиента Trust Server Certificate параметр клиента Force encryption Параметр сервера Результат
False (по умолчанию) False (по умолчанию) Нет Шифрование выполняется только для LOGIN пакетов. Сертификат не проверяется.
False (по умолчанию) False (по умолчанию) Да (Изменение поведения) Шифрование всего сетевого трафика происходит только в том случае, если есть проверяемый сертификат сервера, в противном случае попытка подключения завершается ошибкой.
False (по умолчанию) Истина Да Шифрование всего сетевого трафика происходит, и сертификат не проверяется.
Истина False (по умолчанию) Н/П Шифрование всего трафика применяется только при наличии подтверждаемого сертификата сервера, в противном случае попытка подключения завершается сбоем.
Истина Истина Н/П Шифрование всего сетевого трафика происходит, но сертификат не проверяется.

Внимание

В приведенной выше таблице представлено только краткое описание поведения системы в различных конфигурациях. Чтобы подключение было безопасным, убедитесь, что для клиента и сервера требуется шифрование. Кроме того, убедитесь, что сервер имеет проверяемый сертификат, а TrustServerCertificate параметр на клиенте установлен False.

Версия 1.0

В следующей таблице описываются результаты шифрования и проверки для параметров шифрования и сертификата:

Encrypt параметр клиента Trust Server Certificate параметр клиента Force encryption Параметр сервера Результат
False (по умолчанию) False (по умолчанию) Нет Шифрование выполняется только для LOGIN пакетов. Сертификат не проверяется.
False (по умолчанию) False (по умолчанию) Да Шифрование всего сетевого трафика происходит, но сертификат не проверяется.
False (по умолчанию) Истина Да Шифрование всего сетевого трафика происходит, и сертификат не проверяется.
Истина False (по умолчанию) Н/П Шифрование всего трафика применяется только при наличии подтверждаемого сертификата сервера, в противном случае попытка подключения завершается сбоем.
Истина Истина Н/П Шифрование всего сетевого трафика происходит, но сертификат не проверяется.