Поделиться через


Подключение с шифрованием

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

В примерах из этой статьи описывается использование свойств строки соединения, которые разрешают приложениям использовать шифрование TLS в приложении Java. Дополнительные сведения об этих новых свойствах строка подключения, таких как encrypt, trustServerCertificate, trustStore, trustStorePassword и hostNameInCertificate, см. в разделе "Настройка свойств подключения".

Настройка подключения

Если для свойства encrypt задано значение true, а свойство trustServerCertificate имеет значение true, драйвер Microsoft JDBC для SQL Server не проверяет сертификат TLS SQL Server. Этот параметр используется для разрешения подключений в тестовых средах, таких как, когда экземпляр SQL Server имеет только самозаверяющий сертификат.

В следующем примере кода показано, как можно задать свойство trustServerCertificate в строке подключения:

String connectionUrl =
    "jdbc:sqlserver://localhost:1433;" +
     "databaseName=AdventureWorks;integratedSecurity=true;" +
     "encrypt=true;trustServerCertificate=true";

Если для свойства encrypt задано значение true, а свойство trustServerCertificate имеет значение false, драйвер Microsoft JDBC для SQL Server проверяет сертификат TLS SQL Server. Проверка сертификата сервера является частью TLS-подтверждения и гарантирует, что для подключения выбран правильный сервер. Чтобы проверить сертификат сервера, при подключении необходимо явно предоставить доверенный материал с помощью свойств подключения trustStore и trustStorePassword или неявно, с помощью базового доверенного хранилища JVM по умолчанию.

Свойство trustStore указывает путь (включая имя файла) к файлу сертификата trustStore, который содержит список сертификатов, которым доверяет клиент. Свойство trustStorePassword задает пароль, используемый для проверки целостности данных trustStore. Дополнительные сведения об использовании доверенного хранилища виртуальной машины Java по умолчанию см. в статье Настройка шифрования на клиенте.

В следующем примере кода показано, как в строке подключения можно задать свойства trustStore и trustStorePassword:

String connectionUrl =
    "jdbc:sqlserver://localhost:1433;" +
     "databaseName=AdventureWorks;integratedSecurity=true;" +
     "encrypt=true; trustServerCertificate=false;" +
     "trustStore=storeName;trustStorePassword=storePassword";

Драйвер JDBC предоставляет дополнительное свойство hostNameInCertificate, которое определяет имя узла сервера. Значение этого свойства должно совпадать со значением свойства subject сертификата.

В следующем примере кода показано, как в строке подключения можно использовать свойство hostNameInCertificate:

String connectionUrl =
    "jdbc:sqlserver://localhost:1433;" +
     "databaseName=AdventureWorks;integratedSecurity=true;" +
     "encrypt=true; trustServerCertificate=false;" +
     "trustStore=storeName;trustStorePassword=storePassword;" +
     "hostNameInCertificate=hostName";

Примечание.

Кроме того, можно задать значение свойству подключения с помощью соответствующих методов задания, предоставляемых классом SQLServerDataSource.

Если свойство encrypt имеет значение true, свойство trustServerCertificate имеет значение false, а если имя сервера в строка подключения не соответствует имени сервера в сертификате TLS, будет выдана следующая ошибка: The driver couldn't establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "java.security.cert.CertificateException: Failed to validate the server name in a certificate during Secure Sockets Layer (SSL) initialization." Начиная с версии 7.2, драйвер поддерживает сопоставление шаблонов с подстановочными знаками в крайней левой части имени сервера в сертификате TLS.