2016-05-12 13 views
3

私は、cqlsh設定を含め、Cassandra 3.3でノード間およびクライアント/ノード間の暗号化を正常にセットアップしました。私の質問は、それがすべて実際にどのように機能するかについてです。Cassandraノード間およびクライアント/ノード間の暗号化は実際にどのように機能しますか?

どちらの場合でも、私は各アクタ(ノードとクライアント)の鍵証明書を提供する必要があります。これは暗号化または認証に使用されますか?私はそれが認証だけに使用されることを強く期待しています。そして、暗号化のために対称鍵が生成されます。これは正しいですか?クライアントからノードへの暗号化では、ノードとクライアントの両方に鍵証明書が必要であることに気付くので、交換はサーバ認証だけでなくクライアント認証でもあると仮定します。これは正しいです?

注:上記の私は、アクターがお互いの身元の詳細を知っているのではなく、お互いを信頼できることを意味するために「認証」を使用します。これは、Cassandraがユーザーを認証する方法とはまったく別物です。

ノード間暗号化のためにすべてのノードで固有の自己署名証明書を使用することと、クライアント/ノード間の暗号化に別の固有の自己署名証明書を使用することを考えているため、私の理解が正しいなら、これは暗号化を妥協することはないでしょう。これは正しいですか?

答えて

2

証明書の作成は、ノード間通信にのみ必須です。すべての通信がサーバーによってのみ読み取られることを保証するために、各SSLサーバーには独自の秘密キーが必要です。キーとともに作成された公開証明書は、サーバーの認証に使用されます。これは、Cassandraノードがman-in-the-middle攻撃を避けるために重要であり、ローカルノードのトラストストアを通じて証明書を認証できるかどうかをチェックすることによって実装されます。

クライアントとノードの通信については、認証はオプションであり、require_client_authを有効にしない場合は、証明書をまったく作成する必要はありません。この場合、ブラウザからSSLで保護されたWebサイトに接続するのと同じように、SSLキーは透過的に作成されます。クライアントの認証を有効にするかどうかは、Cassandraでユーザーログインを使用するのか、匿名のログインを使用するのかによって異なります。ユーザ名とパスワードを使用して内部のCassandra認証プロセスを使用している場合は、SSL認証も有効にすることはほとんどありません。

私は、ノード間の暗号化のためにすべてのノードで一意の自己署名証明書を使用することを考えているので、これらの質問をしています。

各ノードごとに固有の自己署名証明書を作成し、それを各ノードのトラストストアに追加してください。これはおそらく最も簡単で安全な方法ですが、大規模なクラスタでは非常に不便です。別のオプションは、すべてのノードに対して共通のCAを通じて信頼を確立することです。これにより、すべての自己署名証明書を各トラストストアにインポートする必要がなくなります。 CAを使用すると、ノードをクラスタに簡単に追加できますが、CAを使用して安全に新しい証明書に署名する方法を確立する必要もあります。

+0

お返事ありがとうございます!私がしようとしているのは、すべてのノードが共有する一意のキーストア/トラストストアを使用することです。ノードごと、クラスタごとにキーストア/トラストストアではありません。私はそれを試して、それは動作します。私もCAの方法を試してみましたが、それもうまくいったけど、もっと面倒で、私は利益を見ることができません。 – marcv81

+0

共有キーストア/トラストストアを使用することもできます。厳密に言えば、単一のノードが侵害された場合、攻撃者は他のすべてのノード間のすべての通信を解読することができるため、安全性は低くなります。しかし、それがどれくらいあなたに影響を与えるかを決めることは、もちろんあなた次第です。 –

+0

これを指摘してくれてありがとう。ノードが侵害されると、すべてのデータにアクセスできますが、他のノードを聴くと、データを見るだけでは利用できない情報(タイミングなど)が明らかになる可能性があります。私はそれが多くの人に違いをもたらすとは思わないし、確かに私の場合はそうではありません。 – marcv81

関連する問題