2009-08-13 116 views
9

我有一个现有的Java Web应用程序使用Hibernate的持久性。我被告知必须与加密的数据库进行交谈 - 所以我的第一个想法是将其设置为通过SSL进行通信 - 并逐步了解如何设置Oracle以侦听基于SSL的JDBC -如何配置Hibernate使用SSL与数据库服务器交谈?

http://www.oracle.com/technology/tech/java/sqlj_jdbc/pdf/wp-oracle-jdbc_thin_ssl_2007.pdf

并写了一个快速测试类,以验证它是安装和工作(通过标准的JDBC连接)。这给我留下了配置Hibernate的问题 - 不幸的是我没有看到hibernate如何支持它?

+0

这种联系已经死了,我相信这是更新的版本:http://www.oracle.com/technetwork/topics/wp-oracle-jdbc-thin- SSL-130128.pdf – Jordan 2015-11-10 22:39:20

回答

5

Hibernate使用标准的JDBC数据源,因此不需要Hibernate特定的配置。

下面是一个简单的例子使用Spring Hibernate的配置时,应该工作:

<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource"> 
    <property name="URL"><value><!-- JDBC URL that specifies SSL connection --></value></property> 
    <!-- other relevant properties, like user and password --> 
    <property name="connectionProperties> 
     <value> 
      oracle.net.ssl_cipher_suites: (ssl_rsa_export_with_rc4_40_md5, ssl_rsa_export_with_des40_cbc_sha) 
      oracle.net.ssl_client_authentication: false 
      oracle.net.ssl_version: 3.0 
      oracle.net.encryption_client: REJECTED 
      oracle.net.crypto_checksum_client: REJECTED 
     </value> 
    </property> 
</bean> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <!-- classes etc --> 
</bean> 
+0

但是我必须设置在驾驶员的一些属性 - 使用JDBC我只是这样做: 道具 .setProperty( “oracle.net.ssl_cipher_suites”, “(SSL_RSA_EXPORT_WITH_RC4_40_MD5,ssl_rsa_export_with_des40_cbc_sha)”); prop.setProperty(“oracle.net.ssl_client_authentication”,“false”); prop.setProperty(“oracle.net.ssl_version”,“3.0”); 012.prop.setProperty(“oracle.net.encryption_client”,“REJECTED”); prop.setProperty(“oracle.net.crypto_checksum_client”,“REJECTED”); prop.setProperty(“oracle.net.crypto_checksum_client”,“REJECTED”); 但是,我怎么能通过休眠获得与驱动程序相关的thos属性? – 2009-08-13 17:54:21

+0

这取决于你如何配置Hibernate。我将添加一个您可以在Spring中使用的示例。 – andri 2009-08-13 18:11:01

+0

如果您不使用Spring,请参阅Hibernate文档的表3.4: http://docs.jboss.org/hibernate/stable/core/reference/en/html/session-configuration.html#configuration-optional - 虽然我没有测试过,看起来只要添加hibernate.connection。*属性就可以将JDBC属性传递给Hibernate。 – andri 2009-08-13 18:20:45

1

应该由驱动程序处理,但你可能需要做一些配置。 Oracle Docs

4

试试这个:

<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.url">jdbc:mysql://blablaba:8443/dbname?useSSL=true</property> 
    <property name="hibernate.connection.verifyServerCertificate">false</property> 
    <property name="hibernate.connection.requireSSL">true</property> 
    <property name="hibernate.connection.autoReconnect">true</property> 
    <property name="hibernate.connection.username">bablablab</property> 
    <property name="hibernate.connection.password">clclclclc</property> 

相关链接

http://www.razorsql.com/articles/mysql_ssl_jdbc.html

http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-using-ssl.html

http://www.javabeat.net/qna/164-hibernate-jdbc-and-connection-properties/

2

请休眠CONFI添加以下属性guration文件来启用SSL:

<property name="hibernate.connection.verifyServerCertificate">false</property> <property name="hibernate.connection.useSSL">true</property>

+1

这个答案还有什么新东西,其他答案还没有说过? – pucky124 2017-09-19 21:46:24

+0

其他人用于回答: '<属性名=“hibernate.connection.requireSSL”>真' 但对于我来说,它并没有奏效。我必须使用以下来获得它的工作: ' true' – 2017-09-19 21:47:01