通过TCPS连接到Oracle数据库时出错

2020-09-28 03:17发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我们正在尝试使用Hybris中的...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我们正在尝试使用Hybris中的TCPS通过Internet连接到Oracle数据库,但是我们一直在出错。 我们已经确认,数据库连接可以与sqlplus以及简单的Java测试程序一起使用,因此我们知道可以连接到数据库。 问题是当我们尝试通过Hybris连接时。 有没有人正确配置并使其正常工作?

local.properties中的数据库配置:

external.db.driver = oracle.jdbc.driver.OracleDriver external.db.url = jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS =(PROTOCOL = tcps)(HOST = mydomain.mydomain.com )(PORT = 3002))(CONNECT_DATA =(SERVICE_NAME = ISAT)))external.db.ssl -cipher-suites =(SSL_DH_anon_WITH_3DES_EDE_CBC_SHA,SSL_DH_anon_WITH_DES_CBC_SHA),SSL_DH_anon_WITH_DES_CBC_SHA)external.db.user = abc123 external.db.pass = abc123 external.db.trustStore =/usr/lib/oracle/wallets。 SSO external.db.keyStore =/usr/lib/oracle/wallets/cwallet.sso external.db.keyStoreType = SSO

javax.net.ssl.trustStore =/usr/lib/oracle/wallets/cwallet.sso javax.net.ssl.trustStoreType = SSO

jdbc.connection.pool.min = 25 jdbc.connection.pool.max = 100 jdbc.connection.pool.initial = 1 jdbc.connection.pool.inactivity.timeout = 180 jdbc.connection.pool.wait.timeout = 120

我们的资源/mainprojectcore-spring.xml文件中的Spring配置:

  
              <属性名称=" connectionCachingEnabled"值=" true"/>
              
              
              
              
                      <道具>
                               $ {jdbc.connection.pool.min} 
                               $ {jdbc.connection.pool.max} 
                               $ {jdbc.connection.pool.initial} 
                               $ {jdbc.connection.pool.inactivity.timeout} 
                               $ {jdbc.connection.pool.wait.timeout} 
                              为真
                              为真
                              从双重中选择1 
                              是真的
                      
              
              
                      <道具>
                               $ {external.db.ssl-cipher-suites} 
                               $ {external.db.trustStore} 
                               $ {external.db.trustStoreType} 
                      
              
      

  

Java.security:

security.provider.1 = sun.security.provider.Sun security.provider.2 = sun.security.rsa.SunRsaSign security.provider.3 = oracle.security.pki.OraclePKIProvider security.provider.4 = sun。 security.ec.SunEC security.provider.5 = com.sun.net.ssl.internal.ssl.Provider security.provider.6 = com.sun.crypto.provider.SunJCE security.provider.7 = sun.security.jgss .SunProvider security.provider.8 = com.sun.security.sasl.Provider security.provider.9 = org.jcp.xml.dsig.internal.dom.XMLDSigRI security.provider.10 = sun.security.smartcardio.SunPCSC

有效的骨架测试:

  import java.security.Security;
  导入java.sql.Connection;
  导入java.sql.DriverManager;
  导入java.sql.PreparedStatement;
  导入java.util.Properties;
  导入java.sql.ResultSet;
 
  公共类TestJdbc {
      公共静态void main(String [] args)引发异常{
         //Security.addProvider(new oracle.security.pki.OraclePKIProvider());
 
          字符串url =" jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS =(PROTOCOL = tcps)(HOST = mydomain.mydomain.com)(PORT = 3002))(CONNECT_DATA =(SERVICE_NAME = ISAT)))");
          属性props = new Properties();
          props.setProperty(" user"," abc123");
          props.setProperty(" password"," abc123");
         //props.setProperty(" 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)");
 
          props.setProperty(" javax.net.ssl.trustStore","/img/usr/lib/oracle/wallets/cwallet.sso");
          props.setProperty(" javax.net.ssl.trustStoreType"," SSO");
 
          连接conn = DriverManager.getConnection(url,props);
 
          PreparedStatement语句= conn.prepareStatement("从mydatabase.MY_STUFF中选择ORA_DESCRIPTION,其中rownum <50");
          statement.execute();
          ResultSet结果= statement.getResultSet();
          while(results.next()){
              System.out.println(results.getString(1));
          };
      }
  }

  

我们遇到的错误:

 错误[NewProductsEcommLoad(Nightly):: de.hybris.platform.servicelayer.internal.jalo.ServicelayerJob](NewProductsEcommLoad(Nightly))[Job]抛出异常无法获得JDBC连接; 嵌套的异常是java.sql.SQLRecoverableException:IO错误:网络适配器无法建立连接
   org.springframework.jdbc.CannotGetJdbcConnectionException:无法获取JDBC连接。 嵌套的异常是java.sql.SQLRecoverableException:IO错误:网络适配器无法建立连接
           在org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
           在org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:390)
           在org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:470)
           在org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:480)
           在com.mydomain.hybris.dao.impl.CUSTOMNightlyLoadDAOImpl.getCUSTOMCategoryInfo(CUSTOMNightlyLoadDAOImpl.java:945)
           在com.mydomain.hybris.cron.NewProductsEcommLoadNightlyStaged.processCategories(NewProductsEcommLoadNightlyStaged.java:357)
           在com.mydomain.hybris.cron.NewProductsEcommLoadNightlyStaged.perform(NewProductsEcommLoadNightlyStaged.java:239)
           在com.mydomain.hybris.cron.NewProductsEcommLoadNightlyStaged $$ FastClassBySpringCGLIB $$ bdfd982b.invoke(<生成>)
           在org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
           在org.springframework.aop.framework.CglibAopProxy $ CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720)
           在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
           在org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java
 
           在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
           在org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:44)
           在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
           在org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
           在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
           在org.springframework.aop.framework.CglibAopProxy $ DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)
           at com.mydomain.hybris.cron.NewProductsEcommLoadNightlyStaged $$ EnhancerBySpringCGLIB $$ 102cdfde.perform(<生成>)
           在de.hybris.platform.servicelayer.internal.jalo.ServicelayerJob.performCronJob(ServicelayerJob.java:39)
           在de.hybris.platform.cronjob.jalo.Job.execute(Job.java:1278)
           在de.hybris.platform.cronjob.jalo.Job.performImpl(Job.java:803)
           在de.hybris.platform.cronjob.jalo.Job.access $ 1(Job.java:756)
           在de.hybris.platform.cronjob.jalo.Job $ JobRunable.run(Job.java:676)
           在de.hybris.platform.util.threadpool.PoolableThread.run(PoolableThread.java:196)
   原因:java.sql.SQLRecoverableException:IO错误:网络适配器无法建立连接
           在oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:458)
           在oracle.jdbc.driver.PhysicalConnection。(PhysicalConnection.java:546)
           在oracle.jdbc.driver.T4CConnection。(T4CConnection.java:236)
           在oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
           在oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
           在oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:280)
           在oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:207)
           在oracle.jdbc.pool.OracleConnectionPoolDataSource.getPhysicalConnection(OracleConnectionPoolDataSource.java:139)
           在oracle.jdbc.pool.OracleConnectionPoolDataSource.getPooledConnection(OracleConnectionPoolDataSource.java:88)
           在oracle.jdbc.pool.OracleImplicitConnectionCache.makeCacheConnection(OracleImplicitConnectionCache.java:1598)
           在oracle.jdbc.pool.OracleImplicitConnectionCache.makeOneConnection(OracleImplicitConnectionCache.java:515)
           在oracle.jdbc.pool.OracleImplicitConnectionCache.defaultUserPrePopulateCache(OracleImplicitConnectionCache.java:222
 
           在oracle.jdbc.pool.OracleImplicitConnectionCache。(OracleImplicitConnectionCache.java:198)
           在oracle.jdbc.pool.OracleConnectionCacheManager.createCache(OracleConnectionCacheManager.java:306)
           在oracle.jdbc.pool.OracleConnectionCacheManager.createCache(OracleConnectionCacheManager.java:192)
           在oracle.jdbc.pool.OracleDataSource.cactialize(OracleDataSource.java:414)
           在oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:393)
           在oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:179)
           在oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:157)
           在org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
           在org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
           ...另外24个
   由以下原因引起:oracle.net.ns.NetException:网络适配器无法建立连接
           在oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:392)
           在oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:434)
           在oracle.net.ns.NSProtocol。建立连接(NSProtocol.java:687)
           在oracle.net.ns.NSProtocol.connect(NSProtocol.java:247)
           在oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1102)
   原因:oracle.net.ns.NetException:无法初始化ssl上下文。
           在oracle.net.nt.CustomSSLSocketFactory.getSSLSocketFactory(CustomSSLSocketFactory.java:327)
           在oracle.net.nt.TcpsNTAdapter.connect(TcpsNTAdapter.java:117)
           在oracle.net.nt.ConnOption.connect(ConnOption.java:133)
           在oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:370)
           ...还有49个
   原因:oracle.net.ns.NetException:无法初始化信任存储。
           在oracle.net.nt.CustomSSLSocketFactory.getTrustManagerArray(CustomSSLSocketFactory.java:415)
           在oracle.net.nt.CustomSSLSocketFactory.getSSLSocketFactory(CustomSSLSocketFactory.java:311)
           ...另外52个
   原因:java.security.KeyStoreException:找不到SSO
           在java.security.KeyStore.getInstance(KeyStore.java:851)
           在oracle.net.nt.CustomSSLSocketFactory.getTrustManagerArray(CustomSSLSocketFactory.java:403)
           ...还有53个
   原因:java.security.NoSuchAlgorithmException:SSO密钥库不可用
           在sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
           在java.security.Security.getImpl(Security.java:695)
           在java.security.KeyStore.getInstance(KeyStore.java:848)
           ...更多54



  
5条回答
悻福寶寶
2020-09-28 04:01 .采纳回答

感谢您看看Sampath!

我们能够使所有工作正常进行,我认为关键是至少在我们的客户端/服务器配置中将OraclePKIProvider移至列表下方,并删除ssl_cipher_suites。 当我们移动OraclePKIProvider时,由于密码类型不匹配,我们收到了handhake_error,然后通过完全删除该配置来纠正该错误。 这就是我们最终得到的:

local.properties:

  external.db.driver = oracle.jdbc.driver.OracleDriver
  external.db.url = jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS =(PROTOCOL = tcps)(HOST = hostname)(PORT = 3002))(CONNECT_DATA =(SERVICE_NAME = ORCL)))
  external.db.user =用户
  external.db.pass =通过
  external.db.trustStore =/usr/lib/oracle/wallets/cwallet.sso
  external.db.trustStoreType = SSO

  

spring.xml:

  
          <属性名称=" connectionCachingEnabled"值=" true"/>
          
          
          
          
                  <道具>
                           $ {jdbc.connection.pool.min} 
                           $ {jdbc.connection.pool.max} 
                           $ {jdbc.connection.pool.initial} 
                           $ {jdbc.connection.pool.inactivity.timeout} 
                           $ {jdbc.connection.pool.wait.timeout} 
                          为真
                         为真
                          从双重中选择1 
                          是真的
                  
          
          
                  <道具>
                           $ {external.db.trustStore} 
                           $ {external.db.trustStoreType} 
                  
          
  

  

java.security:

  security.provider.1 = sun.security.provider.Sun
  security.provider.2 = sun.security.rsa.SunRsaSign
  security.provider.3 = sun.security.ec.SunEC
  security.provider.4 = com.sun.net.ssl.internal.ssl.Provider
  security.provider.5 = com.sun.crypto.provider.SunJCE
  security.provider.6 = sun.security.jgss.SunProvider
  security.provider.7 = oracle.security.pki.OraclePKIProvider
  security.provider.8 = com.sun.security.sasl.Provider
  security.provider.9 = org.jcp.xml.dsig.internal.dom.XMLDSigRI
  security.provider.10 = sun.security.smartcardio.SunPCSC

  

一周热门 更多>