2014-09-12 58 views
7

我在我的Cassandra集羣上設置了節點到節點的加密。現在我想設置客戶端到節點。根據this documentation,它應該像獲取客戶端的SSL證書並將其導入每個節點的信任庫一樣簡單。我還沒有這樣的證書,但這不是我的問題。如何使用DataStax Java驅動程序設置Cassandra客戶端到節點的加密?

由於我的客戶端使用DataStax Java驅動程序,似乎爲了從客戶端啓用SSL,當我構建Cluster時,我應該使用withSSL()方法來啓用SSL。好的,但我還需要做什麼?我對JSSE不熟悉,所以我不知道還有什麼是必要的。 SSL通信是雙向的,即驅動程序是否需要訪問集羣中每個節點的SSL證書?

回答

14
  1. 創建證書[1]。

  2. 在cassandra.yaml設置[2]中啓用客戶端節點加密。

  3. 將SSL支持添加到您的客戶端。有一個很好的datastax博客,其中提供了用於在客戶端建立SSL連接的示例代碼[3]。

  4. 爲您的客戶提供的證書。從我所知道的看來,您應該能夠使用[1]中的相同keystore和trusture來供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. 複製這兩個政策罐子到您的JAVA_HOME,覆蓋兩個罐子是已經存在:

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

  4. 重新啓動卡桑德拉和客戶端

[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

+0

我已經完成了#1,並且已經在#2中找到了設置,所以我知道該做什麼。關於#3:我認爲這意味着我的客戶端應用程序必須擁有自己的密鑰庫和信任庫?這些必須是不同的文件,類似於我通過#1中的指令設置Cassandra節點的方式嗎? – 2rs2ts 2014-09-12 20:02:57

+0

我不*認爲*如此。從我所知道的情況來看,您應該可以重用節點的關鍵/信任存儲之一,因爲無論如何它們都必須相互信任。另外,我還沒有看到任何例子,包括生成一個客戶證書,除了上面的[5],這是有點含糊不清。 – CHK 2014-09-12 20:27:32

+0

我不認爲我會想重用節點的商店。由於我應該讓每個節點相互信任所有其他節點,因此旋轉新節點意味着我必須更新客戶端的信任庫。或者這是必要的?我之前曾問過SSL認證是否是雙向的。 – 2rs2ts 2014-09-12 21:36:24

相關問題