如何为Oracle连接开启SSL加密_Java安全传输配置

冬浩同学_9156

冬浩同学_9156

2026-04-09

936人浏览

原创

Oracle JDBC启用SSL必须先配置服务端:数据库需部署有效SSL证书,监听器(listener.ora)启用TCPS协议,sqlnet.ora设置SSL_VERSION=1.2,且执行ALTER SYSTEM SET SSL_CLIENT_AUTHENTICATION=TRUE;Java客户端须用TCPS URL、oracle.net.ssl_server_dn_match=true,并通过Wallet或trustStore信任证书。

Oracle JDBC连接启用SSL的必要前提

不配置服务端就直接改java客户端,十有八九连不上。oracle的ssl不是“开个开关就行”的功能,它依赖数据库实例已部署有效的ssl证书,并且监听器(listener.ora)和数据库参数(sqlnet.ora)已启用tcps协议支持。常见错误现象是java端抛出 io exception: connection reset 或 javax.net.ssl.sslhandshakeexception,但根本原因往往在数据库侧没准备好。

  • 确认数据库监听器已配置TCPS端口(如1522),并在 listener.ora 中包含 (PROTOCOL=TCPS) 地址
  • 检查 sqlnet.ora 是否设置了 SSL_VERSION = 1.2(Oracle 12c+ 推荐,旧版本可能不支持TLS 1.2)
  • 数据库需启用SSL验证:执行 ALTER SYSTEM SET SSL_CLIENT_AUTHENTICATION = TRUE SCOPE=BOTH;(如需双向认证)
  • Java客户端使用的JDK必须信任数据库服务器证书——通常需将数据库CA证书导入JDK的 $JAVA_HOME/jre/lib/security/cacerts,用 keytool -importcert

Java端JDBC URL中启用SSL的关键参数

Oracle JDBC驱动(ojdbc8.jar 及以上)通过URL参数控制SSL行为,不能只靠系统属性或单独配置SSLSocketFactory。最简可用的SSL连接URL长这样:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=mydb.example.com)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=orcl)))

关键点在于把 PROTOCOL=TCP 换成 PROTOCOL=TCPS,并确保端口对应监听器的TCPS端口。除此之外,还需显式传入SSL相关属性:

  • 必须设置 oracle.net.ssl_server_dn_match=true(否则默认false,跳过证书域名校验,不安全)
  • 若服务端证书由私有CA签发,需指定信任库:javax.net.ssl.trustStore=/path/to/truststore.jks 和 javax.net.ssl.trustStorePassword=changeit
  • 不要设 oracle.net.ssl_version 在URL里——它已被废弃,应统一在 sqlnet.ora 控制
  • 避免混用:不要同时在URL里写 ?user=xxx&password=yyy 和用 Properties 传凭证,优先用 Properties 方式,更可控

使用Oracle Wallet替代JKS管理证书(推荐生产环境)

JKS方式需要维护文件路径、密码、权限,容易在容器或云环境中出问题。Oracle Wallet是更贴近数据库生态的方案,Java端通过 oracle.net.wallet_location 指向wallet目录即可复用同一套证书体系。

  • 创建wallet命令:mkstore -wrl /path/to/wallet -create,再用 mkstore -wrl ... -add trusted_cert 导入服务端证书
  • Wallet目录下必须包含 cwallet.sso(含私钥时)或 ewallet.p12(不含私钥时),Java只读取 cwallet.sso
  • JDBC URL中添加参数:oracle.net.wallet_location=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/path/to/wallet)))
  • 注意权限:Java进程必须对wallet目录有读权限,且wallet不能被其他用户写入(否则Oracle驱动拒绝加载)
  • Wallet方式下,无需设置 javax.net.ssl.trustStore 等JVM级SSL参数,避免与应用其他HTTPS调用冲突

验证SSL是否真正生效的实操方法

别只看连接成功就认为SSL启用了。很多情况是URL写了TCPS,但服务端未响应TCPS请求,驱动悄悄fallback到TCP(尤其旧版ojdbc),表面连得上,实际走明文。

  • 抓包确认:用 tcpdump 或 Wireshark 过滤目标端口,检查是否为TLS握手流量(Client Hello / Server Hello),而非普通TNS数据包
  • 查看Oracle会话信息:连接后执行 SELECT SYS_CONTEXT('USERENV', 'NETWORK_PROTOCOL') FROM DUAL;,返回值必须是 tcps,不是 tcp
  • 驱动日志:启用JDBC日志(-Doracle.jdbc.Trace=true),搜索关键词 SSL 和 TCPS,确认建立的是SSL Socket
  • 错误兜底:临时禁用数据库TCPS监听,如果Java连接立刻报错(而不是延迟超时),说明之前确实走的是TCPS

Wallet路径权限、服务端SSL_VERSION与JDK TLS能力不匹配、以及驱动版本过低(如用ojdbc6连19c强制TLS 1.2)——这些细节一旦漏掉,调试起来比写代码还耗时间。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

11337

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

8442

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

7292

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1204

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

988

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1456

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2989

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20251

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1315

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习