Datastax Opscenter 5.1.1 не может подключиться к кластеру после шифрования клиент-узел
Я пытаюсь настроить междоузлийное и клиентское шифрование на Кассандре. Я установил небольшой центр сертификации, сгенерировал сертификаты, распространил их и настроил узлы для их использования.
Внутреннее шифрование работало прямо, cqlsh после того, как я добавил "--ssl".
Но я не могу настроить OpsCenter (работает 5.1.1). Два вопроса:
- Я добавил путь к файлу ca, для меня /etc/opscenter/cassandra_ca.pem, как и просил. Я не могу сохранить кластер, пока не добавлю хранилище ключей, даже если я не установил метку для проверки клиента - также я не могу найти документацию, какое хранилище ключей подразумевается здесь. Поскольку OpsCenter - это python, это, очевидно, не хранилища ключей JKS от Cassandra.
Я предполагаю, что это подразумевается таким образом, что отдельные узлы представляют свой сертификат в opscenter, который будет проверять его по отношению к ca-store.
- Попытка подключения дает мне ошибку в 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 нужно несколько вещей настроить работу с шифрованием клиент-узел
- Демон Opscenter нуждается в сертификате для доступа к кластеру (как и любой другой клиент). Это должно быть произведено тем же процессом, который задокументирован на стороне DSE. Ключи JKS требуются, если это то, что Cassandra использует для шифрования.
- Сертификат Opscenterd должен быть зарегистрирован в доверенном хранилище, указанном в cassandra.yaml.
- Агенты должны знать путь к хранилищу ключей, который Cassandra настроен для принятия. Самый простой способ - указать им хранилище ключей, указанное в cassandra.yaml.
При добавлении кластера в opscenter, он запросит местоположение сертификата (для opscenterd) и местоположение хранилища ключей (для каждого узла cassandra).