【发布时间】:2016-08-23 08:32:59
【问题描述】:
我在我的 Ubuntu 机器上安装了一个单节点 Datastax Cassandra v3.5 集群。我正在尝试使用 SSL 选项使用命令行界面 cqlsh 连接到节点,但没有成功(来自同一台机器)。我遵循的步骤是:
- 按照本指南 http://docs.datastax.com/en/cassandra/2.0/cassandra/security/secureSSLCertificates_t.html 准备了 .keystore、.cer 证书和 .truststore
-
相应地修改了我的 cassandra.yaml:
client_encryption_options: enabled: true optional: false keystore: /************************/.keystore keystore_password: ************************ require_client_auth: false # Set trustore and truststore_password if require_client_auth is true truststore: /************************/.truststore truststore_password: ************************ -
创建了一个 cqlshrc conf 文件并按照本指南 https://docs.datastax.com/en/cassandra/2.1/cassandra/security/secureCqlshSSL_t.html 填充它:
[connection] hostname = ***** port = 9042 factory = cqlshlib.ssl.ssl_transport_factory [ssl] certfile = /home/conf/mycert.cer validate = true ## Optional, true by default
所以基本上我创建了一个私钥和公钥,将 Cassandra 指向我的 .keystore 和 .truststore(即使我认为没有必要,因为我没有强制执行客户端身份验证)并将 cqlsh 指向公钥(证书)。
每当我尝试启动 cqlsh --ssl 时,我总是会收到相同的错误,并且在 Cassandra 中没有一条调试消息。错误信息是:
连接错误:('无法连接到任何服务器', {'*.*****.******': error(0, "尝试连接到 [('..*.***', 9042)]。最后一个错误:_ssl.c:344:error:00000000:lib(0):func(0):reason(0)")})
顺便说一句,如果我删除 SSL 身份验证,一切都会正常运行。
编辑
我已经按照@Adam Holmberg 的建议解决了我最初的问题,但 SSL 连接仍然没有运气。我检查了我是否安装了 JCE 库,并且我一直在尝试强制 cqslh 使用 SSLv23 或 TLSv1 建立与 Cassandra 服务器的连接,但我一直收到以下错误:
连接错误:('无法连接到任何服务器', ... ... ... 最后一个错误:_ssl.c:510: EOF 发生违反协议")})
此外,我还添加了 JVM 选项 -Djavax.net.debug=all 无济于事,我没有看到任何关于 ssl 的额外日志。
【问题讨论】:
-
您是否安装了 JCE 库?
-
只是一个想法,但您需要支持双向 SSL 吗?如果没有,请尝试在 cqlshrc 和 cassandra.yaml 中设置
validate = false。