標籤:class 2.4 介紹 解密 edr tle 伺服器 抓取 jdb
轉自 http://blog.itpub.net/24052272/viewspace-2129175/
測試環境:
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
http://www.orafaq.com/wiki/Network_Encryption
http://www.toadworld.com/platforms/oracle/w/wiki/1719.sqlnet-ora-parameters
Oracle網路傳輸的加密和完整性驗證