`
yhq1212
  • 浏览: 78932 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

ORACLE WALLET ORACLE SSL

阅读更多

一把老骨头,多年没折腾了,ORACLE  WALLET 技术和ORACLE SSL的资料是在太少。

目的:避免生产环境中,数据被查阅或修改。应用中加解密效率是关键了。

后遗症:增加后运维难度增加。

 

 

 

 

参考1:

内容参考Oracle官方文档:

  https://oracle-base.com/articles/misc/configure-tcpip-with-ssl-and-tls-for-database-connections

  https://docs.oracle.com/cd/E11882_01/network.112/e40393/asoappf.htm#ASOAG9835

  orapki实用程序用于从命令行管理公用密钥基础结构(PKI)元素,例如钱包和证书撤销列表。这使您可以使用脚本自动执行这些任务。提供一种将PKI元素管理结合到脚本中的方法,可以自动执行许多维护PKI的日常任务

客户端与服务器端基本环境:

  • 服务器端操作系统为CentOS 6.5_x86,安装并在运行着Oracle11g数据库,主机名为oracle.lushenle.com,IP地址为192.168.200.249,数据库实例为orcl
  • 客户端为Windows7操作系统,64位,安装了Oracle11g客户端,能正常连接服务器端的数据库,主机名为ASUS-PC

主要配置步骤:

  • 服务器端配置Wallet和生成证书
  • 客户端配置Wallet和生成证书
  • 交换证书
  • 服务器端网络配置
  • 客户端网络配置
  • 测试连接

服务器端配置Wallet和生成证书

  创建一个新的自动登录wallet

    $ mkdir -p /u01/app/oracle/wallet
    $ orapki wallet create -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 -auto_login_local

  创建一个自签名证书并将其加载到

 

    $ orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 -dn "CN=`hostname`" -keysize 1024 -self_signed -validity 3650

  检查wallet的内容,需要注意的是自签名证书既是用户也是可信证书

    $ orapki wallet display -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123

  导出证书,以便稍后将其加载到客户的wallet中

    $ orapki wallet export -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 -dn "CN=`hostname`" -cert /tmp/`hostname`-certificate.crt

  检查证书是否已按预期导出

    $ cat /tmp/`hostname`-certificate.crt

客户端配置Wallet和生成证书

  创建一个新的自动登录wallet

    c:\>mkdir d:\app\oracle\wallet

    c:\>orapki wallet create -wallet "d:\app\oracle\wallet" -pwd WalletPasswd123 -auto_login_local

  创建一个自签名证书并将其加载到wallet中

    c:\>orapki wallet add -wallet "d:\app\oracle\wallet" -pwd WalletPasswd123 -dn "CN=%computername%" -keysize 1024 -self_signed -validity 3650

  检查wallet的内容,需要注意的是自签名证书既是用户也是可信证书

    c:\>orapki wallet display -wallet "d:\app\oracle\wallet" -pwd WalletPasswd123

  导出证书,以便稍后将其加载到服务器中

    c:\>orapki wallet export -wallet "d:\app\oracle\wallet" -pwd WalletPasswd123 -dn "CN=%computername%" -cert d:\%computername%-certificate.crt

  检查证书

    c:\>more d:\%computername%-certificate.crt

交换证书 

  连接的每一方都需要相互信任,所以必须从服务器上将证书作为可信证书加载到客户端wallet中,反之亦然。

  远程连接上服务,使用xftp将证书下载到客户端,同时也把客户端证书上传到服务器,再将服务器证书加载到客户端wallet中

    c:\>orapki wallet add -wallet "d:\app\oracle\wallet" -pwd WalletPasswd123 -trusted_cert -cert d:\oracle.lushenle.com-certificate.crt

  检查客户wallet的内容,注意服务器证书现在包含在可信证书列表中

    c:\>orapki wallet display -wallet "d:\app\oracle\wallet" -pwd WalletPasswd123

  将客户端证书加载到服务器钱包中

    $ orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 -trusted_cert -cert /tmp/ASUS-PC-certificate.crt

  检查服务器wallet的内容,注意客户证书现在包含在可信证书列表中

    $ orapki wallet display -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123

服务器网络配置

  在服务器上,将以下内容添加到“$ORACLE_HOME/network/admin/sqlnet.ora”文件中

复制代码
 1 WALLET_LOCATION =
 2    (SOURCE =
 3      (METHOD = FILE)
 4      (METHOD_DATA =
 5        (DIRECTORY = /u01/app/oracle/wallet)
 6      )
 7    )
 8 
 9 SQLNET.AUTHENTICATION_SERVICES = (TCPS,NTS,BEQ)
10 SSL_CLIENT_AUTHENTICATION = FALSE
11 SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA)
复制代码

  将监听配置为接受SSL/TLS加密连接。编辑“$ORACLE_HOME/network/admin/listener.ora”文件,添加wallet信息以及TCPS内容

复制代码
 1 SSL_CLIENT_AUTHENTICATION = FALSE
 2 
 3 WALLET_LOCATION =
 4     (SOURCE =
 5         (METHOD = FILE)
 6         (METHOD_DATA =
 7         (DIRECTORY = /u01/app/oracle/wallet)
 8         )
 9     )
10 
11 LISTENER =
12     (DESCRIPTION_LIST =
13         (DESCRIPTION =
14         (ADDRESS = (PROTOCOL = TCP)(HOST = oracle.lushenle.com)(PORT = 1521))
15         (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
16         (ADDRESS = (PROTOCOL = TCPS)(HOST = oracle.lushenle.com)(PORT = 2484))
17     )
18     )
19 
20 ADR_BASE_LISTENER = /u01/app/oracle        
复制代码

  

  重启监听 

    $ lsnrctl stop 
    $ lsnrctl start

    ```好像是 lsnrctl reload 也可以的,不用stop再start```

  至此,服务器端已经配置完成

客户端网络配置

  编辑“$ORACLE_HOME/network/admin/sqlnet.ora”文件,添加以内容

复制代码
 1 WALLET_LOCATION =
 2     (SOURCE =
 3     (METHOD = FILE)
 4         (METHOD_DATA =
 5         (DIRECTORY = d:\app\oracle\wallet)
 6      )
 7     )
 8 
 9 SQLNET.AUTHENTICATION_SERVICES = (TCPS,NTS)
10 SSL_CLIENT_AUTHENTICATION = FALSE
11 SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA)
复制代码

    ```确保客户端密码套件与服务器配置匹配```

  编辑“$ORACLE_HOME/network/admin/tnsnames.ora”文件,确保端口对应于在服务器上为SSL配置的端口,协议是TCPS

    

复制代码
 1 orcl=
 2     (DESCRIPTION=
 3         (ADDRESS=
 4             (PROTOCOL=TCPS)
 5                 (HOST=192.168.200.249)
 6                     (PORT=2484)
 7     )
 8     (CONNECT_DATA=
 9         (SERVER=dedicated)
10         (SID=orcl)
11      )
12     )                                            
复制代码

  至此,客户端配置完成,可以连接测试

测试连接

  c:\>sqlplus sys/manunkind@//192.168.200.249:2484/orcl

  仅仅连接上去,并不能说明数据就是加密传输的,还需要进一步的验证,最简单的方式的把两种连接方式下的数据传输抓包、分析。这样才能说明问题。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

配置安全套接层连接oracle

目录
1.        配置简介        1
2.        使用Wallet Manager创建Wallet和生成认证请求        2
2.1.        创建Wallet        2
2.2.        创建认证请求        2
2.3.        导出证书请求        3
2.4.        保存Wallet位置        3
2.5.        让Wallet自动登录        3
3.        使用openssl工具制作数字证书        4
3.1.        创建制作证书目录        4
3.2.        制作发行证书        4
3.3.        制作用户证书        4
4.        导入信认根证书和用户证书        5
4.1.        导入信认根证书        5
4.2.        导入用户证书        5
5.        配置使用SSL的TCP/IP连接服务端        5
5.1.        确认服务器已经生成Wallet        5
5.2.        指定监听服务Wallet存放位置        5
5.3.        创建监听使用ssl的TCP/IP协议        7
5.4.        配制数据库监听位置        8
6.        配置使用SSL的TCP/IP连接客户端        10
6.1.        确认客户端已经生成Wallet        10
6.2.        配置的Oracle网络服务名称        10
6.3.        客户端配置Wallet位置        12
7.        连接数据库        13
8.        疑难解答        13
9.        Wallet管理方案        16
10.        参考文献        17


1.        配置简介
这里采用安全套接层连接oracle指的是使用ssl的tcp/ip协议连接oracle数据库,由于ssl的tcps/ip协议是采用公钥和私钥进行数据加密,为了解决通信双方的可信问题,使用了数字证书,而orcle是采用“Wallet Manager”来管理证书和公钥和私钥。
配置ssl的tcp/ip协议连接oracle数据库,大体步骤分为以下6步:
        使用Wallet Manager创建Wallet和生成认证请求;
        使用openssl工具制作数字证书;
        导入信认根证书和用户证书;
        配置使用SSL的TCP/IP连接服务端;
        配置使用SSL的TCP/IP连接客户端;
        连接数据库。
注意!以下例子使用的数据库版本为ORACLE 10g 10.2.0.4,如果是其他版本,会有所差异。
2.        使用Wallet Manager创建Wallet和生成认证请求
Wallet Manager 有以下几点功能:
        产生公私密钥对,并生成证书请求;
        存储用户证书相匹配的私钥;
        配置可信任证书
详细配置步骤如下:
2.1.        创建Wallet
首先启动Wallet Manager工具:
•        (Windows) 选择 开始, 程序, Oracle-HOME_NAME, 集成管理工具, Wallet Manager
•        (UNIX) 在命令行, 输入 owm。
打开Wallet Manager工具后,选择Wallet,新建。在弹出对话框输入密码,此密码是oracle的Wallet密码,密必是字母和数字结合,而且大于8位字符,Wallet选择标准,点确定。
2.2.        创建认证请求
在上面操作点确定以后,提示“是否希望现在创建一个认证请求?”点是。
也可以在选择 操作,添加认证请求,在弹出输入信息,信息内容如下表格:
字段名称 
描述 

公用名称 
必填项。 输入的用户的名称或服务的身份。 输入用户的姓名。

组织单元 
可选项。 输入部门的名称。 例如:财务。 

组织 
可选项。输入组织的名称身。 例如:某公司 

地区/城市         可选项。 输入居住城市。 

省/市/自治区         可选项。 输入姓名的州或省的身份在其中居住。 
输入完整的国家的名字,因为有些证书当局不接受两个字母的缩写。 

国家 
必填项。 选择国家 ,以查看清单,国家缩写。 选择在哪个国家组织的所在地。中国为CN
密钥长度
必填项。 选择密钥长度,建议选择1024以上长度。

DN
可选项。 选择高级 ,以查看高级证书申请对话。 使用该字段编辑或自定义身份的辨别名称( DN ) 。 例如,您可以编辑充分国家名称和地点。 
以上表格必填项填好后,点确定生成认证表求。接下来的工作是导出证书请求了。
2.3.        导出证书请求
选择左边树的Wallet下的证书[请求],在选择操作,导出认证请求。输入要保存文件名[c:\ssl\ request.txt],点保证后导出。
        导出认证请求后,接下来就需要使用第3节使用openssl工具来制作数字证书了。
2.4.        保存Wallet位置
Wallet创建以后,需要保存Wallet信息,oracle建议保存系统默认位置。系统默认的Wallet文件存放如下Unix和Windows平台: 
•        (UNIX) etc/ORACLE/WALLETS/username
•        (Windows) %USERPROFILE%\ORACLE\WALLETS
选择Wallet,系统默认位置,或保存,输入保存路径,点确认。
注!
        如果Wallet不存放在默认位置,oracle一些程序无法使用。
2.5.        让Wallet自动登录
如果不选择Wallet自动登录,在连接数据库的时候会报ORA-28759: 无法打开文件。
选择Wallet,自动登录,把自动登录勾打上。
3.        使用openssl工具制作数字证书
OpenSSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的Eric Yang等发起编写的。OpenSSL的官方网站为http://www.openssl.org/,源代码可以从ftp://ftp.openssl.org/source/上下载,也可以从OpenSSL的镜像网站下载。
        注!在redhat linux下,默认安装有安装好的openssl,而http://www.openssl.org/都是原代码,而且需要懂的C语方的编译才能编译成功,此处从网上收集了for Windows openssl已经编译好的二进制代码。
  
我们这里使用openssl用来生成根证书和信任的用户证书。由于网上收集这两个包压开来需要经过配置,而我的机器又装有MKS Toolkit for Developers Web-extracting tool带有openssl,以下例子使用openssl是MKS Toolkit for Developers Web-extracting tool工具上带的,如果是使用redhat linux,也可以在redhat linux下制作。
3.1.        创建制作证书目录
mkdir c:\ssl
cd ssl
mkdir ca
3.2.        制作发行证书
由于证书需要一个发行机构,我们就用openssl制作一个发行证书。然后在把这个发行证书导入到可信任根证下面,这样这个发行的证书就全部生效了。首先来制作一个发行证书的请求。
openssl req -new -newkey rsa:1024 -nodes -out c:/ssl/ca/ca.csr –keyout c:/ssl/ca/ca.key
输入发行机构的信息后,根据生成的证书请生成证书。
openssl x509  -signkey c:/ssl/ca/ca.key -req -in c:/ssl/ca/ca.csr -out c:/ssl/ca/ca.crt -CAcreateserial -days 365

3.3.        制作用户证书
以上已经制作好发行的信任证书了,现在就根据上面发行的信任证书来制作用户证书。这里用户证书的请求就是第2节的导出证书请求的文件,此例中文件名为:c:\ssl\ request.txt,输入如下命令:
openssl x509 -req -in c:\ssl\request.txt -out user.crt -CA c:/ssl/ca/ca.crt -CAkey c:/ssl/ca/ca.key -CAcreateserial -days 365
以上命令生成用户证书名为user.crt,现在把c:/ssl/ca/ca.crt和user.crt文件都发给申请请求用户者。
4.        导入信认根证书和用户证书
通过第三节已经制作好用户证书了,但此用户证书制作机构不是“VeriSign Class 3 Public Primary CA”等在名顶顶的认证机构,我们首先需要把制作用户发行机构的证书导入到可信根证书,也就是第3节的c:/ssl/ca/ca.crt文件。
4.1.        导入信认根证书
打开oracle的Wallet Manager工具,选择操作,导入信任证书,选择包含证书的文件,点确定,选择c:\ssl\ca\ca.crt文件。在左边的树中出现导入信任证书。
4.2.        导入用户证书
在以上导入了信任证书后,就可以导入用户证书了。选择操作,导入用户证书,选择包含证书的文件,点确定,选择c:\ssl\user.crt文件。在左边的树中出现证书[就绪]。
至此,证书的制作和导入都已经完成。然后按快捷键Ctl+W来保存,同时检查Wallter菜单下自动登录旁边框打上小钩。接下来就配制服务端监听ssl的配置了。
5.        配置使用SSL的TCP/IP连接服务端
在配置服务器端的ssl的TCP/IP连接需要以下几步骤:
        确认服务器已经生成Wallter
        指定监听服务Wallter存放位置
        创建监听使用ssl的TCP/IP协议
配置好以后,需要重新启动监听服务,在命令行下输入
lsnrctl stop
lsnrctl start
5.1.        确认服务器已经生成Wallet
确认第2节中的Wallet是否创建,确认用户证书是否就绪,同时检查Wallet是否自动登录。
5.2.        指定监听服务Wallet存放位置
首先启动Net Manager工具:
•        (Windows) 选择 开始, 程序, Oracle-HOME_NAME, 配置和移植工具, Net Manager
•        (UNIX) 在命令行, 输入 netmgr
打开Net Manager工具后,选择右边Oracle Net配置,本地,概要文件,在右边最上面下拉框选择Oracle 高级安全性,单击SSL标签。
配置方法:选择文件系统。
Wallet目录:输入Wallet存放位置。
为以下目标配置SSL选择服务器。

输入以上信息后,点文件菜单下的保存网络配置。
在sqlnet.ora和listener.ora文件更新如下:
WALLET_LOCATION =
  (SOURCE =
    (METHOD = FILE)
    (METHOD_DATA =
      (DIRECTORY = d:\oracle\WALLETS)
    )
<span s

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics