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

使用Java JDBC连接Oracle 19c时遭遇SSL握手失败求助

解决Java JDBC连接Oracle 19c时的SSL握手失败问题

问题背景

在AIX 6.1环境下使用IBM JRE 1.8编写Java JDBC程序,通过证书连接Oracle 19c数据库时出现SSL握手失败。已确认客户端证书正确且与服务器端匹配,且握手过程中已收到*** Finished消息,但后续仍触发握手失败错误。

错误日志

main, READ: TLSv1.2 Alert, length = 2
main, RECV TLSv1.2 ALERT:  fatal, handshake_failure
main, fatal: engine already closed.  Rethrowing javax.net.ssl.SSLException: Received fatal alert: handshake_failure
main, fatal: engine already closed.  Rethrowing javax.net.ssl.SSLException: Received fatal alert: handshake_failure
main, called closeOutbound()
main, closeOutboundInternal()
main, SEND TLSv1.2 ALERT:  warning, description = close_notify
main, WRITE: TLSv1.2 Alert, length = 2
[Raw write]: length = 7

排查与解决步骤

  • 确认IBM JRE的TLS协议配置:虽然日志显示使用TLSv1.2,但需显式指定JVM启用该协议,避免默认配置限制。添加JVM参数:-Djdk.tls.client.protocols=TLSv1.2
  • 检查证书链完整性:用IBM JRE自带的ikeyman工具查看客户端密钥库,确保包含完整的证书链(根CA+中间CA+客户端证书),避免因证书链断裂导致服务器端验证失败。
  • 核对Oracle服务器SSL配置:检查数据库端sqlnet.ora文件,确认SSL_CLIENT_AUTHENTICATION=TRUE(双向认证场景),且SSL_CIPHER_SUITES配置的加密套件与IBM JRE支持的套件匹配。同时开启服务器端SSL日志(SSL_TRACE=TRUE),获取握手失败的具体原因。
  • 验证JVM密钥库/信任库参数:确保JDBC连接URL和JVM参数中密钥库、信任库的路径、密码、类型(如JKS/PKCS12)配置正确。示例JDBC URL:
    jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=xxx)(PORT=xxx))(CONNECT_DATA=(SERVICE_NAME=xxx))(SECURITY=(SSL_SERVER_CERT_DN="xxx")))
    
    对应JVM参数示例:
    -Djavax.net.ssl.keyStore=/path/to/client.keystore
    -Djavax.net.ssl.keyStorePassword=xxx
    -Djavax.net.ssl.trustStore=/path/to/truststore
    -Djavax.net.ssl.trustStorePassword=xxx
    
  • 更新AIX系统加密补丁:AIX 6.1的系统加密库可能存在版本缺陷,安装最新的加密相关补丁,确保IBM JRE能正常调用系统加密资源完成握手。
  • 启用JVM SSL详细日志:添加参数-Djavax.net.debug=ssl:handshake:verbose,获取完整握手流程日志,定位Finished消息后具体的失败环节。

内容的提问来源于stack exchange,提问作者user1929905

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:52:22