【问题标题】:How does Cassandra node-to-node and client-to-node encryption actually work?Cassandra 节点到节点和客户端到节点的加密实际上是如何工作的?
【发布时间】:2016-09-07 16:04:07
【问题描述】:

我已经使用 Cassandra 3.3 成功设置了节点到节点和客户端到节点的加密,包括 cqlsh 配置。我的问题是关于这一切实际上是如何运作的。

在这两种情况下,我都需要为每个参与者(节点和客户端)提供一个密钥证书。这是用于加密还是身份验证?我强烈希望它仅用于身份验证,然后生成对称密钥进行加密。这是正确的吗?在客户端到节点的加密中,我注意到节点和客户端都需要密钥证书,因此我假设交换不仅经过服务器身份验证,而且还经过客户端身份验证。这是正确的吗?

注意:在上面我使用“认证”是指演员可以相互信任,而不是他们知道彼此身份的详细信息。这与 Cassandra 验证用户的方式完全不同。

我问这些问题是因为我正在考虑在所有节点上使用唯一的自签名证书进行节点到节点的加密,并使用另一个唯一的自签名证书进行客户端到节点的加密。如果我的理解是正确的,这不会影响加密。是这样吗?

【问题讨论】:

    标签: ssl encryption cassandra


    【解决方案1】:

    创建证书仅对节点到节点通信是强制性的。每个 SSL 服务器都需要拥有自己的私钥,以确保所有通信都只能由服务器读取。与密钥一起创建的公共证书将用于对服务器进行身份验证。这对于 Cassandra 节点避免中间人攻击很重要,并且通过检查证书是否可以通过本地节点的信任库进行身份验证来实现。

    对于客户端到节点的通信,身份验证是可选的,如果不启用require_client_auth,则根本不需要创建任何证书。在这种情况下,SSL 密钥将被透明地创建,就像您从浏览器连接到受 SSL 保护的网站一样。是否应该启用客户端身份验证的问题取决于您是要在 Cassandra 中使用用户登录还是计划使用匿名登录。如果您使用用户名和密码使用内部 Cassandra 身份验证过程,那么启用 SSL 身份验证几乎没有用处。

    我问这些问题是因为我正在考虑在所有节点上使用唯一的自签名证书进行节点到节点的加密,并使用另一个唯一的自签名证书进行客户端到节点的加密。

    如果您愿意为每个节点创建一个唯一的自签名证书并将其添加到每个节点的信任库中,那就去做吧。这可能是处理这个问题的最简单和最安全的方法,但对于大型集群来说会非常不方便。另一种选择是通过公共 CA 为所有节点建立信任。这将避免必须将所有自签名证书导入每个信任库。使用 CA 可以更轻松地将节点添加到集群中,但也需要建立一种使用 CA 安全地签署新证书的方法。

    【讨论】:

    • 非常感谢您的回复!我打算做的是使用所有节点共享的唯一密钥库/信任库。不是每个节点的密钥库/信任库,而是每个集群。我已经尝试过了,它有效。我也尝试了 CA 的方式,它也有效,但它更麻烦,我看不到好处。
    • 您也可以使用共享的密钥库/信任库。严格来说,它的安全性较低,因为如果单个节点被入侵,攻击者也可以解密所有其他节点之间的所有通信。但是,这对您有多大影响,当然由您自己决定。
    • 感谢您指出这一点。一旦一个节点受到威胁,所有数据都可以访问,但确实,监听其他节点可能会揭示仅查看数据无法获得的信息(关于时间等)。我不认为这对许多人有影响,在我的情况下当然没有。
    • 也感谢您指出我可以为客户端到节点禁用 require_client_auth。这对于节点到节点来说不是一个明智的选择,所以我也盲目地放弃了它用于客户端到节点。我现在的一切都以我喜欢和理解的方式运作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 2018-04-27
    • 2019-03-13
    • 1970-01-01
    • 2014-02-24
    • 2013-05-21
    • 2020-09-08
    相关资源
    最近更新 更多