Oracle 网络加密详解
Oracle 网络加密详解
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Oracle 网络加密保护数据传输[1]:
方式:
- Native Encryption
- SSL/TLS
- Kerberos
- RADIUS
详细见:Oracle 网络架构与加密。
2. Native Encryption
2.1 sqlnet.ora
# 加密
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_CLIENT = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192, AES128, 3DES)
SQLNET.ENCRYPTION_TYPES_CLIENT = (AES256, AES192, AES128, 3DES)
# 完整性
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_CLIENT = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256, SHA1, MD5)
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT = (SHA256, SHA1, MD5)
2.2 选项
- ACCEPTED:默认
- REJECTED:拒绝
- REQUESTED:请求
- REQUIRED:强制
2.3 验证
-- 视图
SELECT network_service_banner
FROM v$session_connect_info
WHERE sid = SYS_CONTEXT('USERENV', 'SID');
3. SSL/TLS
3.1 Wallet 创建
orapki wallet create -wallet /u01/wallet -pwd Wallet123
orapki wallet add -wallet /u01/wallet -pwd Wallet123 \
-dn "CN=oradb1.example.com,O=example,C=US" \
-keysize 2048 -self_signed -validity 365
orapki wallet display -wallet /u01/wallet -pwd Wallet123
3.2 启用自动登录
orapki wallet create -wallet /u01/wallet -pwd Wallet123 -auto_login
3.3 sqlnet.ora
WALLET_LOCATION = (SOURCE = (METHOD = FILE)(METHOD_DATA = (DIRECTORY=/u01/wallet)))
SSL_CLIENT_AUTHENTICATION = FALSE
SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA256)
SSL_VERSION = 1.2
3.4 listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = oradb1)(PORT = 1522))
)
)
SSL_CLIENT_AUTHENTICATION = FALSE
WALLET_LOCATION = (SOURCE = (METHOD = FILE)(METHOD_DATA = (DIRECTORY=/u01/wallet)))
3.5 tnsnames.ora
ORCL_SSL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = oradb1)(PORT = 1522))
(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl))
(SECURITY = (SSL_SERVER_CERT_DN = "CN=oradb1.example.com,O=example,C=US"))
)
4. Kerberos
4.1 配置
# sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES = (KERBEROS5)
SQLNET.KERBEROS5_CONF = /etc/krb5.conf
SQLNET.KERBEROS5_CC_NAME = /tmp/krb5cc_500
SQLNET.KERBEROS5_MUTUAL_AUTHENTICATION = true
4.2 KDC
# /etc/krb5.conf
[libdefaults]
default_realm = EXAMPLE.COM
[realms]
EXAMPLE.COM = {
kdc = kdc.example.com
admin_server = kdc.example.com
}
4.3 连接
kinit oracle
sqlplus /@orcl
5. 配置示例
5.1 强制加密
# 服务端 sqlnet.ora
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256)
5.2 客户端
# sqlnet.ora
SQLNET.ENCRYPTION_CLIENT = REQUIRED
SQLNET.CRYPTO_CHECKSUM_CLIENT = REQUIRED
5.3 验证
-- v$session_connect_info
SELECT sid, network_service_banner
FROM v$session_connect_info;
6. 密码安全
6.1 sqlnet.ora
# 密码版本
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 12
SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 12
# 密码加密
SQLNET.PASSWORD_RULES = ...
6.2 密码文件
orapwd file=$ORACLE_HOME/dbs/orapworcl password=****** entries=10
orapwd file=$ORACLE_HOME/dbs/orapworcl password=****** format=12
7. IP 白名单
7.1 sqlnet.ora
TCP.INVITED_NODES = (192.168.1.10, 192.168.1.11, oradb1)
TCP.EXCLUDED_NODES = (192.168.1.100)
TCP.VALIDNODE_CHECKING = yes
8. 连接超时
SQLNET.INBOUND_CONNECT_TIMEOUT = 60
SQLNET.OUTBOUND_CONNECT_TIMEOUT = 60
SQLNET.RECV_TIMEOUT = 60
SQLNET.SEND_TIMEOUT = 60
9. 连接数控制
# sqlnet.ora
SQLNET.MAX_CONNECTIONS = 1024
# listener.ora
INBOUND_CONNECT_TIMEOUT_LISTENER = 60
10. 证书管理
10.1 创建 CA
# CA 私钥
openssl genrsa -out ca.key 2048
openssl req -new -x509 -key ca.key -out ca.crt -days 365
# 签发证书
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365
10.2 导入 Wallet
orapki wallet add -wallet /u01/wallet -pwd Wallet123 \
-trusted_cert -cert /path/ca.crt
orapki wallet add -wallet /u01/wallet -pwd Wallet123 \
-user_cert -cert /path/server.crt
11. 性能
11.1 Native
- AES-NI 硬件加速
- 性能影响 < 5%
11.2 SSL
- 握手开销
- 会话复用
12. 验证
12.1 连接
sqlplus -L system/pwd@orcl
12.2 网络抓包
tcpdump -i any port 1521 -A
# 加密后无法读取
12.3 视图
SELECT network_service_banner FROM v$session_connect_info;
13. 常见坑与排错
13.1 ORA-12660
- 加密协商失败
- 检查 sqlnet.ora
13.2 ORA-28857
- SSL 错误
- Wallet
- 证书
13.3 ORA-28862
- SSL 连接失败
- 端口 / 协议
13.4 ORA-12649
- 加密类型不匹配
- 协商
14. 最佳实践
- 强制加密:REQUIRED
- AES256:强加密
- SHA256:完整性
- SSL/TLS:现代
- 自动登录 Wallet:自动化
- IP 白名单:访问
- 超时:防护
- 证书有效期:监控
- 测试:验证
- 文档化:配置
15. 参考资料
[1] Oracle Database Security Guide 19c, “Configuring Network Encryption” https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/