一、引言

在 Oracle 19C 中,Wallet 是存储证书、密钥等安全信息的核心容器,广泛用于 SSL/TLS 加密连接、透明数据加密(TDE)等场景。本文将结合生产环境实践,详细讲解如何配置 Oracle Wallet,并解决常见问题。

二、Wallet 基础概念

Wallet 支持以下核心功能:

  • SSL/TLS 加密:保护客户端与数据库的通信安全
  • 透明数据加密(TDE):加密表空间或列级敏感数据
  • 数据库链接加密:保护跨数据库访问的安全性
  • 密钥管理:集中存储和管理加密密钥

三、环境准备

1. 系统参数检查

echo $ORACLE_HOME  # 确认ORACLE_HOME路径
echo $ORACLE_SID   # 确认数据库实例名

2. 创建 Wallet 目录

mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/wallet
chmod 700 $ORACLE_BASE/admin/$ORACLE_SID/wallet  # 权限必须为700
chown -R oracle:oinstall $ORACLE_BASE/admin/$ORACLE_SID/wallet  # 设置属主

四、创建 SSL/TLS Wallet(自签名证书)

1. 生成自动登录 Wallet

orapki wallet create -wallet $ORACLE_BASE/admin/$ORACLE_SID/wallet -pwd WalletPass123! -auto_login

2. 生成自签名证书

orapki wallet add -wallet $ORACLE_BASE/admin/$ORACLE_SID/wallet -pwd WalletPass123! -self_signed -dn "CN=dbhost.example.com" -validity 3650

3. 验证证书

orapki wallet display -wallet $ORACLE_BASE/admin/$ORACLE_SID/wallet -pwd WalletPass123!

五、配置 TDE Wallet

1. 创建 TDE 专用 Wallet

mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/tde_wallet
orapki wallet create -wallet $ORACLE_BASE/admin/$ORACLE_SID/tde_wallet -pwd TdePass123! -auto_login

2. 配置数据库参数

ALTER SYSTEM SET encryption_wallet_location = '(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=$ORACLE_BASE/admin/$ORACLE_SID/tde_wallet)))' SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;

3. 打开 TDE Wallet

ALTER SYSTEM SET encryption wallet open identified by "TdePass123!";
SELECT * FROM v$encryption_wallet;  -- 验证状态

六、多租户环境(CDB/PDB)配置

1. 在 CDB$ROOT 配置 Wallet

ALTER SYSTEM SET encryption_wallet_location = '(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/path/to/wallet)))' SCOPE=SPFILE;

2. 在 PDB 中打开 Wallet

ALTER SESSION SET CONTAINER = pdb1;
ALTER SYSTEM SET encryption wallet open identified by "WalletPass123!";

七、网络配置(SSL 连接)

1. 修改 sqlnet.ora

WALLET_LOCATION = 
  (SOURCE = 
    (METHOD = FILE) 
    (METHOD_DATA = 
      (DIRECTORY = /u01/app/oracle/admin/orcl/wallet)
    ) 
  )
SSL_VERSION = 1.2
SSL_CLIENT_AUTHENTICATION = FALSE

2. 修改 listener.ora

LISTENER = 
  (DESCRIPTION_LIST = 
    (DESCRIPTION = 
      (ADDRESS = (PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCPS)(HOST = dbhost)(PORT = 2484))  # SSL 端口
    ) 
  )
WALLET_LOCATION = 
  (SOURCE = 
    (METHOD = FILE) 
    (METHOD_DATA = 
      (DIRECTORY = /u01/app/oracle/admin/orcl/wallet)
    ) 
  )

3. 重启监听器

lsnrctl stop
lsnrctl start

八、验证与测试

1. SSL 连接测试

sqlplus sys/Password123!@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=dbhost)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=orcl))) as sysdba

2. TDE 功能验证

CREATE TABLESPACE tde_ts DATAFILE '/u01/app/oracle/oradata/orcl/tde_ts.dbf' SIZE 100M ENCRYPTION USING 'AES256' DEFAULT STORAGE (ENCRYPT);

九、常见问题与解决

1. ORA-28374:主密钥丢失

-- 重新生成主密钥
ALTER SYSTEM SET KEY IDENTIFIED BY "TdePass123!";

2. 权限错误

ls -ld $ORACLE_BASE/admin/$ORACLE_SID/wallet  # 检查权限
chmod 700 $ORACLE_BASE/admin/$ORACLE_SID/wallet  # 修复权限

3. 证书过期处理

-- 查看证书有效期
orapki cert display -wallet $ORACLE_BASE/admin/$ORACLE_SID/wallet -pwd WalletPass123! -cert 1

-- 替换证书(示例)
orapki wallet remove -wallet $ORACLE_BASE/admin/$ORACLE_SID/wallet -pwd WalletPass123! -user_cert
orapki wallet add -wallet $ORACLE_BASE/admin/$ORACLE_SID/wallet -pwd WalletPass123! -user_cert -cert new_cert.pem

十、最佳实践建议

  1. 定期备份:每周备份 Wallet 文件到离线存储
  2. 权限管理:严格限制 Wallet 目录访问权限
  3. 证书轮换:提前 30 天规划证书更新
  4. 监控配置:设置 Wallet 状态监控脚本
  5. 兼容性检查:确保数据库兼容参数 ≥ 11.2.0.0

十一、总结

本文详细讲解了 Oracle 19C 中 Wallet 的配置方法,涵盖 SSL/TLS 加密、TDE 配置、多租户环境等核心场景,并提供了常见问题解决方案。通过合理配置 Wallet,可显著提升数据库的安全性和合规性。在生产环境中,建议结合 Oracle 官方文档和实际业务需求,制定完善的密钥管理策略。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐