加密的jdbc连接到大型机上的db2

时间:2017-07-10 10:23:10

标签: java encryption jdbc db2 mainframe

我通过JDBC连接到在大型机上运行的DB2服务器。 我要求建立加密连接!我需要通过网络实现加密连接或数据加密。 你能帮我解决一下我的成就吗?

我已经与在linux上运行的Oracle服务器建立了加密连接,如链接here

所示

4 个答案:

答案 0 :(得分:2)

在db2 jdbc驱动程序中使用securityMechanism 13(ENCRYPTED_USER_PASSWORD_AND_DATA_SECURITY)。例如。使用DB2SimpleDataSource:

import com.ibm.db2.jcc.DB2SimpleDataSource;
...

DB2SimpleDataSource ds = new DB2SimpleDataSource(); 
ds.setDriverType(4);      
ds.setDatabaseName("<db name>");
ds.setServerName("<server name>");  
ds.setPortNumber(<port>); 
ds.setUser("<user>");      
ds.setPassword("<password>");

// Set security mechanism to User ID and encrypted password
ds.setSecurityMechanism(DB2BaseDataSource.ENCRYPTED_USER_PASSWORD_AND_DATA_SECURITY);
ds.setEncryptionAlgorithm(2);       // Request AES encryption

为此,您需要使用JCE的无限制策略文件修补JVM。

答案 1 :(得分:0)

除了Ebbe的回答,您还可以使用SSL / TLS进行jdbc连接 - 尽管这需要在服务器端进行一些工作。特别是你的系统 - 人们必须为你的大型机的TCP堆栈设置AT-TLS,如果它还没有为某些应用程序实现,这是一项工作。然后,您必须为DB2的jdbc-port定义策略以使用SSL / TLS。

最后在客户端,您只需在jdbc-connection上设置一个属性即可启用TLS:

java.util.Properties props = new java.util.Properties();
props.put( "user", user );
props.put( "password", pass );
props.put( "sslConnection", "true" );
java.sql.Connection con = java.sql.DriverManager.getConnection(url, props);

详细说明可在this redpaper

中找到

答案 2 :(得分:0)

除了已发布的答案之外,还有一个我很少看到的非常简单的解决方案 - 将您的连接从IPv4切换到IPv6。在其他许多属性中,IPv6在任何会话中都包含内置加密,因此只需将您的网络地址从IPv4地址更改为IPv6地址即可。为此,需要在大型机上进行一些网络和系统配置,但一旦设置,您可以保证所有JDBC网络连接都是默认加密的。

答案 3 :(得分:-2)

步骤1:通过JDBC建立与DB2的非加密连接。让它工作并彻底测试。

步骤2:获取加密的简单数据传输到大型机工作,即使它只是传递像“Hello World!”这样的短信。让它工作并彻底测试。

步骤3:合并两者以实现完全连接:

JDBC -> Encryption -> Transfer -> Decryption -> DB2

分阶段执行此操作可帮助您隔离任何问题。在步骤2中,您将需要避免使用系统默认值进行加密或解密,明确指定双方的所有内容。如果事情不完全匹配,逐字节,那么加密设计失败。还要注意字符编码和字节顺序等挑剔的东西。例如,您的大型机是使用EBCDIC,ASCII / ANSI还是Unicode? PC世界中的常见假设并不总是延续到大型机。