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

Java 我与数据库的JDBC连接是否使用SSL?,java,sql-server-2005,security,encryption,ssl,Java,Sql Server 2005,Security,Encryption,Ssl,如何知道与SQL server的JDBC连接是否安全(即使用SSL) 例如,从URL看,这是显而易见的。是否所有JDBC驱动程序都支持到数据库服务器的SSL连接,还是SSL的使用仅取决于特定的数据库供应商?请尝试以下链接以获取信息: MySQL: 甲骨文: PostgreSQL: MS SQL Server: 在我看来,确保客户机和服务器之间的SSL连接的一种快速、安全且与供应商无关的方法是使用 s-tunnel(有时也称为“stunnel”)为您提供了很多灵活性,例如相互身份验证等,并且仍然允

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


例如,从URL看,这是显而易见的。是否所有JDBC驱动程序都支持到数据库服务器的SSL连接,还是SSL的使用仅取决于特定的数据库供应商?

请尝试以下链接以获取信息:

  • MySQL:

  • 甲骨文:

  • PostgreSQL:

  • MS SQL Server:


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

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

    使用s-tunnel,您的连接将按如下方式路由:

    jdbc -> local s-tunnel port -> server's s-tunnel port -> server's database port.
    
    通过使用相关的防火墙规则设置stunnel,您可以确信到数据库的远程连接正在使用SSL

    是否所有jdbc驱动程序都支持到db服务器的ssl连接,并且ssl的使用仅取决于特定的db供应商

    JDBC规范中没有强制要求支持SSL/TLS,因此您不能期望每个驱动程序都支持SSL/TLS

    数据库服务器上的SSL配置可以从JDBC URL推断出来,但这不一定是确定的。对于Oracle,如果您注意到URL包含一个连接字符串,该字符串指示正在使用的协议是TCPS而不是TCP,它指向SSL/TLS的使用。如果您这样做是为了验证安全配置我会说你邋遢

    单独验证客户端配置以确定数据库服务器是否接受SSL连接是不明智的,尤其是在不允许使用非SSL连接的情况下。验证SSL/TLS配置的机制因数据库而异,但每个数据库中都有相应的安全指南来配置数据库案例


    但是,如果您想进行快速测试以验证连接是否通过SSl/TLS,那么您需要知道的是SSl/TLS安全连接是通过握手启动的。如果您没有看到任何SSl/TLS安全连接,则说明您的驱动程序没有使用SSl/TLS。您需要为此嗅探网络流量(确保您有权这样做)。当然,如果正在使用连接池,则需要更长的时间来确定案例,因为池中的物理连接可能会被反复使用(而不会设置新连接)。同样,您可能也会发现nmap很有用,但我从未将其用于此目的。

    它是特定于数据库的,是的,因此您的问题必须具体。在不添加任何上下文的情况下发布到其他网站的链接对任何人有何帮助?我发布这些链接是为了帮助他。如果该主题需要一些讨论,请参阅[因为他没有指定他的DB类型]我想发布相关链接,而不是写一个冗长的答案。好吧,这不是怎么回事。如果你必须链接到其他网站,那么你可以这样做,但你不能含糊其辞。这些网站都不会具体解决这个问题,尽管它们确实包含一些一般信息。好吧,我心里的印象是因此,你可以用任何方式帮助别人,而不必真正越界[读作冒犯]。我不知道,如果您不知道答案,则不允许您发布到相关网站的链接。感谢您的知识传授。从现在起,如果我看到任何人发布没有上下文的链接,我将跟随您。您会发现这很有用。当您说相互验证时,这意味着sql server和应用程序都有证书?正确。这是我成功连接到SQL Server的唯一方法,主机确保它与受信任的客户端通信,客户端确保它确实与正确的服务器通信,尽管s-tunnel不会强制您拥有两个证书。另外,我使用的是SQL Server 2005,不想影响我的服务器端应用程序。@Vinet:你说的让我很困惑。如果我希望看到SSL握手(以验证安全性),我想这意味着,至少服务器有一个证书,客户端应用程序也认为该证书是可信的。要想被认为是可信的,应用程序必须配置为信任它(我猜是的)。因此,如果我与SQL server有连接,但我没有这样做(证书)配置,难道我不能推断连接不是通过SSL的吗?@user384706,您是指特定的MSSQL服务器?还是指一般的任何RDBMS?如果您使用JDBC并且必须配置信任,则通常会涉及JSSE配置。简言之,您将不得不担心配置您的信任库。如果根目录t证书已受信任,在客户端上,除了配置连接池和可能添加驱动程序所需的库之外,几乎没有什么可做的。如果您使用的是应用程序服务器,管理员可能已经为您完成了这项工作。续。例如,请参阅有关如何为精简Oracle驱动程序启用SSL的文章。您可以“我会注意到WLS的配置几乎微不足道。@Vinet:是的,我的兴趣主要是MS-SQLserver@Vineet,据我所知,一些JDBC连接,包括带有TCP的Oracle,在一些纯文本JDBC交换发生后升级到TLS(类似于SMTP中的
    STARTTLS
    ).在这种情况下,连接本身不会以握手开始,因此您必须先查看更多流量,然后才能看到它。这并不总是显而易见的。