2009-08-13 27 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