【问题标题】:Wanted: Instructions for adding client-node encryption enabled Cassandra cluster to DataStax OpsCenter 5.1.0需要:将启用客户端节点加密的 Cassandra 集群添加到 DataStax OpsCenter 5.1.0 的说明
【发布时间】:2023-03-29 19:31:01
【问题描述】:

我有一个启用了客户端节点加密的 Cassandra 集群。我正在尝试将此集群添加到 OpsCenter 5.1.0 的实例,但它无法连接到集群。日志文件似乎抱怨无法验证 SSL 证书:

` 信息:在 0x7f2ce05c8638> 启动工厂 opscenterd.ThriftService.NoReconnectCassandraClientFactory 实例> 2015-06-10 15:09:46+0000 [] 警告:无法验证 ssl 证书。 2015-06-10 15:09:46+0000 [] 未处理的错误 回溯(最近一次通话最后): 文件“/opt/opscenter-5.1.0/lib/py-debian/2.7/amd64/twisted/python/log.py”,第 84 行,在 callWithLogger 返回 callWithContext({"system": lp}, func, *args, **kw) 文件“/opt/opscenter-5.1.0/lib/py-debian/2.7/amd64/twisted/python/log.py”,第 69 行,在 callWithContext return context.call({ILogContext: newCtx}, func, *args, **kw) 文件“/opt/opscenter-5.1.0/lib/py-debian/2.7/amd64/twisted/python/context.py”,第 59 行,在 callWithContext return self.currentContext().callWithContext(ctx, func, *args, **kw) 文件“/opt/opscenter-5.1.0/lib/py-debian/2.7/amd64/twisted/python/context.py”,第 37 行,在 callWithContext 返回函数(*args,**kw) --- 此处捕获异常 --- _doReadOrWrite 中的文件“/opt/opscenter-5.1.0/lib/py-debian/2.7/amd64/twisted/internet/epollreactor.py”,第 217 行 为什么 = selectable.doRead() 文件“/opt/opscenter-5.1.0/lib/py-debian/2.7/amd64/twisted/internet/tcp.py”,第 137 行,在 doRead 返回 Connection.doRead(self) 文件“/opt/opscenter-5.1.0/lib/py-debian/2.7/amd64/twisted/internet/tcp.py”,第 452 行,在 doRead 数据 = self.socket.recv(self.bufferSize) ssl_simple_verifyCB 中的文件“build/lib/python2.7/site-packages/opscenterd/SslUtils.py”,第 12 行 opscenterd.Utils.SSLVerifyException: SSL certificate invalid

我的问题是:向 opscenter 添加客户端节点加密集群的分步说明是什么? 究竟需要哪些 .pem 和 .keystore 文件,我该如何获取它们?

关于该主题的 DataStax 文档不够详细,因此没有真正的帮助。我认为那里的某些人一定已经成功地进行了设置,我相信许多人会喜欢详细的解释/说明。

【问题讨论】:

    标签: ssl encryption cassandra datastax opscenter


    【解决方案1】:

    这里需要注意的一点是,虽然文档确实提到了为每个节点生成一个密钥,但实际上这并不是非常可扩展的。在大多数系统中,通常使用所需的密钥和证书创建一个密钥库,然后根据需要在集群中的所有节点和客户端应用程序中使用它。您从此密钥库中导出证书并将其用于 OpsCenter。 OpsCenter 是(就 SSL 而言)与任何其他客户端一样的 SSL 客户端。

    因此,您必须从 java 密钥库中导出密钥,将其转换为 .pem 格式并将其用于 opscenterd 进程。这些代理是基于 java 的,因此它们可以使用 java 密钥库。 DS 文档在那里,但它有点分散,所以它是一个寻找正确位置的问题:-)

    我将在此处使用 OpsCenter 最新文档作为参考。我假设您只在 OpsCenter 和 Cassandra 以及 OpsCenter 代理和 Cassandra 之间使用 SSL

    准备服务器证书:

    https://docs.datastax.com/en/cassandra/2.1/cassandra/security/secureSSLCertificates_t.html

    将客户端配置为节点 SSL:

    https://docs.datastax.com/en/cassandra/2.1/cassandra/security/secureSSLClientToNode_t.html

    将 cqlsh 与 SSL 一起使用(可选):

    https://docs.datastax.com/en/cassandra/2.1/cassandra/security/secureCqlshSSL_t.html

    要将密钥转换为 pem 格式,请参见此处的第 7 步:

    https://docs.datastax.com/en/latest-opsc/opsc/online_help/opscAddingCluster_t.html

    示例

    请注意,所有这些示例都假定为单向 SSL。您在名为 /etc/dse/keystore 的文件中生成了一个密钥,并在名为 /etc/dse/truststore 的文件中生成了证书

    说实话,在 OpsCenter UI 中直接添加启用 SSL 的集群时,我从来没有这么幸运过。我一直发现手动创建 cluster.conf 文件和代理 address.yaml 文件更快更容易。

    请注意,信任库、key.pem 等 SSL 文件需要位于所有需要它们的本地机器上。

    示例代理 /var/lib/datastax-agent/conf/address.yaml 文件(注意 use_ssl 用于 opscenter 代理 SSL,我们在这里没有使用)

    stomp_interface: 192.168.56.29
    use_ssl: 0
    # ssl_keystore settings if using ssl
    ssl_keystore: /etc/dse/truststore
    ssl_keystore_password: datastax
    

    示例 opscenter /etc/opscenter/clusters/<cluster_name>.conf 文件

    [jmx]
    username = 
    password = 
    port = 7199
    
    [kerberos_client_principals]
    
    [kerberos]
    
    [agents]
    ssl_keystore = /etc/dse/truststore
    ssl_keystore_password = datastax
    
    [kerberos_hostnames]
    
    [kerberos_services]
    
    [cassandra]
    ssl_ca_certs = /etc/dse/key.pem
    ssl_validate = False
    seed_hosts = 192.168.56.22
    

    其他提示等

    如果我在 DSE / Cassandra 中对 SSL 连接进行故障排除,我总能找到。我将首先剥离所有 SSL 并让集群正常工作,然后我将逐步配置 SSL,例如打开节点到节点 SSL,然后是客户端到节点,然后是 OpsCenter 等等。调试所有 SSL 错误不是为了装腔作势!

    链接

    您可能会觉得有用的其他文档链接:

    https://docs.datastax.com/en/opscenter/5.2/opsc/configure/opscConnectionConfig_r.html

    https://docs.datastax.com/en/opscenter/5.2/opsc/configure/agentAddressConfiguration.html

    【讨论】:

    • 对于 .conf 中设置的 ssl_ca_certs 配置。该 key.pem 是从该种子节点的 .cer 生成的吗?我不确定使用什么 .cer 或密钥库来生成它。
    • opscenter 服务器是否应该生成自己的密钥库和 .cer 以添加到信任库?如果是这样,那么我假设我会使用从这个 .cer 转换的 .pem 作为我的 ssl_ca_certs
    • 回答以上两个问题。 key.pem 文件是从 DSE 节点上的密钥库中导出的 .cer 文件生成的。只要您为两者使用相同的证书,它是否是种子节点都没有关系。通常,您将在整个集群中拥有 same 密钥库。该文档推断您为每个节点生成不同的密钥,但这在实践中不可扩展。希望这有助于回答您的问题。
    • 我目前正在关注该文档,因此我在每个节点上生成一个密钥库文件,然后为每个密钥库创建一个 .cer,将其复制到所有节点。从那里,我创建了信任库文件。在这种情况下,是否仍然可以只选择一个节点 .cer 来构建一个 .pem 并在 opscenter 中使用它。或者您会建议对所有节点只使用一个密钥库,并使用 .cer 和 .pem
    • 您可能会在那里遇到问题,因为 OpsCenter 需要与所有节点通信,您必须将每个 cer 文件导入每个节点信任库,我不认为你可以有一个由多个证书组成的 pem 文件。最好在整个集群中使用一个密钥库/信任库
    猜你喜欢
    • 2015-08-08
    • 2015-01-18
    • 2020-08-19
    • 2016-12-26
    • 1970-01-01
    • 2013-02-17
    • 2014-11-15
    • 2018-03-01
    • 2020-09-13
    相关资源
    最近更新 更多