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



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

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

  1. 创建证书[1]。

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

  3. 为您的客户端添加SSL支持。上有一个很棒的数据税博客,其中有用于在客户端中设置SSL连接的示例代码[3]。

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

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

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

N.B.如果您希望使用企业级加密,则需要启用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

[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

最新更新