我正在尝试使用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
任何帮助都会受到赞赏,因为此时我已经缠绕在轴上。
答案 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。