Oracle Advanced Security的数据加密问题

时间:2010-09-03 12:10:56

标签: database oracle security ssl

我使用Oracle Advanced Security在数据传输过程中加密数据。我已成功配置ssl与以下参数,我已重新启动实例。我正在从下面给出的Java类中检索数据。但我可以在不解密的情况下读取数据,数据没有加密。

环境:

Oragle 11g数据库

SQLNET.AUTHENTICATION_SERVICES= (BEQ, TCPS, NTS)

SSL_VERSION = 0

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

SSL_CLIENT_AUTHENTICATION = FALSE

WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = C:\Users\kcr\Oracle\WALLETS)
)
)

SSL_CIPHER_SUITES= (SSL_RSA_EXPORT_WITH_RC4_40_MD5)

Java类:

try{
Properties properties = Utils.readProperties("weka/experiment/DatabaseUtils.props"); 
// Security.addProvider(new oracle.security.pki.OraclePKIProvider()); //Security syntax
String url = "jdbc:oracle:thin:@(DESCRIPTION =\n" + 
" (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))\n" + 
" (CONNECT_DATA =\n" + 
" (SERVER = DEDICATED)\n" + 
" (SERVICE_NAME = sal)\n" + 
" )\n" + 
" )";
java.util.Properties props = new java.util.Properties();

props.setProperty("user", "system");
props.setProperty("password", "weblogic");
// props.setProperty("javax.net.ssl.trustStore","C:\\Users\\kcr\\Oracle\\WALLETS\\ewallet.p12"); 
// props.setProperty("oracle.net.ssl_cipher_suites","SSL_RSA_EXPORT_WITH_RC4_40_MD5");
// props.setProperty("javax.net.ssl.trustStoreType","PKCS12");
//props.setProperty("javax.net.ssl.trustStorePassword","welcome2");

DriverManager.registerDriver(new OracleDriver());
Connection conn = DriverManager.getConnection(url, props);
/*8 OracleDataSource ods = new OracleDataSource();
ods.setUser("system");
ods.setPassword("weblogic");
ods.setURL(url);
Connection conn = ods.getConnection();*/

Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("select * from iris");
///////////////////////////
while(rset.next()) {
for (int i=1; i<=5; i++) {
System.out.print(rset.getString(i));
}
}

2 个答案:

答案 0 :(得分:0)

您可以在“SSL With Oracle JDBC Thin Driver”中找到文档。

特别是您应该使用PROTOCOL = TCPS而不是PROTOCOL = TCP。我还建议使用更强大的密码套件(并避免使用匿名密码套件,因为使用它们不会验证远程服务器的身份)。

答案 1 :(得分:0)

您是否期望SELECT语句返回加密数据,而System.out.print调用会导致加密输出进入屏幕?如果是这样,那就不是高级安全性的工作方式 - 高级安全性允许您通过线路加密数据,但数据在SQL Net堆栈中未加密。因此,您的SELECT语句将始终以未加密状态查看数据。您需要执行SQL Net跟踪或使用某种数据包嗅探器来查看通过线路传输的加密数据。