有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我通过JDBC连接到大型机上运行的DB2服务器。 我需要建立一个加密连接!我需要通过网络实现加密连接或数据加密。 你能帮我怎样才能达到同样的效果吗

我已经与运行在linux上的Oracle server建立了加密连接,如链接here所示


共 (4) 个答案

  1. # 1 楼答案

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

    第2步:将加密的简单数据传输到大型机,即使只是传递“Hello World!”让它工作并彻底测试它

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

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

    分阶段进行有助于隔离任何问题。在第2步中,您需要避免使用系统默认值进行加密或解密,明确指定两侧的所有内容。如果事情不完全匹配,一个字节接一个字节,那么加密就注定要失败。此外,还要注意一些吹毛求疵的事情,如字符编码和字节顺序。例如,您的大型机是否使用EBCDIC、ASCII/ANSI或Unicode?PC世界中的常见假设并不总是适用于大型机

  2. # 2 楼答案

    除了Ebbe的答案之外,您还可以将SSL/TLS用于jdbc连接——尽管这需要在服务器端做一些工作。特别是在您的系统中,人们必须为大型机的TCP堆栈设置AT-TLS,如果尚未为某些应用程序实现,这将是一项艰巨的工作。然后,您必须为DB2的jdbc端口定义一个使用SSL/TLS的策略

    最后,在客户端,您只需在jdbc连接上设置一个属性即可启用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

  3. # 3 楼答案

    在DB2JDBC驱动程序中使用securityMechanism 13(加密的用户密码和数据安全)。例如,使用db2simpledasource:

    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

  4. # 4 楼答案

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