【问题标题】:How to set up Cassandra client-to-node encryption with the DataStax Java driver?如何使用 DataStax Java 驱动程序设置 Cassandra 客户端到节点的加密?
【发布时间】:2014-11-07 00:48:10
【问题描述】:

我已经在我的 Cassandra 集群上设置了节点到节点的加密。现在我想设置客户端到节点。根据this documentation,它应该像获取我的客户端的 SSL 证书并将其导入每个节点的信任库一样简单。我还没有这样的证书,但这不是我的问题。

由于我的客户端使用 DataStax Java 驱动程序,似乎为了从客户端启用 SSL,当我构建 Cluster 时,我应该使用 withSSL() 方法来启用 SSL。好的,但我还需要做什么?我不熟悉 JSSE,所以我不知道还有什么必要的。 SSL 通信是双向的,即驱动程序是否需要访问集群中每个节点的 SSL 证书?

【问题讨论】:

    标签: ssl cassandra cassandra-2.0 datastax-java-driver jsse


    【解决方案1】:
    1. 创建证书 [1]。

    2. 在 cassandra.yaml 设置 [2] 中启用客户端节点加密。

    3. 为您的客户端添加 SSL 支持。有一个出色的 datastax 博客,其中包含用于在客户端中设置 SSL 连接的示例代码 [3]。

    4. 为您的客户提供的证书。据我所知,您似乎应该能够使用 [1] 中的相同密钥库和信任来供 java 客户端使用。根据 [4],我知道您需要 pcks12 样式的 PEM 文件才能使用 cqlsh。

    此外,[4] 提供了一个客户端通过 SSL 连接到 cassandra 集群的准系统示例。 [5] 对于集群节点和客户端的证书创建示例来说是一个不错的读物。

    1. [6] 是我发现的创建证书的最佳示例。

    注意如果您希望使用企业级加密,则需要启用 Java Cryptography Extension。出于法律原因,随附的 java 仅支持相对较弱的加密。如果您在未启用 JCE 的情况下尝试使用 256 位加密,Cassandra 和您的客户可能会抱怨。对客户端和服务器机器执行此操作:

    1. 下载http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
    2. 解压包
    3. 将两个策略 jar 复制到您的 JAVA_HOME 中,覆盖已经存在的两个 jar:

      [user@host UnlimitedJCEPolicy]$ ls local_policy.jar README.txt US_export_policy.jar [user@host UnlimitedJCEPolicy]$ export JAVA_HOME="$( readlink -f "$( which java )" | sed "s:bin/.*$::" )" [use@host UnlimitedJCEPolicy]$ echo $JAVA_HOME /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/jre/ [user@host UnlimitedJCEPolicy]$ cp -v *.jar $JAVA_HOME/lib/security/

    4. 重启 cassandra 和客户端

    [1]http://www.datastax.com/documentation/cassandra/2.0/cassandra/security/secureSSLCertificates_t.html

    [2]http://www.datastax.com/documentation/cassandra/2.0/cassandra/security/secureSSLClientToNode_t.html

    [3]http://www.datastax.com/dev/blog/accessing-secure-dse-clusters-with-cql-native-protocol

    [4]https://github.com/PatrickCallaghan/datastax-ssl-example

    [5]http://www.datastax.com/dev/blog/accessing-secure-dse-clusters-with-cql-native-protocol

    [6]http://techdocs.acunu.com.s3.amazonaws.com/v5.0/admin/security/ssl.html

    【讨论】:

    • 我已经完成了 #1 并且我已经在 #2 中找到了设置,所以我知道在那里做什么。关于#3:我假设这意味着我的客户端应用程序必须有自己的密钥库和信任库?这些文件是否必须与我通过 #1 中的说明设置 Cassandra 节点的方式类似?
    • 我不不这么认为。据我所知,您应该能够重用节点的密钥/信任库之一,因为无论如何它们都必须相互信任。另外,除了上面的 [5] 之外,我还没有看到任何包含生成客户端证书的示例,这有点模棱两可。
    • 我认为我不想重用节点的存储。由于我应该让每个节点都信任所有其他节点,因此启动一个新节点意味着我必须更新客户端的信任库。或者这是必要的吗?我之前问过 SSL 身份验证是否是双向的。
    • 换句话说,我在问我的客户端应用程序是否必须保留一个信任库。如果每次我想添加一个节点时都必须更新客户端应用程序的信任库,我将无法使用 SSL,那么每次我想重新配置 Cassandra 时都发布我的应用程序的新版本太令人望而却步了。
    • 我最终遵循 [6] 来创建证书。他们设置证书的方式,您可以扩展服务器和客户端,而无需更新任何一个信任库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2022-01-04
    相关资源
    最近更新 更多