我与数据库的JDBC连接是否使用SSL?

Cra*_*lus 36 java security encryption ssl sql-server-2005

如何知道与SQL服务器的JDBC连接是否安全(即使用SSL)?

例如,从URL中可以看出这一点.是否所有JDBC驱动程序都支持与数据库服务器的SSL连接,或者SSL的使用是否仅取决于特定的数据库供应商?

Vin*_*lds 22

是否所有jdbc驱动程序都支持与db服务器的ssl连接,而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很有用,但我从未将它用于此目的.


小智 5

在我看来,确保客户端和服务器之间的 SSL 连接的一种快速、安全且与供应商无关的方法是使用s-tunnel

s-tunnel(有时也称为“stunnel”)为您提供了很大的灵活性,例如相互身份验证等,并且仍然允许安装在 DB Server 上的应用程序通过非 SSL 连接(例如 SQL Server 允许连接三种模式(SSL 关闭、SSL 可选或仅 SSL)。

使用 s-tunnel 您的连接将被路由如下:

jdbc -> local s-tunnel port -> server's s-tunnel port -> server's database port.
Run Code Online (Sandbox Code Playgroud)

通过使用相关防火墙规则设置 stunnel,您可以确信到数据库的远程连接正在使用 SSL。