You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 19:35:22