共计 3211 个字符,预计需要花费 9 分钟才能阅读完成。
测试环境:
Oracle 11.2.0.4 Winodows 单机
应用场景:
对 Oracle 服务器和客户端之间的网络传输数据进行加密和完整性校验。
默认是使用明文方式传输数据,举例可以通过 wireshark、sniffer 等网络抓包工具抓取到传输的具体信息。
对于敏感信息是很不安全的。
举例:
对于汉字可以通过很多在线转换工具将 HEX 编码转换成可读汉字。
对于了解业务的人来说,这些信息是很有价值的。
客户端存在两种模式:
1、通过 oracle 客户端软件连接数据库
2、通过 jdbc 驱动连接 oracle 数据库
通过 oracle 客户端的情况:
启用传输加密和校验的主要方法是通过服务器端和客户端的 sqlnet.ora 文件实现。
配置方法:
理论上需要在数据库 server 端和 oracle 客户端都修改 sqlnet.ora 文件,但因为 client 端默认传输加密级别是 ACCEPTED,默认一致性校验级别是 ACCEPTED,所以只需要在服务器端设置如下参数就可以打开传输加密和一致性校验功能,而不需要再对 client 端的 sqlnet.ora 进行设置(知识拓展部分介绍)。
在 oracle 服务器端编辑 sqlnet.ora 文件,添加参数:
SQLNET.ENCRYPTION_SERVER = REQUIRED —- 加密级别
SQLNET.ENCRYPTION_TYPES_SERVER = RC4_256 —- 加密算法
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED — 一致性能校验
设置参数后对新建立的 session 起作用。
加密后抓取的包不再是明文的:
对于 jdbc 连接的情况:
需要写代码,不是很懂,不做验证,大体格式如下:
For example:
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Properties props = new Properties();
props.put("oracle.net.encryption_client", "accepted");
props.put("oracle.net.encryption_types_client", "RC4_128");
props.put("oracle.net.crypto_checksum_client", "REQUIRED"); // 此行根据官方文档写,未作验证
props.put("oracle.net.crypto_checksum_types_client","MD5"); // 此行根据官方文档格式写,未作验证
props.put("user", "XXX"); props.put("password", "YYY"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@myhost:1521:mySID", props);
知识拓展:
server 端和 client 端的加密级别参数 SQLNET.ENCRYPTION_SERVER|CLIENT
级别分
- REQUESTED
- REQUIRED
- ACCEPTED
- REJECTED
server 和 client 要配合使用才能确保进行传输加密,简单概括如下表格:
Table 4-2 Encryption and Data Integrity Negotiations
Client Setting | Server Setting | Encryption and Data Negotiation |
---|---|---|
REJECTED |
REJECTED |
OFF |
ACCEPTED |
REJECTED |
OFF |
REQUESTED |
REJECTED |
OFF |
REQUIRED |
REJECTED |
Connection fails |
REJECTED |
ACCEPTED |
OFF |
ACCEPTED |
ACCEPTED |
OFFFoot 1 |
REQUESTED |
ACCEPTED |
ON |
REQUIRED |
ACCEPTED |
ON |
REJECTED |
REQUESTED |
OFF |
ACCEPTED |
REQUESTED |
ON |
REQUESTED |
REQUESTED |
ON |
REQUIRED |
REQUESTED |
ON |
REJECTED |
REQUIRED |
Connection fails |
ACCEPTED |
REQUIRED |
ON |
REQUESTED |
REQUIRED |
ON |
REQUIRED |
REQUIRED |
ON |
一致性校验也分四中级别:
SQLNET.CRYPTO_CHECKSUM_SERVER|CLIENT
- REQUESTED
- REQUIRED
- ACCEPTED
- REJECTED
同样需要配合使用。
参数解释:
SQLNET.CRYPTO_CHECKSUM_CLIENT。默认设置为 ACCEPTED。
参数
ACCEPTED – 客户端不请求使用校验和,但是如果服务器请求校验和,则请求。兼容的服务器参数为 REJECTED,REQUESTED 和 REQUIRED。
REJECTED – 客户端不支持使用校验和。兼容的服务器参数为 REJECTED,ACCEPTED 和 REQUESTED。
REQUESTED – 客户端喜欢使用校验和,但是如果服务器拒绝它们的使用,则不强制该问题。兼容的服务器参数是 ACCEPTED,REQUESTED 和 REQUIRED。
REQUIRED – 客户端要求使用校验和,否则不连接。兼容的服务器参数是 ACCEPTED,REQUESTED 和 REQUIRED。
SQLNET.CRYPTO_CHECKSUM_SERVER。默认设置为 ACCEPTED。
参数
ACCEPTED – 服务器不请求使用校验和,但如果客户端请求它们,请继续。兼容的服务器参数有:REJECTED,REQUESTED 和 REQUIRED。
REJECTED – 服务器根本不支持使用校验和。兼容的客户端参数为 REJECTED,ACCEPTED 和 REQUESTED。
REQUESTED – 服务器更喜欢使用校验和,但是如果客户端拒绝它们的使用,则不强制该问题。兼容的客户端参数是 ACCEPTED,REQUESTED 和 REQUIRED。
REQUIRED – 服务器要求使用校验和,否则不连接。兼容的客户端参数是 ACCEPTED,REQUESTED 和 REQUIRED。
对性能的影响:
既然要 加密和解密就势必会占用一定的性能资源,但影响不大,下图是一个测试结果,摘自 http://www.orafaq.com/wiki/Network_Encryption
Algorithm | None | MD5 | SHA-1 | |||
---|---|---|---|---|---|---|
Time | %None | Time | %None | Time | %None | |
None | 79.6 s | 80.5 s | 101% | 82.4 s | 104% | |
DES | 104.7 s | 132% | 107.1 s | 135% | 108.2 s | 136% |
3DES168 | 151.8 s | 191% | 153.9 s | 193% | 155.6 s | 196% |
AES128 | 88.8 s | 112% | 90.5 s | 114% | 92.1 s | 116% |
AES256 | 91.8 s | 115% | 93.5 s | 117% | 94.2 s | 118% |
RC4_128 | 81.6 s | 103% | 82.5 s | 104% | 85.0 s | 107% |
RC4_256 | 81.7 s | 103% | 82.8 s | 104% | 85.0 s | 107% |
参考文档:
http://docs.oracle.com/cd/B19306_01/network.102/b14268/asoconfg.htm#BBJBIECD
http://docs.oracle.com/cd/B19306_01/network.102/b14268/asojbdc.htm#i1006209
更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-11/137682.htm