Datastax Cassandra-SSL不工作的Cqlsh
我已经在我的Ubuntu机器上安装了一个单节点Datastax Cassandra v3.5集群。我尝试使用命令行界面cqlsh,使用SSL选项连接到节点,但没有成功(从同一台机器)。我遵循的步骤是:Datastax Cassandra-SSL不工作的Cqlsh,ssl,cassandra,datastax,Ssl,Cassandra,Datastax,我已经在我的Ubuntu机器上安装了一个单节点Datastax Cassandra v3.5集群。我尝试使用命令行界面cqlsh,使用SSL选项连接到节点,但没有成功(从同一台机器)。我遵循的步骤是: 按照本指南准备.keystore、.cer证书和.truststore 相应地修改了我的cassandra.yaml: 客户端加密\u选项: 已启用:true 可选:false 密钥库:/*********************/.密钥库 密钥库密码:*********************
- 按照本指南准备.keystore、.cer证书和.truststore
- 相应地修改了我的cassandra.yaml:
客户端加密\u选项: 已启用:true 可选:false 密钥库:/*********************/.密钥库 密钥库密码:************************ 需要\u客户端\u身份验证:false #如果require\u client\u auth为true,则设置trustore和truststore\u密码 信任库:/*********************/.信任库 信任库密码:**************************
- 创建cqlshrc conf文件并按照本指南填写:
[连接] 主机名=***** 端口=9042 工厂=cqlshlib.ssl.ssl\u传输\u工厂 [ssl] certfile=/home/conf/mycert.cer validate=true##可选,默认为true
cqlsh--ssl
时,我总是会收到相同的错误,而在Cassandra内部没有一条调试消息。错误消息是:
连接错误:(“无法连接到任何服务器”,
{'*.********':错误(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的日志。假设/home/conf/mycert.cer”是您在服务器配置期间创建的文件,这不是Python的正确格式(cqlsh)。您需要将其导出为Python的PEM格式:
keytool -exportcert -alias <alias> -keypass <pass> -keystore <keystore> -storepass <pass> -rfc -file cassandra_cert.pem
keytool-exportcert-alias-keypass-keystore-storepass-rfc-file cassandra_cert.pem
如果您只是在试验cqlsh,并且不关心真正的安全性,那么您也可以从cqlshrc中省略这些选项(validate,certfile),并在不进行证书验证的情况下进行连接。假设“/home/conf/mycert.cer”是您在服务器配置期间创建的文件,这不是Python(cqlsh)的正确格式。您需要将其导出为Python的PEM格式:
keytool -exportcert -alias <alias> -keypass <pass> -keystore <keystore> -storepass <pass> -rfc -file cassandra_cert.pem
keytool-exportcert-alias-keypass-keystore-storepass-rfc-file cassandra_cert.pem
如果您只是在试验cqlsh,并且不关心真正的安全性,那么您也可以从cqlshrc中省略这些选项(验证、certfile),并在无证书验证的情况下连接。经过一些尝试和错误以及@Adam和@Aaron给出的一些有用提示后(感谢您的帮助)我终于在cqlsh和我的Cassandra服务器实例之间建立了SSL连接 在思考了这个问题之后,我得出结论,在客户端和服务器中都存在某种额外的配置错误,为了帮助可能面临相同问题的其他人,我将在这里发布我的最终配置: cqlshrc
[connection]
hostname = *****.*****.*****.*****.*****
port = 9042
[cql]
version = 3.4
[tracing]
max_trace_wait = 10.0
[ssl]
certfile = /****/****/****/****.cer.pem
validate = false ## Optional, true by default
#version = SSLv23
#factory = cqlshlib.ssl.ssl_transport_factory
cassandra.yaml(相关部分)
经过一些尝试和错误以及@Adam和@Aaron提供的一些有用的提示(感谢帮助),我终于在cqlsh和我的Cassandra服务器实例之间建立了SSL连接 在思考了这个问题之后,我得出结论,在客户端和服务器中都存在某种额外的配置错误,为了帮助可能面临相同问题的其他人,我将在这里发布我的最终配置: cqlshrc
[connection]
hostname = *****.*****.*****.*****.*****
port = 9042
[cql]
version = 3.4
[tracing]
max_trace_wait = 10.0
[ssl]
certfile = /****/****/****/****.cer.pem
validate = false ## Optional, true by default
#version = SSLv23
#factory = cqlshlib.ssl.ssl_transport_factory
cassandra.yaml(相关部分)
感谢您的回复。现在我面临另一个错误:
最后一个错误:_ssl.c:510:error:1408F10B:ssl例程:SSL3\u GET\u RECORD:error version number”)}
,看起来Cassandra和cqlsh之间的ssl版本不匹配。。这怎么可能呢?正如Aaron提到的,确保安装了JCE unlimited strength策略文件,然后重新启动服务器。您可以尝试显式设置版本,但默认设置应该可以工作。您可能还想打开java以获得更好的洞察力。仍然没有运气。我已经有了JCE,尝试使用python ssl脚本,但没有任何效果。。最后,当我在cqlsh配置文件中强制SSLv23或TLSv1时,我得到了这个错误:连接错误:(“无法连接到任何服务器”,最后一个错误:_ssl.c:510:EOF违反了协议)})
。一些谷歌搜索可能会建议此错误有时与未使用TLSv1的客户端有关。如果您想进入故障排除模式,可以验证正在设置哪些ssl\u选项。还有一个建议(如上所述)打开ssl调试服务器端。感谢您的回复。现在我面临另一个错误:最后一个错误:\u ssl.c:510:error:1408F10B:ssl例程:SSL3\u GET\u RECORD:error version number”)}
,看起来Cassandra和cqlsh之间存在ssl版本不匹配。。这怎么可能呢?正如Aaron提到的,确保安装了JCE unlimited strength策略文件,然后重新启动服务器。您可以尝试显式设置版本,但de