Datastax Opscenter 5.1.1 无法在客户端到节点加密后连接到集群

Datastax Opscenter 5.1.1 cant connect to cluster after client-to-node encryption

我正在尝试在 cassandra 上设置节点间和客户端加密。我设置 建立一个小型 CA,生成证书,分发它们并进行配置 使用它们的节点。

节点间加密在我添加“--ssl”后直接工作,cqlsh。

但我无法设置 OpsCenter (运行 5.1.1)。两个问题:

  1. 我添加了 ca 文件路径,对我来说 /etc/opscenter/cassandra_ca.pem,如 问。在添加密钥库之前我无法保存集群,即使我没有设置 客户验证的标记 - 我也找不到任何文档 keystore 是指这里。由于 OpsCenter 是 python,所以这些显然不是 来自 cassandra 的 jks 密钥库。

我猜是这样的意思,各个节点都存在 opscenter 的证书,它将根据 ca-store 验证它。

  1. 尝试连接时出现错误 opscenterd.log:
2015-05-26 10:20:49+0000 []  INFO: Using SSL when checking thrift connection: /etc/cassandra/cassandra_ca.crt, client_pem=None, client_key=None, validate=True
2015-05-26 10:20:49+0000 []  INFO: Starting factory <opscenterd.ThriftService.NoReconnectCassandraClientFactory instance at 0x7fa4868c03b0>
2015-05-26 10:20:49+0000 [] Unhandled Error
        Traceback (most recent call last):
          File "/usr/share/opscenter/lib/py-debian/2.7/amd64/twisted/python/log.py", line 84, in callWithLogger
            return callWithContext({"system": lp}, func, *args, **kw)
          File "/usr/share/opscenter/lib/py-debian/2.7/amd64/twisted/python/log.py", line 69, in callWithContext
            return context.call({ILogContext: newCtx}, func, *args, **kw)
          File "/usr/share/opscenter/lib/py-debian/2.7/amd64/twisted/python/context.py", line 59, in callWithContext
            return self.currentContext().callWithContext(ctx, func, *args, **kw)
          File "/usr/share/opscenter/lib/py-debian/2.7/amd64/twisted/python/context.py", line 37, in callWithContext
            return func(*args,**kw)
        --- <exception caught here> ---
          File "/usr/share/opscenter/lib/py-debian/2.7/amd64/twisted/internet/epollreactor.py", line 220, in _doReadOrWrite
            why = selectable.doWrite()
          File "/usr/share/opscenter/lib/py-debian/2.7/amd64/twisted/internet/tcp.py", line 664, in doConnect
            self._connectDone()
          File "/usr/share/opscenter/lib/py-debian/2.7/amd64/twisted/internet/ssl.py", line 160, in _connectDone
            self.startTLS(self.ctxFactory)
          File "/usr/share/opscenter/lib/py-debian/2.7/amd64/twisted/internet/tcp.py", line 561, in startTLS
            if Connection.startTLS(self, ctx, client):
          File "/usr/share/opscenter/lib/py-debian/2.7/amd64/twisted/internet/tcp.py", line 402, in startTLS
            self.socket = SSL.Connection(ctx.getContext(), self.socket)
          File "/usr/lib/python2.7/dist-packages/opscenterd/SslUtils.py", line 54, in getContext

          File "/usr/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 303, in load_verify_locations
            raise TypeError("cafile must be None or a byte string")
        exceptions.TypeError: cafile must be None or a byte string

2015-05-26 10:20:49+0000 []  INFO: <twisted.internet.ssl.Connector instance at 0x7fa4868c05f0> will retry in 2 seconds
2015-05-26 10:20:49+0000 []  INFO: Unhandled error in Deferred:
2015-05-26 10:20:49+0000 [] Unhandled Error
        Traceback (most recent call last):
        Failure: twisted.internet.error.ConnectError: An error occurred while connecting: [Failure instance: Traceback (failure with no frames): <type 'exceptions.TypeError'>: cafile must be None or a byte string
        ].            ].

有什么提示吗?

提前致谢, 一月

Opscenter 需要一些设置才能使用客户端到节点加密

  1. Opscenter 守护程序需要证书才能访问群集(就像任何其他客户端一样)。这应该由与 DSE 端记录的相同过程产生。如果 Cassandra 使用 JKS 密钥进行加密,则需要 JKS 密钥。
  2. Opscenterd 证书需要在 cassandra.yaml 中指定的信任库中注册。
  3. 代理需要知道 Cassandra 配置为接受的密钥库的路径。最简单的方法是将它们指向 cassandra.yaml.
  4. 中指定的密钥库

将集群添加到 opscenter 时,它会询问证书的位置(对于 opscenterd)和密钥库的位置(对于每个 cassandra 节点)。