Проверка шифрования и сертификата в Microsoft.Data.SqlClient
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 | False (по умолчанию) | No | Шифрование выполняется только для пакетов LOGIN. Сертификат не проверяется. |
False | False (по умолчанию) | Да | (Изменение поведения с версии 1.0 до версии 2.0) Шифрование всего сетевого трафика происходит только в том случае, если есть проверяемый сертификат сервера, в противном случае попытка подключения завершается ошибкой. |
False | Истина | Да | Шифрование всего сетевого трафика происходит, и сертификат не проверяется. |
True (новое значение по умолчанию) | False (по умолчанию) | Н/П | Шифрование всего трафика применяется только при наличии подтверждаемого сертификата сервера, в противном случае попытка подключения завершается сбоем. |
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 (по умолчанию) | No | Шифрование выполняется только для пакетов LOGIN. Сертификат не проверяется. |
False (по умолчанию) | False (по умолчанию) | Да | (Изменение поведения) Шифрование всего сетевого трафика происходит только в том случае, если есть проверяемый сертификат сервера, в противном случае попытка подключения завершается ошибкой. |
False (по умолчанию) | Истина | Да | Шифрование всего сетевого трафика происходит, и сертификат не проверяется. |
Истина | False (по умолчанию) | Н/П | Шифрование всего трафика применяется только при наличии подтверждаемого сертификата сервера, в противном случае попытка подключения завершается сбоем. |
Истина | Истина | Н/П | Шифрование всего сетевого трафика происходит, но сертификат не проверяется. |
Внимание
В приведенной выше таблице представлено только краткое описание поведения системы в различных конфигурациях. Чтобы подключение было безопасным, убедитесь, что для клиента и сервера требуется шифрование. Кроме того, убедитесь, что сервер имеет проверяемый сертификат, а TrustServerCertificate
параметр на клиенте установлен False
.
Версия 1.0
В следующей таблице описываются результаты шифрования и проверки для параметров шифрования и сертификата:
Encrypt параметр клиента |
Trust Server Certificate параметр клиента |
Force encryption Параметр сервера |
Результат |
---|---|---|---|
False (по умолчанию) | False (по умолчанию) | No | Шифрование выполняется только для пакетов LOGIN. Сертификат не проверяется. |
False (по умолчанию) | False (по умолчанию) | Да | Шифрование всего сетевого трафика происходит, но сертификат не проверяется. |
False (по умолчанию) | Истина | Да | Шифрование всего сетевого трафика происходит, и сертификат не проверяется. |
Истина | False (по умолчанию) | Н/П | Шифрование всего трафика применяется только при наличии подтверждаемого сертификата сервера, в противном случае попытка подключения завершается сбоем. |
Истина | Истина | Н/П | Шифрование всего сетевого трафика происходит, но сертификат не проверяется. |