1.1、Oracle Net 加密配置
Oracle Net 加密配置,就是用 Oracle 原生网络加密(NNE,Native Network Encryption),对数据库客户端 ↔ 服务器之间的 Oracle Net 流量做传输加密 + 完整性校验,防止抓包窃听、篡改,属于 Oracle Advanced Security(ASO)的基础能力,不用证书、不用 TLS 端口,直接在 sqlnet.ora 配置。
默认 Oracle Net 是明文传输,可被 Wireshark 直接看到 SQL 内容;开启 NNE 后会对整个会话加密。
1.1.1、核心配置文件:sqlnet.ora
位置(服务器 + 客户端都要有):
- Linux:
$ORACLE_HOME/network/admin/sqlnet.ora - Windows:
%ORACLE_HOME%\network\admin\sqlnet.oraOracle
加密策略(必配)
sql
-- 服务器端
SQLNET.ENCRYPTION_SERVER = REQUIRED
-- 客户端
SQLNET.ENCRYPTION_CLIENT = REQUIRED
四种策略:
- REQUIRED:必须加密,不加密就拒绝连接
- REQUESTED:能加密就加密,不行就明文
- ACCEPTED:对方要求加密就加密
- REJECTED:禁止加密,强制明文
加密算法(必配)
sql
-- 服务器端
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256,AES192,AES128)
-- 客户端
SQLNET.ENCRYPTION_TYPES_CLIENT = (AES256,AES192,AES128)
常用算法(优先 AES):
- AES256:最高安全,性能损耗小
- AES192 / AES128
- 3DES、RC4(老旧兼容)
完整性校验(防篡改,必配)
sql
-- 服务器端
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256,SHA1)
-- 客户端
SQLNET.CRYPTO_CHECKSUM_CLIENT = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT = (SHA256,SHA1)
算法:SHA256(推荐)、SHA1、SHA384、SHA512
基本加密配置
服务器 sqlnet.ora
sql
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256)
客户端 sqlnet.ora
sql
SQLNET.ENCRYPTION_CLIENT = REQUIRED
SQLNET.ENCRYPTION_TYPES_CLIENT = (AES256)
SQLNET.CRYPTO_CHECKSUM_CLIENT = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT = (SHA256)
生效:
- 不用重启数据库 / 监听,新连接自动生效
- 老连接保持原状态
- 试图查询是否生效:SELECT NETWORK_SERVICE, ENCRYPTION_ALGORITHM, INTEGRITY_ALGORITHM FROM V$SESSION_CONNECT_INFO WHERE SID = USERENV('SID');
1.2、SSL/TLS 配置
Oracle SSL/TLS 是基于数字证书的数据库网络安全连接方案,替代明文 1521 端口,实现:
- 客户端 <-> 数据库全程加密传输
- 双向身份认证(防钓鱼、仿冒数据库)
- 金融、政务、等保三级强制要求
- 独立端口:默认 2484(TCPS 协议)
核心组件
- Oracle Wallet 钱包 存放:服务器证书、客户端证书、CA 根证书,Oracle 专属密钥库
- TCPS 协议 监听不用 TCP,改用TCPS
- 三个配置文件:
listener.ora监听开启 SSL、tnsnames.ora客户端走 TCPS、sqlnet.ora指定钱包路径、SSL 规则
两种认证模式
-
单向 SSL(最常用) 客户端验证数据库服务器证书,数据库不校验客户端 适合业务系统、APP 连接
-
双向 SSL(互信认证) 服务端验客户端证书 + 客户端验服务端证书 最高安全,仅限内网核心系统
关键配置
1. 服务端配置
- 创建 Oracle 钱包,导入服务器证书
listener.ora新增 TCPS 监听 2484sqlnet.ora指定钱包路径、SSL 版本
2. 客户端配置
- 客户端钱包放入根证书 / 客户端证书
- tns 别名改用
(PROTOCOL=TCPS) - JDBC 连接改用
jdbc:oracle:thin:@(DESCRIPTION=...TCPS...)
基本SSL/TLS 配置
环境:Linux + Oracle 通用
端口:明文 1521 + SSL 端口2484
模式:单向 SSL(生产最常用)
1、前期准备:创建 Oracle 钱包 & 自签证书
创建钱包目录
bash
mkdir -p /u01/oracle/wallet
chmod 700 /u01/oracle/wallet
chown oracle:oinstall /u01/oracle/wallet
生成钱包 + 自签证书(orapki 命令)
bash
# 1. 创建空钱包
orapki wallet create -wallet /u01/oracle/wallet -auto_login_local
# 2. 创建服务器自签证书
orapki wallet add -wallet /u01/oracle/wallet -dn "CN=oracledb,OU=db,O=company,L=city,S=province,C=CN" -keysize 2048 -self_signed -validity 3650
导出根证书(客户端要用)
bash
orapki wallet export -wallet /u01/oracle/wallet -dn "CN=oracledb,OU=db,O=company,L=city,S=province,C=CN" -cert /u01/oracle/wallet/server.crt
2、服务端配置文件
listener.ora (监听配置): 路径:$ORACLE_HOME/network/admin/listener.ora
bash
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
)
# SSL/TLS 监听 2484
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = 0.0.0.0)(PORT = 2484))
)
)
# SSL 钱包路径
SSL_CLIENT_AUTHENTICATION = FALSE
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /u01/oracle/wallet)
)
)
sqlnet.ora (全局网络安全配置): 路径:$ORACLE_HOME/network/admin/sqlnet.ora
bash
# 钱包路径
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /u01/oracle/wallet)
)
)
# 单向SSL关闭客户端证书校验
SSL_CLIENT_AUTHENTICATION = FALSE
# 允许登录方式
SQLNET.AUTHENTICATION_SERVICES= (BEQ,TCPS,NTS)
# 禁用弱SSL协议
SSL_VERSION = 1.2
SSL_CIPHER_SUITES = (TLS_RSA_WITH_AES_256_CBC_SHA256)
# 关闭原生加密冲突(可选)
SQLNET.ENCRYPTION_SERVER=REJECTED
tnsnames.ora 服务端本地 TNS
bash
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
# SSL连接别名
ORCL_SSL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCPS)(HOST = 数据库IP)(PORT = 2484))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
3、重启监听生效
bash
lsnrctl stop
lsnrctl start
lsnrctl status
看到 TCPS 2484 即成功
4、客户端全套配置
客户端准备: 把服务端导出的 server.crt 放到客户端钱包目录,客户端创建钱包导入证书
bash
# 客户端创建钱包
orapki wallet create -wallet D:\oracle\wallet -auto_login
# 导入服务端证书
orapki wallet add -wallet D:\oracle\wallet -trusted_cert -cert D:\oracle\wallet\server.crt
客户端 sqlnet.ora
bash
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = D:\oracle\wallet)
)
)
SSL_CLIENT_AUTHENTICATION = FALSE
SSL_VERSION = 1.2
客户端 tnsnames.ora (SSL 连接串)
bash
ORCL_SSL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST=数据库IP)(PORT=2484))
(CONNECT_DATA = (SERVICE_NAME=orcl))
)
客户端测试连接
bash
sqlplus 用户名/密码@ORCL_SSL
总结:NNE 与 SSL/TLS 对比
| 对比项 | NNE (原生加密) | SSL/TLS(TCPS) |
|---|---|---|
| 证书 / 钱包 | ❌ 不需要 | ✅ 必须 |
| 端口 / 协议 | 1521/TCP 不变 | 2484/TCPS |
| 身份认证 | ❌ 仅用户名密码 | ✅ 证书认证 (单向 / 双向) |
| 防中间人攻击 | ❌ 不能 | ✅ 可以 |
| 配置复杂度 | 极低 (仅 sqlnet.ora) | 中等 (需证书 + 3 个文件) |
| 性能损耗 | 低 (5-10%) | 中 (10-20%) |
| 等保三级 | ❌ 不满足 | ✅ 满足 |
| 适用场景 | 内网、开发测试 | 外网、生产、合规要求 |