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

时间:2015-05-26 14:05:09

标签: cassandra datastax opscenter

我正在尝试在cassandra上设置节点和客户端加密。我设置 小ca,生成证书,分发和配置 要使用它们的节点。

节点加密工作直接进行,cqlsh添加" - ssl"。

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

  1. 我为/etc/opscenter/cassandra_ca.pem添加了ca文件路径, 问。即使我没有设置,我也无法保存群集,直到我添加密钥库 客户验证的标记 - 我也找不到任何文件 密钥库就在这里。由于OpsCenter是python,这些显然不是 来自cassandra的jks钥匙店。
  2. 我猜它就是这样,各个节点呈现出来 证书到opscenter,它会对ca-store进行验证。

    1. 尝试连接在opscenterd.log中出现错误:
    2. 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
              ].            ].
      

      关于此的任何提示?

      提前致谢, 扬

1 个答案:

答案 0 :(得分:0)

Opscenter需要设置一些使用客户端到节点加密的东西

  1. Opscenter守护程序需要证书才能访问群集(就像任何其他客户端一样)。这应该通过DSE端记录的相同过程生成。如果这是Cassandra用于加密的话,则需要JKS密钥。
  2. Opscenterd证书需要在cassandra.yaml中指定的信任库中注册。
  3. 代理需要知道Cassandra配置为接受的密钥库的路径。最简单的方法是将它们指向cassandra.yaml中指定的密钥库。
  4. 将集群添加到opscenter时,它将询问证书的位置(对于opscenterd)和密钥库的位置(对于每个cassandra节点)。