如何知道与SQL服务器的JDBC连接是否安全(即使用SSL)?
例如从URL中可以看出这一点。是否所有JDBC驱动程序都支持与数据库服务器的SSL连接,或者SSL的使用是否仅取决于特定的数据库供应商?
答案 0 :(得分:21)
所有jdbc驱动程序是否都支持与db服务器的ssl连接,而ssl的使用仅取决于特定的数据库供应商?
JDBC规范中没有强制要求支持SSL / TLS。所以你不能指望每个车手。
可以从JDBC URL推断数据库服务器上的SSL配置,但这不一定是确定性的。对于Oracle,如果您注意到URL包含一个连接字符串,该字符串指示正在使用的协议是TCPS而不是TCP,这表示使用SSL / TLS。如果您这样做是为了验证安全配置,我会称之为草率。
单独验证客户端配置以确定数据库服务器是否接受通过SSL的连接是不明智的,尤其是在不允许非SSL连接的情况下。验证SSL / TLS配置的机制因数据库而异,但在每种情况下都会有适当的安全指南来配置数据库。
但是,如果要进行快速测试,要验证连接是否通过SSl / TLS,那么您需要知道的是SSL / TLS安全连接是通过握手启动的。如果您没有看到任何内容,那么您的驱动程序未使用SSL / TLS。您需要为此嗅探网络流量(确保您有权这样做)。当然,如果正在使用连接池,则建立案例需要更长的时间,因为池中的物理连接可能会一次又一次地重复使用(无需设置新连接)。同样,你也可能会发现nmap很有用,但我从来没有将它用于此目的。
答案 1 :(得分:6)
请尝试使用以下链接获取信息:
答案 2 :(得分:4)
在我看来,确保客户端和服务器之间的SSL连接的快速,安全且供应商中立的方式是使用s-tunnel。
s-tunnel(有时也称为“stunnel”)为您提供了很多灵活性,例如相互身份验证等,并且仍允许安装在数据库服务器上的应用程序通过非SSL连接与其进行通信(例如SQL Server)允许三种模式的连接(SSL OFF,SSL可选或仅SSL)。
使用s-tunnel,您的连接将被路由如下:
jdbc -> local s-tunnel port -> server's s-tunnel port -> server's database port.
通过使用相关防火墙规则设置stunnel,您可以确信与DB的远程连接正在使用SSL。