2017-01-24 1 views
2

Java Key Store로 작업 한 것은 처음이며 약간의 어려움이 있습니다. 로그를 ServerA (으)로 전송하면 ServerB입니다. 로그를 트래 피킹하는 보안되지 않은 http 통신을 설정할 수 있습니다. 그러나 https을 사용하여 보안 통신을 설정하기 위해 JKS을 통합하면 아무 것도 수신되지 않습니다. ServerB. JKS을 사용하여 두 서버가 어떻게 안전하게 통신 할 수 있습니까? ServerA에 키 스토어를 만들기서버 간 통신을위한 Java Key Store 및 HTTPS가 작동하지 않습니다.

: 아래

내가 현재이 최대의 모든 설정하고 어떻게

ServerA에서

생성 자체 서명 키 저장소에 인증서를

keytool -genkey \ 
     -alias jkstest \ 
     -keyalg RSA \ 
     -validity 365 \ 
     -keystore /apps/logstash/jkstest.jks 
     -keysize 2048 

ServerA 추출물 인증서에서

keytool -export \ 
     -rfc -alias jkstest \ 
     -keystore /apps/logstash/jkstest.jks \ 
     -file /apps/logstash/jkstest.crt 
     -storepass somepass 
에서

내가 ServerA에서 ServerB 로그를 보낼 logstash을 사용하고 ServerB

scp /apps/logstash/jkstest.jks [email protected]:/apps/logstash/jkstest.jks 

에 키 저장소를 복사합니다. 다운로드하고 설치하는 꽤 간단한 응용 프로그램입니다. 결정적인/중요한 대화 부분은 JKS이 사용되는 구성입니다 :

ServerA config.conf

input { 
     file { 
       path => "/var/log/apache2/error.log" 
       start_position => beginning 
     } 
} 
output { 
     stdout { codec => rubydebug { metadata => true } } 
     http { 
       http_method => "post" 
       codec => "json_lines" 
       url => "https://serverb.com:5000/" 
       ssl_certificate_validation => true 
       cacert => "/apps/logstash/jkstest.crt" 
     } 
} 

ServerB config.conf

input { 
    http { 
     port => 5000 
     codec => json 
     ssl => true 
     keystore => "/apps/logstash/jkstest.jks" 
     keystore_password => "hardt0gu355" 
    } 
} 
output { 
     stdout { codec => rubydebug { metadata => true } } 
} 

로그를 전송 및 수신을 시작하려면 다음

ServerA start logstash

bin/logstash agent -f config.conf -l logstash.log 

ServerB 당신이 당신의 생성 된 인증서와 configure a truststore 인증서를 신뢰해야으로 서버 A에서 시작

bin/logstash agent -f config.conf -l logstash.log 
+1

'ssl_certificate_validation => false'는 자체 서명 인증서이기 때문에 완전히 검증 할 수 없습니다. – Redlab

+0

나는 이것들 중 하나를 한 지 오래되었지만 자체 서명 한 인증서를 사용하고 있기 때문에 '신뢰할 수있는 인증서 체인'으로 가져올 수는 없으며 미리 패키지 된 인증서 체인 중 하나로 체인을 연결할 수 없습니다. 신뢰할 수있는 인증 기관. 따라서 다른 서버가 신뢰하려면 양쪽 끝에서 신뢰할 수있는 인증서로 수동으로 가져와야 할 것입니다. – djangofan

+0

@ djangofan 내가 비슷한 것을했지만 아직 다른 서버에서 아무것도 얻지 못했다면 잘 모르겠습니다. 당신이 그것을 한 방법이 여전히 작동하는지 당신의 끝에 시험 할 수 있습니까? – MaryCoding

답변

1

100 % 확실 logstash하지만.

(당신은 또한 인증 기관 certitificate을하지 않는 한,하지만 당신은 자기가 서명 한 것)

아니 cacert

+0

좋은 지적. 나는'serverA'에'트러스트 스토어'를 만들었습니다. 'SeverB'에서 생성 한 인증서를 자체 keystore에서 사용하기. 그러나 운이 없다. 'serverA'에서 이것을 실행하여 트러스트'keytool -importcert -file serverB.cer -alias mycert -keystore truststore.jks'를 생성하십시오. 복제하거나 SSL을 통해 의사 소통을 할 수 있습니까? – MaryCoding

+0

https://www.elastic.co/guide/en/beats/filebeat/5.0/configuring-ssl-logstash.html – Redlab

+0

Filebeat를 사용하여 LogStash에 비트 (예 : FileBeat)를 사용하여 작업했습니다. 그러나, 나는 이것을 logstash에서 logstash 인스턴스로 작업하도록하고있다. – MaryCoding

0

당신은 당신의 두 가지 방법의 경우가 그런 다음

당신이 ssl_certificate_validation = 당신이 모두 신뢰를 제공해야 진정한 측면 - ServerA 및 ServerB. 설치 프로그램에서 ServerA의 cacert와 ServerB의 키 저장소 만 제공합니다. 그러나 두 서버 모두에 키 저장소와 트러스트를 정의해야합니다.

그래서 다음과 같은 일이

1) 두 서버에 같은 키 스토어를 사용하고도 두 서버에서 동일한 트러스트를 사용 할 수 있습니다. 이것은 매우 불안한 ​​접근법입니다.

2) 독립 서버와 클라이언트의 키 스토어를 생성하고 공개 키 (인증서 표시)를 교환 할 필요는 신뢰 대신 cacert을 사용할 수 있습니다이 경우 예를 http://ruchirawageesha.blogspot.com/2010/07/how-to-create-clientserver-keystores.html를 참조하십시오.

또는 독립 CA를 생성하고 서명 된 인증서 (https://jamielinux.com/docs/openssl-certificate-authority/introduction.html)를 생성 할 수 있습니다. 이것은 훨씬 더 나은 접근 방법이지만, 아마도 귀하의 경우 약간의 오버 헤드가 발생할 것입니다.

+0

나는 두 번째 옵션을 따라 갔지만 여전히 작동하지 않았다. [출력 플러그인] (https://www.elastic.co/guide/en/logstash/2.2/plugins-outputs-http.html)에는 두 개의 플래그'keystore'와'truststore'가 있습니다. 나는 두 가지로 아무것도 테스트하지 않았다. – MaryCoding

관련 문제