Spring Boot 2.7.3+Java11使用cwallet.sso无法连接Oracle 12C求助
Spring Boot CommandLineRunner 通过SSL连接Oracle 12C(使用cwallet.sso)超时问题
我创建了一个小型Spring Boot CommandLineRunner应用,尝试通过SSL连接Oracle 12C数据库。已知SSL配置本身是正确的,因为AWS DMS可以通过SSL成功访问该Oracle数据源,但本地Windows笔记本运行应用时,始终无法建立连接,报错超时。
依赖配置(pom.xml)
<dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>19.3.0.0</version> </dependency> <dependency> <groupId>com.oracle.database.security</groupId> <artifactId>oraclepki</artifactId> <version>19.3.0.0</version> </dependency> <dependency> <groupId>com.oracle.database.security</groupId> <artifactId>osdt_cert</artifactId> <version>19.3.0.0</version> </dependency> <dependency> <groupId>com.oracle.ojdbc</groupId> <artifactId>osdt_core</artifactId> <version>19.3.0.0</version> </dependency>
应用代码片段
Security.addProvider(new oracle.security.pki.OraclePKIProvider()); Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@(description=(retry_count=5)(retry_delay=3)(address=(protocol=tcps)" + "(port=2484)(host=redacted.com))(connect_data=(service_name=REDACTED.COM))" + "(security=(ssl_server_cert_dn=\"CN=redacted.com,OU=redacted,O=redacted,C=uk\")))"; Properties properties = new Properties(); properties.put("javax.net.ssl.trustStore","C:/oracle/network/admin/cwallet.sso"); properties.put("oracle.net.wallet_location","file:///C:/oracle/network/admin/cwallet.sso"); properties.put("oracle.net.ssl_version","1.2"); properties.put("javax.net.ssl.trustStoreType","SSO"); properties.put("oracle.net.ssl_server_dn_match", "true"); properties.put("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)"); properties.put("oracle.net.ssl_client_authentication","false"); con = DriverManager.getConnection(url,properties);
错误日志
java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:854) at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:793) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:57) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:747) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:562) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:189) at com.electrocomponents.application.Application.initialise(Application.java:64) at com.electrocomponents.application.Application.run(Application.java:34) at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:771) at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:755) at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) at com.electrocomponents.application.Application.main(Application.java:27) Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:571) at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:548) at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:682) at oracle.net.ns.NSProtocol.connect(NSProtocol.java:309) at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1596) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:588) ... 14 more Caused by: java.io.IOException: Connection timed out: connect, socket connect lapse 21039 ms. redacted.com/17.256.95.22 2484 0 1 at oracle.net.nt.TcpsNTAdapter.connect(TcpsNTAdapter.java:295) at oracle.net.nt.ConnOption.connect(ConnOption.java:174) at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:510) ... 19 more Caused by: java.net.ConnectException: Connection timed out: connect at java.base/sun.nio.ch.Net.connect0(Native Method) at java.base/sun.nio.ch.Net.connect(Net.java:482) at java.base/sun.nio.ch.Net.connect(Net.java:474) at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:694) at java.base/java.nio.channels.SocketChannel.open(SocketChannel.java:194) at oracle.net.nt.TimeoutSocketChannel.connect(TimeoutSocketChannel.java:99) at oracle.net.nt.TimeoutSocketChannel.<init>(TimeoutSocketChannel.java:85) at oracle.net.nt.TcpsNTAdapter.connect(TcpsNTAdapter.java:229) ... 21 more
已完成的排查
- 阅读Oracle官方文档《SSL With Oracle JDBC Thin Driver》(2010年发布)
- 通过Oracle服务器命令
orapki wallet display -wallet cwallet.sso查看钱包内的用户和受信任证书,并确保JDBC URL中的ssl_server_cert_dn与证书信息完全匹配 - 已配置
sqlnet.ora和tnsnames.ora文件,与cwallet.sso同目录
sqlnet.ora 内容
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY = "C:\\oracle\\network\\admin"))) SSL_SERVER_DN_MATCH = yes sqlnet.wallet_override = true
tnsnames.ora 内容
database_high= (description= (address= (protocol=tcps) (port=2484) (host=redacted.com) ) (connect_data= (service_name=REDACTED.COM) ) (security= (ssl_server_cert_dn="CN=redacted.com,OU=redacted,O=redacted,C=uk") ) )
希望能得到仅使用cwallet.sso文件连接Oracle的可用Spring Boot示例,或者针对当前超时问题的解决方案。
内容的提问来源于stack exchange,提问作者ChaosSystems
相关产品推荐
相关产品推荐

