2014-09-12 16 views
7

카산드라 클러스터에 노드 간 암호화를 설정했습니다. 이제 클라이언트 대 노드를 설정하려고합니다. this documentation에 따르면 내 클라이언트의 SSL 인증서를 가져 와서 모든 노드의 트러스트 스토어로 가져 오는 것이 쉬워야합니다. 나는 그런 증명서를 아직 가지고 있지 않지만 이것은 나의 질문이 아니다.DataStax Java 드라이버로 Cassandra 클라이언트 - 노드 암호화를 설정하는 방법은 무엇입니까?

내 클라이언트가 DataStax Java 드라이버를 사용하고 있기 때문에 클라이언트 측에서 SSL을 활성화하려면 Cluster을 구축 할 때 withSSL() 메서드를 사용하여 SSL을 사용해야합니다. 좋아,하지만 내가 뭘해야 해? 나는 JSSE에 익숙하지 않아서 필요한 것이 무엇인지 모른다. SSL 통신은 양방향입니까? 즉, 드라이버가 클러스터의 각 노드에 대한 SSL 인증서에 액세스해야합니까?

답변

14
  1. 인증서 [1]을 만드십시오.

  2. cassandra.yaml 설정 [2]에서 클라이언트 - 노드 암호화를 활성화하십시오.

  3. 클라이언트에 SSL 지원을 추가하십시오. 클라이언트에서 SSL 연결을 설정하는 데 필요한 샘플 코드가 들어있는 훌륭한 datastax 블로그가 있습니다 [3].

  4. 고객의 CERT. 내가 말할 수있는 것부터, 자바 클라이언트가 사용할 수있는 동일한 키 저장소와 trusture를 [1] 사용할 수 있어야합니다. Per [4]에 따르면 cqlsh를 사용하기 위해 pcks12 스타일의 PEM 파일이 필요하다는 것을 알고 있습니다.

또한 [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. 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

+0

# 1에서 수행 한 작업과 # 2에서 설정을 배치 했으므로 수행 할 작업을 알고 있습니다. # 3과 관련해서는 클라이언트 응용 프로그램에 자체 키 스토어와 트러스트 스토어가 있어야 함을 의미한다고 가정합니다. 이 파일들은 # 1의 지침에 따라 Cassandra 노드를 설정하는 것과 비슷한 다른 파일이어야합니까? – 2rs2ts

+0

나는 생각하지 않는다. 내가 말할 수있는 것부터, 노드의 키/트러스트 스토어 중 하나를 재사용 할 수 있어야합니다. 어쨌든 서로를 신뢰해야하기 때문입니다. 또한, 위의 [5]를 제외하고 클라이언트 인증서를 생성하는 것을 포함하는 예제를 보지 못했습니다. 이는 약간 모호합니다. – CHK

+0

노드 저장소를 다시 사용하고 싶지 않습니다. 각 노드가 다른 노드를 모두 신뢰해야하기 때문에 새로운 노드를 회전 시키면 클라이언트의 트러스트 스토어를 업데이트해야합니다. 아니면 필요한가? SSL 인증이 양방향인지 여부를 이전에 질문했습니다. – 2rs2ts