JDBC客户端加密类型设置

时间:2013-09-10 17:52:05

标签: encryption jdbc oracle11g c3p0

我正在尝试使用AES256而不是RC4_256强制我的客户端应用程序连接到加密的Oracle 11g服务器。我们已收到通知,“即将”禁用RC4_256加密类型。

我们使用最新的11g驱动程序和c3p0作为我们的连接池。下面是bean配置。

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="oracle.jdbc.OracleDriver"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <!-- other pool properties -->
    <property name="properties">
        <props>
            <prop key="user">${jdbc.username}</prop>
            <prop key="password">${jdbc.password}</prop>

                            <!-- this is one set of many I've tried -->
            <prop key="oracle.net.encryption_client">REQUIRED</prop>
            <prop key="oracle.net.encryption_types_client">( AES256 )</prop>
        </props>
    </property>
</bean>

我使用oracle.net.encryption_types_client和oracle.net.encryption_client,CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_LEVEL,CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_TYPES尝试了许多排列。我已将它们命名为Oracle文档中的Java属性等等。

除了RC4_256之外,我无法使用任何东西进行连接。

我在数据库服务器上使用以下查询来查看客户端的连接方式。 v $ session_connect_info表中的Network_Service_Banner显示了它的连接方式。这是我正在收到的当前消息

  

Oracle Advanced Security:RC4_256加密服务适配器   Solaris:版本11.2.0.3.0 - 产品

select s.username,s.machine,s.program,S.LOGON_TIME,s1.* 
from v$session s, v$session_connect_info s1 
where s.sid = s1.sid and s.username in ('MYAPP') and s.machine = 'MY-PC'
order by S.LOGON_TIME DESC, s.sid

任何帮助都会受到赞赏,因为此时我已经缠绕在轴上。

2 个答案:

答案 0 :(得分:0)

我会对此有所了解,因为我最近几天也在阅读这个主题。看来我们需要对服务器和/或客户端上的SQLNET.ora文件进行更改才能使其正常工作。

请参阅this链接,其中说明了如何使用AES连接数据库。具体来说,请看示例9-3设置数据加密和完整性参数。在此示例上方是需要在 sqlnet.ora 文件中进行的设置,以启用AES加密。这些在链接

中引用
SQLNET.ENCRYPTION_SERVER = ACCEPTED 
SQLNET.CRYPTO_CHECKSUM_SERVER = ACCEPTED 
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER= (MD5, SHA1) 
SQLNET.ENCRYPTION_TYPES_SERVER= (AES256, AES192, AES128)
SQLNET.CRYPTO_SEED = 2z0hslkdharUJCFtkwbjOLbgwsj7vkqt3bGoUylihnvkhgkdsbdskkKGhdk

引自this链接:

  

对于数据加密和完整性算法,服务器选择   在其sqlnet.ora文件中列出的第一个与a匹配的算法   客户端sqlnet.ora文件或客户端中列出的算法   如果客户端在其sqlnet.ora中没有列出任何算法,则安装列表   文件。如果服务器sqlnet.ora文件中没有条目,则   服务器按顺序搜索其已安装的列表以匹配项目   客户端 - 在客户端sqlnet.ora文件中或在客户端中   安装清单。如果不能匹配并且连接的一侧   需要算法类型(数据加密或完整性),   连接失败。否则,连接成功   算法类型无效。

如果您仔细阅读上述页面并参阅 A.2.1.5 SQLNET.ENCRYPTION_TYPES_SERVER参数下的表表A-6 SQLNET.ENCRYPTION_TYPES_SERVER参数属性 ,我们看到服务器要匹配的第一个加密算法是 RC4_256 ,在您的情况下可能与已安装的加密算法的客户端匹配,这就是连接可能成功的原因。但是,当您指定其他算法(如AES 256)时,客户端和服务器可能无法协商此算法,从而导致连接失败。

上面列出的页面详细说明了启用数据完整性和加密的必要设置。

希望这能为您提供解决方案的一步

答案 1 :(得分:0)

事实证明,c3p0配置确实是前沿的。

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="oracle.jdbc.OracleDriver"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <!-- other pool properties -->
    <property name="properties">
        <props>
            <prop key="user">${jdbc.username}</prop>
            <prop key="password">${jdbc.password}</prop>
            <prop key="oracle.net.encryption_client">REQUIRED</prop>
            <prop key="oracle.net.encryption_types_client">(AES256)</prop>
            <prop key="oracle.net.crypto_checksum_client">REQUIRED</prop>
            <prop key="oracle.net.crypto_checksum_types_client">(SHA1)</prop>
        </props>
    </property>
</bean>

它在我们的情况下不起作用,因为我们在类路径中有两个不同版本的jdbc驱动程序,而旧版本的驱动程序首先被加载。

删除旧的jdbc jar后,按照配置决定切换到AES256。

相关问题