我已经使用Cassandra 3.3成功设置了节点到节点和客户端到节点的加密,包括cqlsh配置。我的问题是如何实际运作。
在这两种情况下,我都需要为每个参与者(节点和客户端)提供密钥证书。这用于加密或身份验证吗?我强烈期望它仅用于身份验证,然后生成用于加密的对称密钥。这是正确的吗?在客户端到节点加密中,我注意到节点和客户端都需要密钥证书,因此我假设交换机不仅经过服务器身份验证,而且还经过客户端身份验证。这是对的吗?
注意:在上面我使用“身份验证”来表示演员可以相互信任,而不是他们知道彼此身份的细节。这与Cassandra对用户进行身份验证的方式完全不同。
我问的是这些问题,因为我正在考虑在所有节点上使用唯一的自签名证书进行节点到节点加密,以及另一个用于客户端到节点加密的独特自签名证书。如果我的理解是正确的,这不会影响加密。这是对的吗?
答案 0 :(得分:2)
只有节点到节点的通信才能创建证书。每个SSL服务器都需要拥有自己的私钥,以确保所有通信只能由服务器读取。与密钥一起创建的公共证书将用于验证服务器。这对于Cassandra节点来说非常重要,可以避免中间人攻击,并通过检查证书是否可以通过本地节点的信任库进行身份验证来实现。
对于客户端到节点的通信,身份验证是可选的,如果您不启用require_client_auth
,则根本不需要创建任何证书。在这种情况下,SSL密钥将透明地创建,就像您从浏览器连接到受SSL保护的网站一样。是否应启用客户端身份验证的问题取决于您是否要在Cassandra中使用用户登录或计划使用匿名登录。如果您使用用户名和密码使用内部Cassandra身份验证过程,那么启用SSL身份验证几乎没有用处。
我问的是这些问题,因为我正在考虑在所有节点上使用唯一的自签名证书进行节点到节点加密,以及另一个用于客户端到节点加密的独特自签名证书。
如果您愿意为每个节点创建一个独特的自签名证书并将其添加到每个节点的信任库,那就去吧。它可能是处理此问题的最简单和最安全的方法,但对于大型集群来说非常不方便。另一种选择是通过公共CA为所有节点建立信任。这将避免必须将所有自签名证书导入每个信任库。使用CA可以更轻松地向群集添加节点,但还需要建立一种使用CA安全地签署新证书的方法。