База данных Oracle TLS1.2 / SSL-соединение с использованием JDBC thin и JKS

при попытке подключиться к Oracle Database 12c с помощью 12.1.0.2 JDBC Thin driver, мы получаем исключение. Мы используем TLSv1.2 с сертификатами JKS. Но мы не можем успешно подключиться к базе данных.

исключение в потоке" main " java.язык SQL.SQLRecoverableException: ошибка ввода-вывода: получено фатальное предупреждение: handshake_failure

1 ответов


Ниже приведены шаги для настройки драйвера Oracle JDBC thin для подключения к базе данных с помощью TLS v1.2 (при условии, что конфигурация базы данных верна).

Шаг 1: применить исправление для ошибки 19030178 (не требуется начиная с 12.2.0.1)

вам нужно будет применить патч для ошибки 19030178, которая позволяет TLSv1.2. Обратите внимание, что патч позволяет TLSv1.2 но не включает его по умолчанию. Таким образом, с исправленным драйвером 12.1.0.2 вам также нужно установить оракул.сеть.ssl_version= '1.2'. Это свойство можно задать либо как системное свойство (с помощью-D), либо через свойства datasource.

Шаг 2: Установите файлы JCE

без файлов Java Cryptography Extension (JCE) строгие наборы шифров (например, tls_rsa_with_aes_256_cbc_sha256) не будут включены. Поэтому, используете ли вы JDK7 или JDK8, вы должны установить файлы политики юрисдикции JCE Unlimited Strength. Эти файлы можно найти на Сайт Oracle.

Шаг 3: Всегда используйте последнее обновление JDK

обязательно используйте последнее обновление JDK7 или JDK8, потому что исправлены ошибки, необходимые для TLSv1.2.

Шаг 4: Используйте файлы JKS вместо кошельков

похоже, вы уже сделали это, но только для других: кошельки сложно настроить и использовать с тонким драйвером Oracle JDBC, потому что они требуют дополнительных банки и дополнительные свойства. Файлы JKS, с другой стороны, поддерживаются изначально в JRE и, по моему опыту, всегда работали хорошо.

Шаг 5: при использовании JDK7 явно включите strong cipher suites

этот шаг не требуется при использовании JDK8. С JDK7, если вы используете сильный набор шифров, такой как TLS_RSA_WITH_AES_256_CBC_SHA256, то вы должны включить его через oracle.сеть.соединение ssl_cipher_suites свойство.

Шаг 6: отладка с помощью-Djavax.сеть.debug=все

наконец, если у вас возникнут дополнительные проблемы, вы можете включить трассировку, чтобы узнать, что происходит с помощью-Djavax.сеть.debug=все.

=== = = ПРИМЕР С JDK7 И 12.1.0.2 ИСПРАВЛЕННЫМ ТОНКИМ ДРАЙВЕРОМ =====

java  -Doracle.net.ssl_version='1.2' -Doracle.net.ssl_cipher_suites='(TLS_RSA_WITH_AES_256_CBC_SHA256)' -Doracle.net.ssl_server_dn_match='true' -Djavax.net.ssl.trustStore='truststore.jks' -Djavax.net.ssl.trustStorePassword='welcome1' -Djavax.net.ssl.keyStore='keystore.jks' -Djavax.net.ssl.keyStorePassword='welcome1'  JDBCTest 'jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=host)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=myservice))(security=(ssl_server_cert_dn="CN=name,O=org,L=city,ST=state,C=country")))' 'pdb1' 'welcome1'

=== = = ПРИМЕР С JDK8 И 12.1.0.2 ИСПРАВЛЕННЫМ ТОНКИМ ДРАЙВЕРОМ =====

java -Doracle.net.ssl_version='1.2' -Doracle.net.ssl_server_dn_match='true' -Djavax.net.ssl.trustStore='truststore.jks' -Djavax.net.ssl.trustStorePassword='welcome1' -Djavax.net.ssl.keyStore='keystore.jks' -Djavax.net.ssl.keyStorePassword='welcome1'  JDBCTest 'jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=host)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=myservice))(security=(ssl_server_cert_dn="CN=name,O=org,L=city,ST=state,C=country")))' 'pdb1' 'welcome1'