在解释我面临的问题之前,我会通过本地机器告知您经过验证的问题。
我能够通过 {连接 SSL 禁用的Cassandra节点或 TLS 节点{1}} 的
cqlsh
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环境变量。
答案 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>