2017-01-24 19 views
2

これは私の初めてのJava Key Storeでの作業ですが、少し難しかったです。私はServerAServerBに送るログを持っています。私はログをトラフィッキングする安全ではないhttp通信を確立することができます。しかし、JKSを組み込んで、httpsを使用して安全な通信を確立すると、何も受信されないようです。ServerBJKSを使用して2台のサーバーを安全に通信するにはどうすればよいですか? 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 

ServerAコピーキーストアから

。これは、ダウンロードしてインストールするためのかなり単純なアプリケーションです。重要な/ imporant部分は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

私はこれらのうちの1つを行って以来、長い時間が経ちましたが、自己署名証明書を使用しているため、証明書チェーンを「信頼できる証明書チェーン」としてインポートすることはできず、あらかじめパッケージ化された信頼できる証明機関。だから、他のサーバーが信頼するためには、おそらく両方の側で信頼できる証明書として手動でインポートする必要がありますか? – djangofan

+0

@djangofan私はそれに似たようなことをしても、他のサーバーでは何も受信されないかどうかはわかりません。あなたがそれをやったやり方がまだ機能しているかどうかをあなたが最後にテストできますか? – MaryCoding

答えて

1

ない100%確かlogstashけど、。

(あなたはまた、認証局certitificateを持っていない限り、しかし、あなたは自分が署名したと思われる)

ないcacert

+0

良い点。私は 'serverA'に'トラストストア 'を作成しました。自身の 'keystore'から' SeverB'で作成した証明書を使用しています。しかし、運がない。これを '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

ファイルビートが推奨される解決方法で、LogStashへのビート(例:FileBeat)で作業しました。しかし、私はこれをlogstashからlogstashインスタンスに作用させようとしています。 – MaryCoding

0

あなたはあなたに2つのアプローチの場合があります。そして、

をお持ちssl_certificate_validation =あなたは両方でトラストストアを提供しなければならない真サーバー側とサーバー側。 セットアップでは、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

私は2番目の選択肢に従ったが、それでも仕事はできなかった。 [出力プラグイン](https://www.elastic.co/guide/en/logstash/2.2/plugins-outputs-http.html)には、 'keystore'と' truststore'という2つのフラグがあります。私は両方で何もテストしなかった。 – MaryCoding

関連する問題