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

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

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

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

Примечание.

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

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

Замечания

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

В следующей таблице приведены сведения о том, как работает драйвер Microsoft JDBC для 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, драйвер выдаст ошибку и разорвет соединение.

Если для свойства шифрования задано значение true, драйвер Microsoft JDBC для SQL Server использует поставщик безопасности JSSE по умолчанию JSSE для согласования шифрования 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-имя может содержать подстановочные знаки. До версии 7.2 драйвер Microsoft JDBC для SQL Server не поддерживает сопоставление с подстановочными карточками. Это значит, что abc.com не будет соответствовать *.com, но *.com будет соответствовать *.com. В версии 7.2 и выше поддерживается сопоставление с подстановочными знаками стандартного сертификата.

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

См. также

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