1

我们将 Oracle 11g (v11.2.0) 数据库配置为使用 SSL 加密(Oracle 高级安全性)。我们按照 SSL with 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 文件来完成它,因此我们不需要向我们的客户发布新版本。

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

感谢您的时间,

问候

勒内

4

1 回答 1

3

嗯,我想通了...

  • server.xml 中的更改是不必要的(考虑到我们只加密了我们的数据库 - 而不是客户端 <-> 网络服务器,这是有道理的)。
  • 将 Resource 中的 url 更改为 tnsnames 样式的格式
  • 在 Resource 中添加了 connectionProperties 属性

    url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=our_host)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=our_service_name)))" connectionProperties="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"

于 2013-08-05T08:50:54.777 回答