Tomcat JDBCRealm с использованием базы данных Oracle через SSL (ПРОТОКОЛ = TCPS)

#oracle #tomcat #ssl #jdbcrealm

#Oracle #tomcat #ssl #jdbcrealm

Вопрос:

Я пытаюсь реализовать JDBCRealm в tomcat (как описано в http://tomcat.apache.org/tomcat-4.1-doc/realm-howto.html#Configuring a Realm ) для проверки учетных данных в базе данных Oracle. Дело в том, что я хочу, чтобы база данных обменивалась данными через SSL. Итак, я настроил прослушиватель на использование TCPS. Вот так:

   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=<hostname>)(PORT=1521)))<br>
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=<hostname>)(PORT=1512)))
 

Сгенерированные сертификаты и т. Д. У меня нет проблем с подключением к базе данных с использованием tcps из sqlplus или из WLS (я могу использовать свойство connection oracle.net.ssl_cipher_suites=(SSL_DH_anon_WITH_3DES_EDE_CBC_SHA,SSL_DH_anon_WITH_RC4_128_MD5,SSL_DH_anon_WITH_DES_CBC_SHA) там без каких-либо проблем).

Однако я не могу заставить JDBCRealm работать с базой данных через TCPS. Если я настрою область следующим образом:
<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99" driverName="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCPS)(HOST = <hostname>)(PORT = 1512)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = <service name>)))" connectionName="<login>" connectionPassword="<password>" userTable="users" userNameCol="user_name" userCredCol="user_pass" userRoleTable="user_roles" roleNameCol="role_name" />
Я получаю следующую ошибку:

 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
 

Я импортировал сертификаты в хранилище JKS, которые я настроил в Tomcat следующим образом:

Безуспешно.

Я не профессионал в Tomcat (больше в базах данных). Я буду признателен за любую помощь или указание мне правильного направления. Заранее спасибо!

Ответ №1:

Ошибка, похоже, указывает на то, что SSL-сертификат не является доверенным.

Я предлагаю убедиться, что у вас действительно есть сертификат в вашем хранилище доверия (в JDK есть инструмент командной строки для перечисления содержимого хранилища доверия, вы можете использовать его в Google), а затем добавить следующий параметр в сценарий запуска Tomcat:

 javax.net.ssl.trustStore=<path to trust store>
 

Комментарии:

1. Спасибо, для меня это был большой скачок 🙂 Теперь у меня возникают следующие ошибки: java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection oracle.net.ns.NetException: Unable to initialize ssl context. oracle.net.ns.NetException: Unable to initialize the trust store. java.io.IOException: Keystore was tampered with, or password was incorrect java.security.UnrecoverableKeyException: Password verification failed Но пароль для trustore правильный в catalina.sh -Djavax.net.ssl.trustStore=<path to jks> -Djavax.net.ssl.keyStorePassword=<pass>

2. Это очень помогло! Просто нужно было добавить javax.net.ssl.trustStorePassword=<pass> Ошибочно добавленное хранилище ключей в предыдущем сообщении. Еще раз спасибо!

3. Ну, еще одна вещь, которая меня беспокоит, — это пароль, видимый в списке процессов. Безуспешно пытался поместить его в -Doptionsfile=<файл с параметрами доверия>. Похоже, Tomcat не распознает его?