Datastax Opscenter 5.1.1 не может подключиться к кластеру после шифрования клиент-узел

Я пытаюсь настроить междоузлийное и клиентское шифрование на Кассандре. Я установил небольшой центр сертификации, сгенерировал сертификаты, распространил их и настроил узлы для их использования.

Внутреннее шифрование работало прямо, cqlsh после того, как я добавил "--ssl".

Но я не могу настроить OpsCenter (работает 5.1.1). Два вопроса:

  1. Я добавил путь к файлу ca, для меня /etc/opscenter/cassandra_ca.pem, как и просил. Я не могу сохранить кластер, пока не добавлю хранилище ключей, даже если я не установил метку для проверки клиента - также я не могу найти документацию, какое хранилище ключей подразумевается здесь. Поскольку OpsCenter - это python, это, очевидно, не хранилища ключей JKS от Cassandra.

Я предполагаю, что это подразумевается таким образом, что отдельные узлы представляют свой сертификат в 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
        ].            ].

Есть намеки на это?

Заранее спасибо, Ян

1 ответ

Решение

Opscenter нужно несколько вещей настроить работу с шифрованием клиент-узел

  1. Демон Opscenter нуждается в сертификате для доступа к кластеру (как и любой другой клиент). Это должно быть произведено тем же процессом, который задокументирован на стороне DSE. Ключи JKS требуются, если это то, что Cassandra использует для шифрования.
  2. Сертификат Opscenterd должен быть зарегистрирован в доверенном хранилище, указанном в cassandra.yaml.
  3. Агенты должны знать путь к хранилищу ключей, который Cassandra настроен для принятия. Самый простой способ - указать им хранилище ключей, указанное в cassandra.yaml.

При добавлении кластера в opscenter, он запросит местоположение сертификата (для opscenterd) и местоположение хранилища ключей (для каждого узла cassandra).

Другие вопросы по тегам