Шифрование и проверка сертификатов в Microsoft.Data.SqlClient

Скачать ADO.NET

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

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

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

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

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

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

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

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

Версия 4.0

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

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

Внимание!

В приведенной выше таблице представлено только краткое описание поведения системы в различных конфигурациях. Чтобы подключение было безопасным, убедитесь, что для клиента и сервера требуется шифрование. Кроме того, убедитесь, что сервер имеет проверяемый сертификат и что 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 (по умолчанию) True Да Выполняется шифрование всего сетевого трафика, и сертификат не проверяется.
True False (по умолчанию) Н/Д Шифрование всего трафика применяется только при наличии подтверждаемого сертификата сервера, в противном случае попытка подключения завершается сбоем.
True True Недоступно Выполняется шифрование всего сетевого трафика, но сертификат не проверяется.

Внимание!

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

Версия 1.0

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

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

См. также

Строки подключения
Синтаксис строки подключения