无法连接ssl节点throgh cqlsh

时间:2017-12-05 03:08:36

标签: ssl cassandra cqlsh

在解释我面临的问题之前,我会通过本地机器告知您经过验证的问题。

  • 我拥有所有与Cassandra相关的配置,并且我拥有对我的机器所需的权限(访问权限)。
  • 我能够通过 {连接 SSL 禁用的Cassandra节点或 TLS 节点{1}}

    • 例如,我可以使用以下命令连接到下面的C *节点
    • cqlsh
    • 但与此同时,我无法使用选项SSL
    • 连接到以下节点
    • cqlsh -u xxxxx -p xxxxxx 123.abc.com
  • 以下是我的cqlshrc文件内容:

    cqlsh --ssl -u xxxxx -p xxxxxx 123.xyz.com

  • 甚至我尝试将certFile路径设置为环境变量。

我得到以下异常:

  

验证已启用; SSL传输工厂需要指定有效的certfile。请提供[ssl]部分中certfile的路径为' certfile' /XXXX/XXXXX/.cassandra/cqlshrc中的选项(或使用[certfiles]部分)或设置SSL_CERTFILE环境变量。

1 个答案:

答案 0 :(得分:1)

我猜你的路径可能有效,但你的certfile可能不是。以下是一些快速步骤,它们将从您的一个节点的密钥库中生成有效的证书文件:

1 - 检查您的cassandra.yaml以获取密钥库位置和密码:

client_encryption_options:
  enabled: true
  keystore: /etc/cassandra/.keystore
  keystore_password: flynnLives

2 - 将您的密钥库转换为PKCS12密钥库:

$ keytool -importkeystore -srckeystore /etc/cassandra/.keystore 
    -destkeystore ~/.cassandra/p12.keystore -deststoretype PKCS12 
    -srcstorepass flynnLives -deststorepass flynnLives

3 - 从PKCS12密钥库生成证书文件:

$ openssl pkcs12 -in ~/.cassandra/p12.keystore -nokeys -out ~/.cassandra/xyz.pem
    -passin pass:flynnLives

4 - 指定cqlshrc中的连接和ssl部分,以及默认传输工厂和证书名称。除非您使用双向SSL,否则请将validate设置为false。

[connection]
factory = cqlshlib.ssl.ssl_transport_factory

[ssl]
certfile = ~/.cassandra/xyz.pem
validate = false

5 - 通过cqlsh连接:

$ bin/cqlsh 192.168.0.100 -u flynn -p reindeerFlotilla --ssl
Connected to MasterControl at 192.168.0.100:9042.
[cqlsh 5.0.1 | Cassandra 2.2.5 | CQL spec 3.3.1 | Native protocol v4]
Use HELP for help.
flynn@cqlsh>