如何使用DataStax Java驱动程序设置Cassandra客户端到节点的加密?

8
我已在我的Cassandra集群上设置了节点到节点的加密。现在我想设置客户端到节点的加密。根据这个文档,只需要将客户端的SSL证书导入每个节点的信任存储库即可。我还没有这样的证书,但这不是我的问题。
由于我的客户端使用DataStax Java驱动程序,为了从客户端启用SSL,当我构建Cluster时,似乎应该使用withSSL()方法来启用SSL。好的,但我还需要做什么?我不熟悉JSSE,所以不知道还需要什么。SSL通信是双向的吗?也就是说,驱动程序需要访问集群中每个节点的SSL证书吗?
1个回答

15
  1. 创建证书 [1]。

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

  3. 为您的客户端添加SSL支持。有一篇出色的datastax博客介绍了如何在客户端中设置SSL连接的示例代码[3]。

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

[4]还提供了一个连接到Cassandra集群的客户端通过SSL的最简单示例。[5]是一个不错的阅读材料,其中包含了集群节点和客户端证书创建的示例。

  1. [6]是我找到的创建证书的最佳示例。
注意:如果您希望使用企业级加密,您需要启用Java加密扩展。由于法律原因,所提供的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的内容涉及Cassandra的SSL证书安全。
[2] http://www.datastax.com/documentation/cassandra/2.0/cassandra/security/secureSSLClientToNode_t.html介绍了如何在Cassandra中保护客户端与节点之间的通信安全。
[3] http://www.datastax.com/dev/blog/accessing-secure-dse-clusters-with-cql-native-protocol详细讲述了如何使用CQL本地协议访问安全的DSE集群。
[4] https://github.com/PatrickCallaghan/datastax-ssl-example提供了一个示例,展示了如何在Cassandra中配置SSL安全性。
[5] http://www.datastax.com/dev/blog/accessing-secure-dse-clusters-with-cql-native-protocol再次强调了如何使用CQL本地协议访问安全的DSE集群。

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

的意思是:该网址提供的是有关于安全套接字层(SSL)的技术文档。

我已经完成了#1,并且我已经在#2中找到了设置,所以我知道该怎么做。关于#3:我认为这意味着我的客户端应用程序必须有自己的密钥库和信任库?这些必须是不同的文件吗,类似于我通过#1中的说明设置Cassandra节点时的方式? - 2rs2ts
我不这么认为。从我的了解来看,您应该能够重用其中一个节点的密钥/信任存储,因为它们都必须相互信任。此外,除了上面提到的[5]之外,我还没有看到包括生成客户端证书的示例,这有点模糊不清。 - CHK
我不认为我想要重复使用节点存储。由于我应该让每个节点信任所有其他节点,所以启动新节点意味着我必须更新客户端的信任存储。或者这是必要的吗?我之前问过SSL身份验证是否是双向的。 - 2rs2ts
换句话说,我的问题是我的客户端应用程序是否必须保留一个信任存储。如果我每次想要添加一个节点都必须更新客户端应用程序的信任存储,那么我将无法使用SSL,因为每次重新配置Cassandra时发布新版本的应用程序太过繁琐。 - 2rs2ts
我最终按照[6]的方式创建了证书。他们设置证书的方式使得您可以在不更新信任存储库的情况下扩展服务器和客户端。 - CHK
第6个链接现在已经失效了。 - 2rs2ts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接