Tomcat webcontainer - 如何访问ssl加密的oracle数据库

时间:2013-08-02 16:13:58

标签: java tomcat ssl encryption oracle11g

我们将Oracle 11g(v11.2.0)数据库配置为使用SSL加密(Oracle Advanced Security)。 我们按照SSL中Oracle JDBC Thin Driver的说明执行了此操作。只有加密,没有身份验证,这是白皮书中的“案例1”。

接下来,我们开发了一个小型测试客户端来检查我们是否可以访问现在加密的数据库。 这是一些代码:

String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=our_host)"
      + "(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=our_service_name)))";

System.out.println("set properties");
Properties props = new Properties();
props.setProperty("user", "system");
props.setProperty("password", "our_password");
props.setProperty("oracle.net.ssl_cipher_suites",
                    "(SSL_DH_anon_WITH_3DES_EDE_CBC_SHA, "
                        + "SSL_DH_anon_WITH_RC4_128_MD5,"
                        + "SSL_DH_anon_WITH_DES_CBC_SHA)");

System.out.println("get connection");
Connection con = DriverManager.getConnection(url, props);
System.out.println("got a connection");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select sysdate from dual");
while (rs.next()) {
  System.out.println("result = "+rs.getString(1));
}
rs.close();
stmt.close();
con.close();

这很好用,并吐出正确的值。但唉只是一个测试客户。现在我们必须配置我们的Tomcat(v7.0.21)webcontainer,以便我们的web应用程序可以访问现在加密的数据库。 在加密之前,我们在dataSource中使用了{tomcat.home}/conf/context.xml,如下所示:

<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>

<Resource name="our_name" auth="Container"
          driverClassName="oracle.jdbc.driver.OracleDriver" factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
          type="javax.sql.DataSource" logAbandoned="true" maxActive="30"
          maxIdle="5" maxWait="1000" removeAbandoned="true"
          removeAbandonedTimeout="60" url="jdbc:oracle:thin:@our_host:1521:our_sid"
          username="admin_user" password="admin_user" validationQuery="select sysdate from dual"
          testOnReturn="true" />
<!-- more Resources ... -->
</Context>

我在互联网上的一些帖子中找到了几个设置(<Connector>,例如在server.xml - 见下文 - ,更改了jdbc瘦驱动程序URL等),但我没有做任何事情。 。我不知道如何继续甚至如何调试这个。

我取消注释并测试(失败){tomcat.home}/conf/server.xml中的连接器:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="200" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS"
           ciphers="SSL_DH_anon_WITH_DES_CBC_SHA, SSL_DH_anon_WITH_RC4_128_MD5, SSL_DH_anon_WITH_3DES_EDE_CBC_SHA" />

我们希望像以前一样通过.xml文件执行此操作,因此我们无需向客户发送新版本。

如果您需要更多信息,如果您告诉我如何以及在何处找到它,我很乐意为您提供一切。

感谢您的时间,

问候

1 个答案:

答案 0 :(得分:3)

好吧,我想通了......

  • server.xml中的更改是不必要的(考虑到这是有道理的 我们只加密了我们的数据库 - 而不是客户端&lt; - &gt; web服务器)。
  • 将资源中的网址更改为tnsnames样式格式
  • 在资源

    中添加了connectionProperties属性

    URL =&#34; JDBC:预言:瘦:@(DESCRIPTION =(ADDRESS =(PROTOCOL =技术合作计划)(HOST = our_host)(PORT = 2484))(CONNECT_DATA =(SERVICE_NAME = our_service_name)))&# 34; ConnectionProperties中=&#34; oracle.net.ssl_cipher_suites = SSL_DH_anon_WITH_3DES_EDE_CBC_SHA,SSL_DH_anon_WITH_RC4_128_MD5,SSL_DH_anon_WITH_DES_CBC_SHA&#34;