На работе я пытаюсь подключить приложение Tomcat 8.5.34 к базе данных Oracle 12.2.0.1 через TCPS с помощью Oracle Wallet.
Я следовал нескольким инструкциям и сделал следующее:
Добавлены oraclepki.jar, ojdbc8.jar, osdt_core.jar и osdt_core.jar в каталоге lib / catalina.
Изменен поставщик java.security для включения oracle.security.pki.OraclePKIProvider ввнизу списка провайдеров.
Я настроил коннекторы JNDI для подключения к базе данных через псевдоним.
В файле setenvs.sh Tomcat я добавил следующее:
-Doracle.net.tns_admin=< wallet files location with tnsora>
-Doracle.net.wallet_location="(SOURCE=(METHOD=FILE) (METHOD_DATA = (DIRECTORY=< wallet files location with tnsora>)))"
Тем не менее, в журналах говорится:
Caused by: oracle.net.ns.NetException: Unable to initialize the key store.
at oracle.net.nt.CustomSSLSocketFactory.getKeyManagerArray(CustomSSLSocketFactory.java:642)
at oracle.net.nt.CustomSSLSocketFactory.getSSLSocketEngine(CustomSSLSocketFactory.java:547)
... 41 more
Caused by: java.security.KeyStoreException: SSO not found
at java.security.KeyStore.getInstance(KeyStore.java:851)
at oracle.net.nt.CustomSSLSocketFactory.getKeyManagerArray(CustomSSLSocketFactory.java:628)
... 42 more
Caused by: java.security.NoSuchAlgorithmException: SSO KeyStore not available
at sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
at java.security.Security.getImpl(Security.java:695)
at java.security.KeyStore.getInstance(KeyStore.java:848)
... 43 more
Как ни странно, я написал быстрое тестовое приложение на Java, которое преуспело в подключении!
java -Doracle.net.tns_admin="< wallet files location with tnsora>" -Doracle.net.wallet_location="(SOURCE=(METHOD=FILE) (METHOD_DATA = (DIRECTORY=< wallet files location with tnsora>)))" -cp ./lib/ojdbc8.jar:/root:./lib/oraclepki.jar:./lib/osdt_core.jar:./lib/osdt_cert.jar DataSourceSample
AArray = [B@6328d34a
AArray = [B@145eaa29
AArray = [B@15bb6bea
AArray = [B@52aa2946
AArray = [B@4de5031f
AArray = [B@67e2d983
Driver Name: Oracle JDBC driver
Driver Version: 12.2.0.1.0
Default Row Prefetch Value is: 20
Database Username is: <Name of the Database>
....
....
Results
Я исчерпал всевозможные варианты.
** Обновление 1 **
Я запустил strace на Tomcat.И я могу подтвердить, что Tomcat видит файлы кошелька:
[pid 21880] lstat ("/ cwallet.sso", {st_mode = S_IFREG | 0700, st_size = 4741, ...}) = 0 [pid 21880] stat ("/ cwallet.sso.lck", {st_mode = S_IFREG | 0600, st_size = 0, ...}) = 0 [pid 21880] stat ("/ oracle_wallets / cwallet.sso.lck", {st_mode = S_IFREG | 0600, st_size = 0, ...}) = 0 [pid 21880] stat ("/ cwallet.sso.lck", {st_mode = S_IFREG | 0600, st_size = 0, ...}) = 0[pid 21880] chmod ("/ cwallet.sso.lck", 0100200) = 0