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

Oracle数据库JDBC连接下SSL客户端认证验证失败求助

Oracle SSL配置验证及客户端认证实现方案

一、验证SSL配置是否生效

1. 测试TCPS连接

构造TCPS类型的TNS连接字符串(保存到客户端tnsnames.ora):

SSL_TEST_CONN =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCPS)(HOST = DB-Oracle)(PORT = 2484))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = 你的数据库服务名)
    )
  )

执行以下命令测试连通性:

# 测试监听可达性
tnsping SSL_TEST_CONN

# 测试数据库连接
sqlplus 用户名/密码@SSL_TEST_CONN

若命令执行成功,说明SSL基础配置已生效。

2. 检查监听状态

执行lsnrctl status,确认输出中包含TCPS协议的监听地址,且状态为READY:

...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=DB-Oracle)(PORT=2484)))
...
STATUS READY

3. 查看日志确认

检查服务器端的监听日志(位于$ADR_BASE/diag/tnslsnr/DB-Oracle/listener/trace)或数据库alert日志,查找SSL wallet加载、TCPS启动成功的相关日志信息。

二、实现客户端认证的关键调整

当前配置中SSL_CLIENT_AUTHENTICATION均设为false,这是客户端认证不生效的核心原因,需按以下步骤调整:

1. 服务器端配置修改

listener.ora

将SSL_CLIENT_AUTHENTICATION改为true:

SSL_CLIENT_AUTHENTICATION = true
WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /home/app/oracle/SSLTRY0702)))
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = DB-Oracle)(PORT = 1521))(ADDRESS = (PROTOCOL = TCPS)(HOST = DB-Oracle)(PORT = 2484))))

sqlnet.ora

同样修改SSL_CLIENT_AUTHENTICATION为true:

SSL_CLIENT_AUTHENTICATION = true
ADR_BASE = /home/app/oracle
WALLET_LOCATION = (SOURCE = (METHOD = FILE)(METHOD_DATA =(DIRECTORY = /home/app/oracle/SSLTRY0702)))

修改后重启监听服务:

lsnrctl stop
lsnrctl start

2. 客户端配置修改

sqlnet.ora

将SSL_CLIENT_AUTHENTICATION改为True:

SQLNET.AUTHENTICATION_SERVICES= (BEQ,TCPS,NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA =(DIRECTORY = "D:\\certs\\SSLTRY0702")))
SSL_CLIENT_AUTHENTICATION = True

3. DBVisualiser客户端密钥库配置

当前的cacert01.jks仅包含服务器证书,需创建包含客户端证书和私钥的JKS密钥库:

  1. 从客户端Oracle钱包导出PKCS#12格式的密钥库:
orapki wallet export_p12 -wallet "D:\\certs\\SSLTRY0702" -pwd WalletPasswd123 -p12file client.p12 -p12pwd changeit
  1. 将PKCS#12文件转换为JKS格式:
keytool -importkeystore -srckeystore client.p12 -srcstoretype PKCS12 -srcstorepass changeit -destkeystore client_keystore.jks -deststoretype JKS -deststorepass changeit
  1. 在DBVisualiser中配置:
    • net.ssl.trustStore:指向cacert01.jks
    • net.ssl.keyStore:指向client_keystore.jks
    • 配置对应的net.ssl.keyStorePassword和net.ssl.trustStorePassword为changeit

4. 验证客户端认证生效

  • 移除客户端密钥库配置或使用无效密钥库尝试连接,此时应连接失败;
  • 使用正确的密钥库和信任库连接,应成功建立会话,以此确认客户端认证生效。

三、常见问题排查

  • 确认服务器端Oracle用户对wallet目录有读写权限,客户端wallet目录路径配置正确;
  • 检查客户端证书已正确导入服务器wallet的可信证书列表,证书DN无匹配问题;
  • 查看监听日志、sqlnet日志或DBVisualiser的连接日志,定位具体错误(如证书验证失败、wallet加载失败等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:25:15