【发布时间】:2011-09-05 19:06:51
【问题描述】:
如何知道与 SQL 服务器的 JDBC 连接是否安全(即使用 SSL)?
例如从 URL 中是否明显。是否所有 JDBC 驱动程序都支持与数据库服务器的 SSL 连接,还是 SSL 的使用仅取决于特定的数据库供应商?
【问题讨论】:
-
它是特定于数据库的,是的,所以你必须在你的问题中具体。
标签: java sql-server-2005 security encryption ssl
如何知道与 SQL 服务器的 JDBC 连接是否安全(即使用 SSL)?
例如从 URL 中是否明显。是否所有 JDBC 驱动程序都支持与数据库服务器的 SSL 连接,还是 SSL 的使用仅取决于特定的数据库供应商?
【问题讨论】:
标签: java sql-server-2005 security encryption ssl
尝试这些链接以获取信息:
MySQL : http://www.razorsql.com/articles/mysql_ssl_jdbc.html
甲骨文:http://www.dbforums.com/oracle/1620651-ssl-connection-jdbc-thin-driver.html
PostgreSQL : http://archives.postgresql.org/pgsql-jdbc/2003-08/msg00110.php
MS SQL 服务器:http://download.oracle.com/docs/cd/E12840_01/wls/docs103/jdbc_drivers/mssqlserver.html
【讨论】:
在我看来,确保客户端和服务器之间的 SSL 连接的一种快速、安全且供应商中立的方法是使用s-tunnel。
s-tunnel(有时也称为“stunnel”)为您提供了很大的灵活性,例如相互身份验证等,并且仍然允许安装在 DB Server 上的应用程序通过非 SSL 连接与其通信(例如 SQL Server允许以三种模式连接(SSL OFF、SSL Optional 或 SSL Only)。
使用 s-tunnel 您的连接将被路由如下:
jdbc -> local s-tunnel port -> server's s-tunnel port -> server's database port.
通过使用相关防火墙规则设置 stunnel,您可以确信与数据库的远程连接正在使用 SSL。
【讨论】:
是否所有的 jdbc 驱动程序都支持 ssl 连接到 db 服务器并且 ssl 的使用仅取决于特定的 db 供应商?
JDBC 规范不强制要求支持 SSL/TLS。所以你不能指望每个驱动程序都有它。
可以从 JDBC URL 推断出数据库服务器上的 SSL 配置,但这不必是确定性的。在 Oracle 的情况下,如果您注意到 URL 包含一个连接字符串,该字符串指示正在使用的协议是 TCPS 而不是 TCP,这表明使用了 SSL/TLS。如果您这样做是为了验证安全配置,我会称您为草率。
单独验证客户端配置以确定数据库服务器是否接受通过 SSL 的连接是不明智的,尤其是在不允许非 SSL 连接的情况下。验证 SSL/TLS 配置的机制因数据库而异,但在每种情况下都会有适当的安全指南来配置数据库。
但是,如果您想进行快速测试以验证连接是否通过 SSL/TLS,那么您只需要知道 SSL/TLS 安全连接是通过握手启动的。如果您没有看到任何内容,则说明您的驱动程序未使用 SSL/TLS。您需要为此嗅探网络流量(确保您有权这样做)。当然,如果连接池正在使用中,则建立案例需要更长的时间,因为池中的物理连接可能会一次又一次地重用(没有建立新的连接)。同样,您可能也会发现 nmap 很有用,但我从未将它用于此目的。
【讨论】:
STARTTLS )。在这种情况下,连接本身不会以握手开始,因此您必须先查看更多流量才能看到它。这并不总是显而易见的。