Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datastax Cassandra-SSL不工作的Cqlsh_Ssl_Cassandra_Datastax - Fatal编程技术网

Datastax Cassandra-SSL不工作的Cqlsh

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 密钥库:/*********************/.密钥库 密钥库密码:*********************

我已经在我的Ubuntu机器上安装了一个单节点Datastax Cassandra v3.5集群。我尝试使用命令行界面cqlsh,使用SSL选项连接到节点,但没有成功(从同一台机器)。我遵循的步骤是:

  • 按照本指南准备.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

因此,基本上我创建了一个私钥和公钥,将Cassandra指向我的.keystore和.truststore(即使我认为没有必要,因为我没有强制执行客户端身份验证),并将cqlsh指向公钥(证书)

每当我尝试启动
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