web-dev-qa-db-ja.com

データベースへのJDBC接続はSSLを使用しますか?

SQLサーバーへのJDBC接続が安全である(つまりSSLを使用している)かどうかをどのようにして知ることができますか?

たとえばURLから明らかです。すべてのJDBCドライバーはデータベースサーバーへのSSL接続をサポートしていますか、またはSSLの使用は特定のデータベースベンダーに依存するだけですか?

33
Cratylus

すべてのjdbcドライバーはdbサーバーへのssl接続をサポートしており、sslの使用は特定のdbベンダーのみに依存していますか?

JDBC仕様では、SSL/TLSのサポートは必須ではありません。したがって、すべてのドライバーでそれを期待することはできません。

データベースサーバー上のSSL構成はJDBC URLから推測できますが、これは確定的である必要はありません。 Oracleの場合、使用しているプロトコルがSSLではなくTCPSであり、SSL/TLSの使用を指していることを示す接続文字列がURLに含まれていることに気付いた場合。セキュリティ設定を検証するためにこれを行っている場合、私はあなたをずさんだと言います。

特に非SSL接続が許可されていない場合、データベースサーバーがSSL経由の接続を受け入れるかどうかを判断するために、クライアント構成のみを検証することは賢明ではありません。 SSL/TLS構成を検証するメカニズムはデータベースごとに異なりますが、それぞれの場合にデータベースを構成するための適切なセキュリティガイドがあります。

ただし、接続がSSl/TLSを介しているかどうかを確認するために簡単なテストを行う場合は、SSL/TLSで保護された接続がハンドシェイクで開始されることだけを知っておく必要があります。何も表示されない場合、ドライバーはSSL/TLSを使用していません。このためにネットワークトラフィックをスニッフィングする必要があります(そうする許可を持っていることを確認してください)。もちろん、接続プールが使用中の場合は、プール内の物理接続が何度も再利用される可能性があるため(新しい接続を設定することなく)、ケースの確立に時間がかかります。同様に、nmapが有用であることに気付くかもしれませんが、私はこの目的のためにそれを使用したことはありません。

21
Vineet Reynolds
6
Swaranga Sarma

私の意見では、クライアントとサーバー間のSSL接続を確保するための、高速で安全かつベンダーに依存しない方法は、 s-tunnel を使用することです。

s-tunnel( "stunnel"とも呼ばれます)は相互認証などの柔軟性を提供しますが、DBサーバーにインストールされたアプリケーションは非SSL接続を介して通信できます(たとえば、SQL Serverは3つのモード(SSL OFF、SSLオプション、またはSSLのみ)。

S-tunnelを使用すると、接続は次のようにルーティングされます。

jdbc -> local s-tunnel port -> server's s-tunnel port -> server's database port.

関連するファイアウォールルールでstunnelを設定することにより、DBへのリモート接続がSSLを使用していることを確信できます。

4
ifx