尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ScyllaDB 生成 cqlshrc 文件:为 cqlsh 与 cassandra-stress 配置 SSL 客户端连接

ScyllaDB 生成 cqlshrc 文件:为 cqlsh 与 cassandra-stress 配置 SSL 客户端连接 ScyllaDB 生成 cqlshrc 文件为 cqlsh 与 cassandra-stress 配置 SSL 客户端连接【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladb本文是一份面向 ScyllaDB 运维与开发人员的实战指南核心主题是如何在启用 SSL/TLS 加密的 ScyllaDB 集群上通过生成cqlshrc配置文件让cqlsh与cassandra-stress安全地建立客户端到节点的加密连接。读完本文你将掌握cqlshrc各配置段的完整写法、CA 签名证书与自签名证书两种场景的参数差异、参数含义对照表以及如何配合cassandra-stress的 truststore/keystore 完成 SSL 压测。为什么需要 cqlshrc 文件ScyllaDB 提供了与 Apache Cassandra 兼容的 CQL native transport默认监听在 9042 端口conf/scylla.yaml。当你在scylla.yaml中启用了client_encryption_options后客户端与节点之间的所有 CQL 通信都会通过 TLS/SSL 加密传输。这一点在通过公网或不信任网络连接集群时尤其重要——如果明文传输用户名、密码以及业务数据都可能被中间人窃取。cqlshCQL shell是随 ScyllaDB 一起发布的命令行交互工具位于bin/目录基于 Python 原生协议驱动实现见 docs/cql/cqlsh.rst。为了让cqlsh能够以 SSL 模式连接集群你需要为它准备一份cqlshrc配置文件。默认情况下该文件位于用户主目录下的~/.cassandra/cqlshrc也可以通过--cqlshrc选项指定非默认位置docs/cql/cqlsh.rst。前置条件安装 Java Cryptography Extensions在生成配置文件之前需要先安装Java Cryptography ExtensionsJCEJava 加密扩展从 Oracle 官网下载 JCE 扩展包扩展版本必须与你安装的 Java 版本匹配解压归档内容到 JRE 安装目录的lib/security子目录下。以 Oracle Java 8 为例目标路径形如/usr/lib/jvm/java-8-oracle/jre/lib/security/。JCE 是后续cassandra-stress一个基于 Java 的压测工具使用 Java keystore/truststore 建立 SSL 连接时所必需的加密组件。第一步创建 cqlshrc 配置文件在~/.cassandra/cqlshrc位置新建配置文件使用以下模板对应 CA 签名证书场景[authentication] username myusername password mypassword [cql] version 3.3.1 [connection] hostname 127.0.0.1 port 9042 factory cqlshlib.ssl.ssl_transport_factory [ssl] certfile path/to/rootca.crt validate true userkey client_key.key usercert client_cert.crt_signed模板中的关键点说明[connection]段中的factory cqlshlib.ssl.ssl_transport_factory是启用 SSL 的核心它让 cqlsh 使用 Python 驱动的 SSL transport 工厂建立连接[ssl]段中的certfile指向用于签署usercert的根证书CA 证书validate true表示启用证书校验。自签名证书场景下的 [ssl] 段如果你使用的是自签名证书自签名证书链的生成方法参见 Generating a self-signed Certificate Chain Using openssl[ssl]段应写成如下形式[ssl] certfile /etc/scylla/db.crt validate true userkey /etc/scylla/db.key usercert /etc/scylla/db.crt与 CA 签名场景的差异在于自签名场景下certfile、userkey、usercert直接指向 ScyllaDB 节点上的证书与私钥文件/etc/scylla/db.crt、/etc/scylla/db.key这些文件正是配置client_encryption_options时所用的 PEM 格式证书。两条关键注意事项hostname 匹配如果validate true证书名称必须与机器的 hostname 匹配否则证书校验会失败客户端认证mTLS如果集群在cassandra.yaml/scylla.yaml中开启了require_client_auth true你还需要在[ssl]段中指向自己的userkey和usercert向服务端出示客户端证书。SSL 客户端认证在 Cassandra 2.1 及之后版本中才支持通过 cqlsh 使用。第二步修改关键参数创建好文件后按下表修改参数以适应你的集群环境参数名描述可接受的值 / 说明username你的用户名需要已启用密码认证PasswordAuthenticator并创建了对应角色password与用户名关联的密码需要已启用密码认证并创建了对应角色version集群使用的 CQL 版本如果不确定可运行nodetool version查看certfile用于签署usercert指定证书的根证书适用于 CA 签名证书场景userkeycqlsh 使用的密钥证书客户端私钥usercert使用 cqlsh 连接节点时出示的已签名安全证书客户端公钥证书其中username与password依赖于 ScyllaDB 已启用密码认证并预先通过CREATE ROLE创建好角色——这是 authentication 与 authorization 主题的内容可参考安全文档目录 docs/operating-scylla/security 深入了解。第三步使用 cqlsh --ssl 验证连接保存配置后使用带--ssl标志的 cqlsh 连接节点cqlsh --ssl 127.0.0.1 9042如果配置项保存正确你将能够成功建立加密连接。--ssl是 cqlsh 官方支持的选项含义为使用 SSL 连接 ScyllaDBdocs/cql/cqlsh.rst。第四步使用 cassandra-stress 连接 SSL 集群cassandra-stress 是用于压测的 Java 工具要让它走 SSL 通道需要提供节点的地址、证书路径以及与证书关联的凭据。truststore文件是包含集群 SSL 证书的 Java keystore。示例命令如下cassandra-stress write -node 127.0.0.1 -transport truststore/path/to/cluster/truststore.jks truststore-passwordmytruststorepassword -mode native cql3 userusername passwordmypassword执行后 cassandra-stress 会生成一些文件这些文件将用于后续配置客户端与节点之间的传输加密client-to-node encryption。深入原理客户端加密在服务端如何配置cqlshrc文件本身只是客户端配置要让加密真正生效还需要服务端开启client_encryption_options。参考 conf/scylla.yaml服务端配置形如client_encryption_options: enabled: false certificate: conf/scylla.crt keyfile: conf/scylla.key truststore: not set, use system trust certficate_revocation_list: not set require_client_auth: False priority_string: not set, use default enable_session_tickets: default true关键参数与 cqlshrc 的对应关系enabled置为true后ScyllaDB 启动 CQL 的 TLS 监听certificate/keyfilePEM 格式的服务端证书与私钥对应自签名场景下 cqlshrc 中引用的/etc/scylla/db.crt与/etc/scylla/db.keyrequire_client_auth置为true时强制要求客户端出示证书对应 cqlshrc 中必须配置userkey/usercert的情况truststore可选指向存放受信 CA 证书的 PEM 证书库若不提供ScyllaDB 会尝试使用系统 truststore 校验证书priority_string用于控制 TLS 版本与加密强度如SECURE128:-VERS-TLS1.0:-VERS-TLS1.1可禁用 TLS 1.1 及更低版本。从源码看ScyllaDB 在 transport/controller.cc 中读取client_encryption_options当enabled为真时构建seastar::tls::credentials_builder并打印日志Enabling encrypted CQL connections between client and server随后将 TLS 凭据挂载到 native transport 监听端口上。这意味着你可以通过journalctl _COMMscylla检查日志中是否出现该消息来验证加密连接是否已启用。另外ssl-hot-reload 机制说明一旦client_encryption_options被启用scylla.yaml中指定的证书与密钥文件会被持续监控磁盘上文件更新后 ScyllaDB 会自动重新加载并用于后续连接无需重启节点即可轮换证书。完整的服务端开启流程含nodetool drain、停止节点、修改配置、启动节点、日志验证等步骤请参考 Encryption: Data in Transit Client to Node。cassandra-stress 使用的 keystore.jks/truststore.jks 也正是在该文档中通过openssl pkcs12 -export与keytool -importkeystore由db.key、db.crt、cadb.key、cadb.pem生成的。常见问题与排障思路连接失败且提示证书不匹配检查validate true时证书 CN 是否与连接的主机名一致服务端要求客户端证书但未提供确认scylla.yaml中require_client_auth的取值若为truecqlshrc 的[ssl]段必须包含userkey与usercertcassandra-stress 报 SSL 异常确认 truststore/keystore 密码与命令行-transport参数一致且 JCE 扩展版本与 Java 版本匹配不确定加密是否生效用journalctl _COMMscylla查找日志Enabling encrypted CQL connections between client and server该消息由 transport/controller.cc 输出。延伸阅读Encryption: Data in Transit Client to Node客户端到节点加密的完整启用流程以及 cassandra-stress 所需 keystore/truststore 的生成命令Generating a self-signed Certificate Chain Using openssl使用 openssl 生成自签名证书链db.key/db.crt/cadb.pem的完整步骤CQLSh: the CQL shellcqlsh 的完整命令行选项与cqlshrc文件说明安全文档索引认证、授权、节点间加密等更多安全主题。【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表