Windows与Linux环境下Oracle SSL配置操作步骤说明
Oracle环境SSL配置全操作流程(Windows/Linux双场景覆盖)
前置准备
- 提前确认Oracle服务端实例、默认TCP监听运行正常,客户端和服务端网络连通
- 准备证书材料:测试环境可直接生成自签名证书,生产环境建议使用CA签发的合规证书,证书CN字段需匹配数据库服务端的实际IP或域名
- 操作全程使用对应权限账号:Windows用管理员组账号,Linux切换至oracle运维账号操作,不要直接用root执行Oracle相关命令,避免权限错乱
- Oracle自带的
orapki工具为配置核心工具,Windows默认路径为%ORACLE_HOME%\bin\orapki.exe,Linux默认路径为$ORACLE_HOME/bin/orapki,执行命令前可先切到对应bin目录,或把bin目录加入系统环境变量。
一、证书钱包(Wallet)配置(双系统逻辑一致,仅路径有差异)
Oracle通过Wallet文件存储SSL证书、私钥,所有证书操作都围绕钱包展开。
- 提前创建钱包存放目录
- Windows建议路径:
C:\app\oracle\admin\实例名\wallet,创建完成后右键文件夹,给Oracle服务运行账号分配完全控制权限 - Linux建议路径:
/u01/app/oracle/admin/实例名/wallet,创建完成后执行权限配置:chown -R oracle:oinstall /u01/app/oracle/admin/实例名/wallet && chmod 700 /u01/app/oracle/admin/实例名/wallet
- Windows建议路径:
- 创建开启自动登录的钱包,避免数据库/监听重启时反复输入钱包密码
- Windows执行命令:
orapki wallet create -wallet C:\app\oracle\admin\orcl\wallet -auto_login -pwd 自定义钱包密码 - Linux执行命令:
orapki wallet create -wallet /u01/app/oracle/admin/orcl/wallet -auto_login -pwd 自定义钱包密码
- Windows执行命令:
- 导入/生成证书
- 测试环境直接生成自签名证书即可,有效期可按需设置,示例为10年有效期:
Windows命令:orapki wallet add -wallet C:\app\oracle\admin\orcl\wallet -dn "CN=数据库服务端IP/域名,O=所属组织名,C=CN" -keysize 2048 -self_signed -validity 3650 -pwd 钱包密码
Linux命令:orapki wallet add -wallet /u01/app/oracle/admin/orcl/wallet -dn "CN=数据库服务端IP/域名,O=所属组织名,C=CN" -keysize 2048 -self_signed -validity 3650 -pwd 钱包密码 - 生产环境用CA签发证书的,先导出CSR文件提交给CA:
orapki wallet export -wallet 钱包路径 -dn "CN=数据库服务端IP/域名,O=所属组织名,C=CN" -request server.csr -pwd 钱包密码,拿到CA返回的根证书、中间证书、服务端证书后,按顺序导入钱包:先导根证书,再导中间证书,最后导服务端用户证书,导入命令格式:orapki wallet add -wallet 钱包路径 -trusted_cert -cert 证书文件路径 -pwd 钱包密码(导服务端用户证书时去掉-trusted_cert参数)
- 测试环境直接生成自签名证书即可,有效期可按需设置,示例为10年有效期:
- 验证钱包配置:执行
orapki wallet display -wallet 钱包路径 -pwd 钱包密码,输出中能看到已导入的可信证书、用户证书即为配置正常。
二、服务端SSL监听配置
Linux环境操作步骤
- 编辑
$ORACLE_HOME/network/admin/listener.ora文件,添加TCPS监听端口(默认用2484),指定钱包路径,参考配置如下(注意替换成你自己的ORACLE_HOME路径、实例名、IP):
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = /u01/app/oracle/product/19c/dbhome_1) (SID_NAME = orcl) ) ) SSL_CLIENT_AUTHENTICATION = FALSE WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /u01/app/oracle/admin/orcl/wallet) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 数据库服务端IP)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCPS)(HOST = 数据库服务端IP)(PORT = 2484)) ) )
- 编辑同目录下的
sqlnet.ora文件,添加SSL参数配置:
SQLNET.AUTHENTICATION_SERVICES= (BEQ, TCPS, NTS) SSL_VERSION = 1.2 SSL_CIPHER_SUITES= (SSL_RSA_WITH_AES_256_GCM_SHA384,SSL_RSA_WITH_AES_128_GCM_SHA256) WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /u01/app/oracle/admin/orcl/wallet) ) )
- 重启监听生效:执行
lsnrctl stop && lsnrctl start,重启完成后执行lsnrctl status,输出中能看到2484端口的TCPS监听条目即为正常。 - 配置防火墙放行2484端口入站规则。
Windows环境操作步骤
- 可直接编辑
%ORACLE_HOME%\network\admin\listener.ora文件,配置逻辑和Linux完全一致,仅路径替换为Windows格式,参考配置:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = C:\app\oracle\product\19c\dbhome_1) (SID_NAME = orcl) ) ) SSL_CLIENT_AUTHENTICATION = FALSE WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = C:\app\oracle\admin\orcl\wallet) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 数据库服务端IP)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCPS)(HOST = 数据库服务端IP)(PORT = 2484)) ) )
- 编辑同目录下的
sqlnet.ora文件,SSL参数配置和Linux完全一致,仅钱包路径替换为本地Windows路径即可。 - 重启监听生效:按下Win+R输入
services.msc打开服务列表,找到名称类似OracleOraDB19Home1TNSListener的Oracle监听服务(版本不同后缀有差异),右键选择重启。 - 打开cmd执行
lsnrctl status,确认2484端口TCPS监听已正常注册,同时在Windows高级防火墙中添加入站规则放行2484端口。
三、客户端SSL连接配置(双系统通用)
- 在客户端机器上创建客户端钱包,步骤和服务端创建钱包一致,创建完成后将服务端的根证书导入客户端钱包作为可信证书,导入命令:
orapki wallet add -wallet 客户端钱包路径 -trusted_cert -cert 服务端根证书文件路径 -pwd 客户端钱包密码 - 修改客户端网络配置目录下的
tnsnames.ora文件,添加SSL连接串:
ORCL_SSL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCPS)(HOST = 数据库服务端IP)(PORT = 2484)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) (SECURITY= (SSL_SERVER_CERT_DN="CN=数据库服务端IP/域名,O=所属组织名,C=CN") ) )
- 修改客户端的
sqlnet.ora文件,指定客户端钱包路径,SSL版本、加密套件配置和服务端保持一致。 - 连接测试:执行
sqlplus 数据库用户名/密码@ORCL_SSL,能正常登录数据库即为配置成功。
常见问题排查
- 监听启动报钱包加载失败:优先检查钱包目录权限,确认Oracle运行账号对钱包目录和内部的
cwallet.sso、ewallet.p12文件有读写权限,同时核对listener.ora中配置的钱包路径和实际路径完全一致 - 连接报SSL握手失败:检查服务端和客户端的SSL_VERSION配置是否一致,加密套件配置是否匹配,确认客户端钱包已正确导入服务端根证书
- 监听启动正常但telnet不通2484端口:检查系统防火墙是否放行了对应端口,云服务器还要检查安全组规则是否放行端口
- Windows环境配置后连接超时:确认Oracle监听服务的运行账号有足够权限访问钱包目录,不要用本地系统账号跑监听服务,建议用专门的Oracle运维账号运行。
内容的提问来源于stack exchange,提问作者singh
相关产品推荐
相关产品推荐

