Основные сведения о поддержке шифрования

Скачать драйвер JDBC

При подключении к SQL Server, если приложение запрашивает шифрование и в экземпляре SQL Server настроена поддержка шифрования TLS, то Microsoft JDBC Driver для SQL Server инициирует TLS-подтверждение. Подтверждение обеспечивает возможность согласования сервером и клиентом алгоритмов шифрования, используемых для защиты данных. TLS-подтверждение обеспечивает защищенную передачу данных между клиентом и сервером. Во время TLS-подтверждения сервер отправляет свой сертификат открытого ключа клиенту. Поставщик сертификата открытого ключа называется центром сертификации (ЦС). Клиент несет ответственность за проверку надежности используемого центра сертификации.

Если приложение не запрашивает шифрование, Microsoft JDBC Driver для SQL Server не будет требовать поддержку TLS-шифрования в SQL Server. Если в экземпляре SQL Server не настроено принудительное TLS-шифрование, подключение устанавливается без шифрования. Если в экземпляре SQL Server настроено принудительное TLS-шифрование, драйвер автоматически включит TLS-шифрование при запуске на корректно настроенной виртуальной машине Java (JVM). В противном случае соединение будет прервано, а драйвер выдаст ошибку.

Примечание

Для успешного установления TLS-подключения передаваемое в serverName значение должно в точности совпадать с общим именем (CN) или DNS-именем в альтернативном имени субъекта (SAN) сертификата сервера.

Дополнительные сведения о настройке TLS для SQL Server см. в статье Включение зашифрованных соединений для ядра СУБД.

Remarks

Чтобы разрешить приложениям использовать TLS-шифрование, в Microsoft JDBC Driver для SQL Server начиная с версии 1.2 добавлены следующие свойства подключений: encrypt, trustServerCertificate, trustStore, trustStorePassword и hostNameInCertificate. Чтобы разрешить драйверу использовать TDS 8.0 с шифрованием TLS, начиная с выпуска 11.2 добавлено свойство подключения serverCertificate. Дополнительные сведения см. в статье о настройке свойств подключения.

В следующей таблице приведены режимы работы версии Microsoft JDBC Driver для SQL Server в различных сценариях TLS-подключений. Во всех вариантах используются различные наборы свойств TLS-соединений. В таблицу входят:

  • blank: "Свойство отсутствует в строке подключения".
  • value: "Свойство существует в строке соединения и имеет допустимое значение".
  • any: "Существование свойства в строке подключения и наличие у него допустимого значения не играют никакой роли".

Примечание

Эти режимы работы также относятся к проверке подлинности пользователей SQL Server и встроенной проверке подлинности Windows.

Параметры свойств Поведение
encrypt = false или blank
trustServerCertificate = any
hostNameInCertificate = any
trustStore = any
trustStorePassword = any
Драйвер не будет требовать от сервера поддержки TLS-шифрования. Если на сервере имеется самозаверяющий сертификат, драйвер запускает обмен TLS-сертификатами. TLS-сертификат не будет проверяться, а шифроваться будут только учетные данные (в пакете входа).

Если сервер требует от клиента поддержки TLS-шифрования, драйвер запускает обмен TLS-сертификатами. TLS-сертификат не будет проверяться, но будет выполняться шифрование всего сеанса связи.
encrypt = true
trustServerCertificate = true
hostNameInCertificate = any
trustStore = any
trustStorePassword = any
Драйвер требует использовать TLS-шифрование для сервера.

Если сервер требует от клиента поддерживать TLS-шифрование или сам поддерживает шифрование, драйвер запускает обмен TLS-сертификатами. Если свойство trustServerCertificate имеет значение true, драйвер не будет проверять TLS-сертификат.

Если на сервере не настроена поддержка шифрования, то драйвер создаст ошибку и разорвет соединение.
encrypt = true
trustServerCertificate = false или blank
hostNameInCertificate = blank
trustStore = blank
trustStorePassword = blank
Драйвер требует использовать TLS-шифрование для сервера.

Если сервер требует от клиента поддерживать TLS-шифрование или сам поддерживает шифрование, драйвер запускает обмен TLS-сертификатами.

Драйвер будет проверять TLS-сертификат с помощью свойства serverName, указанного в URL-адресе подключения, а выбор используемого хранилища сертификатов будет зависеть от правил поиска в фабрике менеджера доверия.

Если на сервере не настроена поддержка шифрования, то драйвер создаст ошибку и разорвет соединение.
encrypt = true
trustServerCertificate = false или blank
hostNameInCertificate = value
trustStore = blank
trustStorePassword = blank
Драйвер требует использовать TLS-шифрование для сервера.

Если сервер требует от клиента поддерживать TLS-шифрование или сам поддерживает шифрование, драйвер запускает обмен TLS-сертификатами.

Драйвер проверяет значение субъекта TLS-сертификата с помощью значения, указанного в свойстве hostNameInCertificate.

Если на сервере не настроена поддержка шифрования, то драйвер создаст ошибку и разорвет соединение.
encrypt = true
trustServerCertificate = false или blank
hostNameInCertificate = blank
trustStore = value
trustStorePassword = value
Драйвер требует использовать TLS-шифрование для сервера.

Если сервер требует от клиента поддерживать TLS-шифрование или сам поддерживает шифрование, драйвер запускает обмен TLS-сертификатами.

Драйвер использует значение свойства trustStore, чтобы найти файл trustStore сертификата, и значение свойства trustStorePassword, чтобы проверить целостность этого файла.

Если на сервере не настроена поддержка шифрования, то драйвер создаст ошибку и разорвет соединение.
encrypt = true
trustServerCertificate = false или blank
hostNameInCertificate = blank
trustStore = blank
trustStorePassword = value
Драйвер требует использовать TLS-шифрование для сервера.

Если сервер требует от клиента поддерживать TLS-шифрование или сам поддерживает шифрование, драйвер запускает обмен TLS-сертификатами.

Драйвер использует значение свойства trustStorePassword для проверки целостности файла trustStore, выбранного по умолчанию.

Если на сервере не настроена поддержка шифрования, то драйвер создаст ошибку и разорвет соединение.
encrypt = true
trustServerCertificate = false или blank
hostNameInCertificate = blank
trustStore = value
trustStorePassword = blank
Драйвер требует использовать TLS-шифрование для сервера.

Если сервер требует от клиента поддерживать TLS-шифрование или сам поддерживает шифрование, драйвер запускает обмен TLS-сертификатами.

Драйвер использует значение свойства trustStore для поиска файла trustStore.

Если на сервере не настроена поддержка шифрования, то драйвер создаст ошибку и разорвет соединение.
encrypt = true
trustServerCertificate = false или blank
hostNameInCertificate = value
trustStore = blank
trustStorePassword = value
Драйвер требует использовать TLS-шифрование для сервера.

Если сервер требует от клиента поддерживать TLS-шифрование или сам поддерживает шифрование, драйвер запускает обмен TLS-сертификатами.

Драйвер использует значение свойства trustStorePassword для проверки целостности файла trustStore, выбранного по умолчанию. Кроме того, драйвер использует значение свойства hostNameInCertificate для проверки TLS-сертификата.

Если на сервере не настроена поддержка шифрования, то драйвер создаст ошибку и разорвет соединение.
encrypt = true
trustServerCertificate = false или blank
hostNameInCertificate = value
trustStore = value
trustStorePassword = blank
Драйвер требует использовать TLS-шифрование для сервера.

Если сервер требует от клиента поддерживать TLS-шифрование или сам поддерживает шифрование, драйвер запускает обмен TLS-сертификатами.

Драйвер использует значение свойства trustStore для поиска файла trustStore. Кроме того, драйвер использует значение свойства hostNameInCertificate для проверки TLS-сертификата.

Если на сервере не настроена поддержка шифрования, то драйвер создаст ошибку и разорвет соединение.
encrypt = true
trustServerCertificate = false или blank
hostNameInCertificate = value
trustStore = value
trustStorePassword = value
Драйвер требует использовать TLS-шифрование для сервера.

Если сервер требует от клиента поддерживать TLS-шифрование или сам поддерживает шифрование, драйвер запускает обмен TLS-сертификатами.

Драйвер использует значение свойства trustStore, чтобы найти файл trustStore сертификата, и значение свойства trustStorePassword, чтобы проверить целостность этого файла. Кроме того, драйвер использует значение свойства hostNameInCertificate для проверки TLS-сертификата.

Если на сервере не настроена поддержка шифрования, то драйвер создаст ошибку и разорвет соединение.
encrypt = strict
hostNameInCertificate = value
trustStore = blank
trustStorePassword = blank
serverCertificate = значение
Драйвер требует использовать для сервера TDS 8.0 strict с TLS-шифрованием.

В качестве первого действия драйвер инициирует подтверждение TLS и обмен сертификатами с сервером.

Параметр trustServerCertificate игнорируется и обрабатывается как false в режиме strict.

Драйвер будет использовать необязательные свойства hostNameInCertificate или serverCertificate для проверки TLS-сертификата сервера.

Если на сервере не настроена поддержка подключений TDS 8, драйвер выдаст ошибку и разорвет соединение.

Если для свойства "encrypt" задано значение true, то Microsoft JDBC Driver для SQL Server использует настроенный по умолчанию поставщик безопасности JSSE в виртуальной машине Java, чтобы согласовать TLS-шифрование с SQL Server. Поставщик безопасности по умолчанию может не поддерживать все функции, необходимые для успешного согласования TLS-шифрования. Например, поставщик безопасности по умолчанию может не поддерживать размер открытого ключа RSA, используемого в TLS-сертификате SQL Server. В этом случае поставщик безопасности по умолчанию может вызвать ошибку, в результате которой драйвер JDBC разорвет соединение. Чтобы устранить эту проблему, выполните одно из следующих действий.

  • Настройте SQL Server с сертификатом сервера, имеющим открытый ключ RSA меньшего размера
  • Настройте в виртуальной машине Java другой поставщик безопасности JSSE в файле свойств безопасности "<java-home>/lib/security/java.security"
  • Используйте другой JVM

Проверка TLS-сертификата сервера

Во время TLS-подтверждения сервер отправляет свой сертификат открытого ключа клиенту. Драйвер JDBC или клиент должны проверить и подтвердить, что сертификат сервера выдан центром сертификации, которому доверяет клиент. Драйвер требует соответствия сертификата сервера следующим условиям:

  • Сертификат должен быть выдан доверенным центром сертификации.
  • Сертификат должен быть выдан для проверки подлинности серверов.
  • Срок действия сертификата не завершился.
  • Общее имя (CN) в субъекте или DNS-имя в альтернативном имени субъекта (SAN) сертификата точно соответствует значению serverName, указанному в строке подключения, или значению свойства hostNameInCertificate, если оно задано.
  • DNS-имя может содержать подстановочные знаки. В версиях Microsoft JDBC Driver для SQL Server до 7.2 подстановочные знаки не поддерживаются. Это значит, что abc.com не будет соответствовать *.com, но *.com будет соответствовать *.com. В версии 7.2 и выше поддерживается сопоставление с подстановочными знаками стандартного сертификата.

Для использования TDS 8.0 с strict шифрованием значение свойства serverCertificate предоставляет путь к сертификату сервера, который будет использоваться для проверки сертификата сервера. Этот файл должен использовать формат PEM. Сертификат, полученный от сервера, должен точно соответствовать этому сертификату.

См. также раздел

Использование шифрования
Защита приложений JDBC Driver