使用orapki生成证书,配置Oracle数据使用SSL和TLS进行数据库连接的TCP/IP配置==TCPS

摘要:
这使您能够使用脚本自动化这些任务。

内容参考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:apporaclewallet

    c:>orapki wallet create -wallet "d:apporaclewallet" -pwd WalletPasswd123 -auto_login_local

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

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

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

    c:>orapki wallet display -wallet "d:apporaclewallet" -pwd WalletPasswd123

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

    c:>orapki wallet export -wallet "d:apporaclewallet" -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:apporaclewallet" -pwd WalletPasswd123 -trusted_cert -cert d:oracle.lushenle.com-certificate.crt

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

    c:>orapki wallet display -wallet "d:apporaclewallet" -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:apporaclewallet)
 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

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

 

 

  

免责声明:文章转载自《使用orapki生成证书,配置Oracle数据使用SSL和TLS进行数据库连接的TCP/IP配置==TCPS》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇编写简单的用户登录界面使用 getUserMedia API获取麦克风和相机等流媒体下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

区分NoSQL数据库

NoSQL数据库都有哪些?在本文中,我们将介绍不同的NoSQL数据库的种类,并比较不同NoSQL数据库之间的异同。在文末,我们也将也将分享一些有用的资源,帮助初学者快速开始使用NoSQL。 NoSQL数据库之间的异同 市场上有多种不同的NoSQL数据库,他们之间有一些关键的区别。 数据模型 我们可以根据NoSQL数据库所支持的不同数据模型对其进行分类。有...

《图解Spark:核心技术与案例实战》介绍及书附资源

本书中所使用到的测试数据、代码、安装包及本书附录放在百度盘提供下载 ,链接: https://pan.baidu.com/s/1LP6PKGzIWQzF8e-dTklxkg 提取码: it28   为什么要写这本书 在过去的十几年里,由于计算机普遍应用和互联网的普及数据呈现了爆发式增长,在这个背景下Doug Cutting受到谷歌两篇论文(GFS和MapR...

kafka 常见面试题

1.Kafka中的ISR(InSyncRepli)、OSR(OutSyncRepli)、AR(AllRepli)代表什么?ISR : 速率和leader相差低于10秒的follower的集合OSR : 速率和leader相差大于10秒的followerAR : 所有分区的follower 2.Kafka中的HW、LEO等分别代表什么?HW : 又名高水位,...

【Linux】ODBC安装

ODBC介绍   ODBC是Open Database Connect 即开发数据库互连的简称,它是一个用于访问数据库的统一界面标准。ODBC引入一个公共接口以解决不同数据库潜在的不一致性,从而很好的保证了基于数据库系统的应用程序的相对独立性。   很多程序员都已经体会到了在Windows平台下通过ODBC进行数据库编程开发的益处,其实在Linux/Uni...

sql 临时表的使用详解

Sqlserver数据库中的临时表详解  临时表在Sqlserver数据库中,是非常重要的,下面就详细介绍SQL数据库中临时表的特点及其使用,仅供参考。   临时表与永久表相似,但临时表存储在tempdb中,当不再使用时会自动删除。临时表有两种类型:本地和全局。它们在名称、可见性以及可用性上有区别。 对于临时表有如下几个特点: 本地临时表就是用户在创建...

jquery之json数据操作

今天在开发一个 异步更新 select下拉列表时,遇到了一些问题,现记录下,以备以后遇到时可以查阅。 首先是:出现 非法标签错误,其原因是,在 eval json数据的时候,左右没有加括号,正确的格式应该是:eval(“(“+jsondata+”)”); 其次是在访问json数据时,采用jsondata.length想来遍历数据,但是每次都是显示undef...