Encryption JDBC客户端加密类型设置

Encryption JDBC客户端加密类型设置,encryption,jdbc,oracle11g,c3p0,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="driverCl

我试图强制我的客户端应用程序使用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>

如果有任何帮助,我将不胜感激,因为此时我正被轴缠绕着。

我将对此进行一次尝试,因为我最近几天也在阅读有关此主题的文章。看来我们需要对服务器和/或客户端上的SQLNET.ora文件进行更改以使其正常工作

有关如何使用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
引用链接:

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

如果您通读上述页面并参考A.2.1.5 SQLNET.ENCRYPTION\u TYPES\u SERVER Parameter节下的表表A-6 SQLNET.ENCRYPTION\u TYPES\u SERVER Parameter Attributes,我们发现服务器要匹配的第一个加密算法是RC4_256,在您的情况下,它可能与安装的加密算法的客户端匹配,这就是连接可能成功的原因。但是,当您指定其他算法(如AES 256)时,客户端和服务器可能无法协商此算法,从而导致连接失败

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


希望这能让您朝着解决方案迈出一步

事实证明,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.username}
${jdbc.password}
必修的
(AES256)
必修的
(SHA1)
在我们的例子中,它不起作用,因为类路径中有两个不同版本的jdbc驱动程序,而较旧的驱动程序首先被加载


在删除旧的jdbc jar后,它按照配置的指示切换到AES256。

服务器上的SQLNET.ora已经被修改,并且工作正常。当我使用Toad或PLSql Dev连接到数据库时,它将使用AES256正确连接。我要求服务器管理员在服务器上禁用RC4_256,当他这样做时,我们根本无法连接。
<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>