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

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

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

Сгенерированные сертификаты и т. д. У меня нет проблем с подключением к базе данных с использованием tcps из sqlplus или из WLS (я могу без проблем использовать свойство подключения 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 следующим образом:

With no success.

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


person Juris    schedule 25.10.2011    source источник


Ответы (1)


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

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

javax.net.ssl.trustStore=<path to trust store>
person maximdim    schedule 25.10.2011
comment
Спасибо, это был большой скачок для меня :) Теперь у меня следующие ошибки: 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> - person Juris; 25.10.2011
comment
Это очень помогло! Просто нужно было добавить javax.net.ssl.trustStorePassword=‹pass› Ошибочно добавленный keyStore в предыдущем посте. Спасибо еще раз! - person Juris; 25.10.2011
comment
Ну, еще одна вещь, которая меня беспокоит, это пароль, видимый в списке процессов. Попытался поместить его в -Doptionsfile=‹файл с параметрами доверия› безуспешно. Похоже, Tomcat не распознает его? - person Juris; 25.10.2011