База данных 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'