Шифрование и проверка сертификатов в Microsoft.Data.SqlClient
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 | Недоступно | Выполняется шифрование всего сетевого трафика, но сертификат не проверяется. |
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по