Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
go-mssqldb Драйвер поддерживает несколько режимов шифрования и стратегии проверки сертификатов для подключения к SQL Server и Azure SQL. В этой статье объясняется каждый режим шифрования, как настроить проверку сертификатов и когда использовать строгий режим TDS 8.0.
Выберите конфигурацию TLS
Используйте эту таблицу, чтобы выбрать наиболее безопасный вариант, подходящий для вашей среды, прежде чем настраивать отдельные параметры.
| Сценарий | Рекомендуемые параметры | Почему |
|---|---|---|
| Azure SQL или SQL Server 2022 и более поздние версии, и вам нужна самая сильная защита по умолчанию | encrypt=strict |
TDS 8.0 выполняет TLS-рукопожатие перед согласованием TDS и всегда проверяет сертификат. |
| Сертификаты сервера связаны с доверенным публичным или корпоративным CA | encrypt=true |
Стандартная проверка сертификатов обычно достаточна, если имя хоста и цепочка доверия уже правильны. |
| Сервер использует частный удостоверяющий центр, который отсутствует в системном хранилище доверенных сертификатов | encrypt=true&certificate=/path/to/ca-cert.pem |
Добавляет сертификат центра сертификации в пользовательский пул доверия и сохраняет стандартную проверку цепочки сертификатов. |
| Сервер использует самоподписанный сертификат, и вам нужна привязка сертификата | encrypt=true&serverCertificate=/path/to/server.pem |
Сравнивает точный серверный сертификат байт за байт, вместо того чтобы полагаться на цепочку CA. |
| Только для локальной разработки или временных тестовых сред | encrypt=true&TrustServerCertificate=true |
Оставляет шифрование включённым, но пропускает проверку идентичности сервера. Не используйте этот сеттинг в продакшене. |
Режимы шифрования
Установить encrypt параметр соединения на одно из следующих значений:
| Ценность | Behavior |
|---|---|
strict |
Шифрование TDS 8.0. Рукопожатие TLS происходит до согласования подключения TDS. Требуется SQL Server 2022 или Azure SQL. |
true или mandatory |
Соединение шифруется после рукопожатия до входа в TDS. |
false или optional |
Шифрование используется только в том случае, когда сервер этого требует. Это по умолчанию, когда encrypt не указано. Azure SQL всегда требует шифрования на стороне сервера, поэтому подключения к Azure SQL шифруются независимо от этой настройки. |
disable |
Без шифрования. Не рекомендуется для эксплуатации. |
Example
Включите шифрование в строка подключения, используя параметрencrypt:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true
Проверка сертификата
Когда вы включаете шифрование (encrypt=true или encrypt=strict), драйвер проверяет сертификат сервера, если только вы не установите TrustServerCertificate=true. Существуют два независимых подхода для этой валидации.
Валидация цепочки с использованием certificate параметра
Предоставьте файл сертификатов PEM или DER. Драйвер добавляет сертификат в пользовательский пул доверия и выполняет стандартную проверку цепочки X.509 по этому пулу:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&certificate=/path/to/ca-cert.pem
Сравнение на уровне байтов с использованием параметра serverCertificate
Note
Этот serverCertificate параметр был введён в драйвере версии 1.9.6.
Предоставьте файл PEM или DER, содержащий точный сертификат сервера. Драйвер сравнивает сертификат сервера байт за байт с предоставленным файлом. Драйвер не выполняет проверку цепочки. Этот подход полезен для самоподписанных сертификатов:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&serverCertificate=/path/to/server.pem
Переопределение имени хоста
По умолчанию драйвер проверяет, что общее имя (CN) или субъектное альтернативное имя (SAN) сертификата совпадает с именем хоста сервера. Используйте hostnameincertificate для переопределения ожидаемого имени хоста:
sqlserver://<user>:<password>@10.0.0.5:1433?database=AdventureWorks2025&encrypt=true&hostnameincertificate=<server>.domain.com
Пропустить проверку сертификата
Установите TrustServerCertificate=true, чтобы пропустить все проверки сертификатов. Соединение всё ещё зашифровано, но идентификация сервера не подтверждена:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&TrustServerCertificate=true
Предостережение
Параметр TrustServerCertificate=true делает соединение уязвимым для атак типа «злоумышленник посередине». Используйте этот вариант только для разработки и тестирования.
Строгий режим TDS 8.0
TDS 8.0 (строгое шифрование) выполняет TLS-рукопожатие перед любым согласованием протокола TDS. Такой подход не позволяет злоумышленнику полностью понизить уровень соединения. TDS 8.0 требует SQL Server 2022 или Azure SQL:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=strict
В строгом режиме параметр TrustServerCertificate игнорируется. Проверка сертификатов всегда происходит по умолчанию с использованием системного хранилища доверия. Вы можете указать certificate или serverCertificate для пользовательской проверки.
Минимальная версия TLS
Используйте параметр tlsmin для обеспечения минимальной версии TLS:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&tlsmin=1.2
Допустимые значения: 1.0, , 1.11.21.3.
Сводка параметров шифрования
| Parameter | Default | Description |
|---|---|---|
encrypt |
false |
Режим шифрования. Azure SQL всегда требует шифрования на серверной стороне, независимо от этой настройки. |
TrustServerCertificate |
Зависит от encrypt |
Пропускать проверку сертификата, если true. По умолчанию — false когда encrypt указано и true когда encrypt опущено. |
certificate |
- | Путь файла PEM/DER для проверки цепочек. |
serverCertificate |
- | Путь к файлу PEM/DER для сравнения на уровне байтов. |
hostnameincertificate |
- | Отменить ожидаемое имя хозяина в сертификате. |
tlsmin |
- | Минимальная версия TLS. |