2016-12-05 10 views
5

Akkaアクター間の安全な(暗号化された)ピアツーピア通信を可能にする、Akka、SSL、および証明書管理に関するstackoverflowに関するいくつかの質問があります。simple Akka ssl encryption

リモートでのAkkaドキュメント(http://doc.akka.io/docs/akka/current/scala/remoting.html) は、X.509証明書を生成する方法の例として、このリソースへの読者を示しています。

http://typesafehub.github.io/ssl-config/CertificateGeneration.html#generating-a-server-ca

俳優が、内部サーバー上で実行されているので、example.comのサーバーCAの生成(あるいは実際に任意のDNS名)が、無関係と思われます。 (Amazon Webサービス上で実行されている例のEC2インスタンスの) ほとんどのサーバーは、VPCで実行され、初期アッカのリモコンは、私の理解

remote = "akka.tcp://[email protected]:2553"

のようなプライベートIPアドレスになり、それが可能でなければならないことです自己署名証明書を作成し、すべてのピアが共有する信頼ストアを生成します。

もっと多くのAkkaノードがオンラインになると、他のすべてのピアで使用されている同じ自己署名証明書と信頼ストアを使用できるようにする必要があります。また、CAを持たなくても、トラストストアがその証明書を検証し、中間の攻撃で人を避けるため、証明書のリストが増え続けるすべてのピアを信頼する必要はありません。

理想的な解決策であり、CAステップと単一のトラストストアファイルを使用せずに、自己署名入りの証明書を1つ生成し、Akkaリモーツの任意の組み合わせで共有することができますリモートおよびリモート、すなわちすべてのピア)

シンプル内部暗号化とクライアント認証用の証明書を生成するためのプロセスに従うことが簡単で存在する必要があります(ただ、すべてのピアを同じに信頼)

質問:これらはすべてのことができますすべてのピア上の同じファイルが信頼できるクライアントと話していることを保証し、暗号化を有効にしますか?

key-store = "/example/path/to/mykeystore.jks" 
trust-store = "/example/path/to/mytruststore.jks" 

質問は:X.509命令は行き過ぎの上にリンクされている - CAの段差のない簡単な自己署名/信頼ストアのアプローチがありますか?具体的には、内部IPアドレスのみ(DNSなし)であり、証明書にIPアドレスのウェブが増えていない場合、サーバーは自動スケールアップとダウンが可能なためです。

+0

これはsecurity.stackexchange.comのための質問のように思えます – bob0the0mighty

答えて

2

まず、私はAkkaを知らないと認めなければなりませんが、私はSSLプロトコルでX509証明書を使って識別の指針を与えることができます。

akka server configurationあなたは、ホスト名の検証のために、割り当てられたDNSホスト名とサーバーが必要になりますホスト名

にバインドされたSSL証明書が必要です。この例では、ホスト名はexample.comとします。

SSL証明書は、DNS名またはIP(通常ではない)にバインドすることができます。クライアント検証が正しいとするためには、それがサーバー

アッカのIP /ホスト名に対応している必要があり、サーバーの展開を簡素化するために、共通のCA

CA 
    - server1: server1.yourdomain.com (or IP1) 
    - server2: server2.yourdomain.com (or IP2) 

によって発行され、各サーバー用の証明書を必要とし、あなたはJKSでCA証明書の公開鍵を含むトラストストアを設定する必要がワイルドカードクライアント側で*.yourdomain.com

CA 
    - server1: *.yourdomain.com 
    - server2: *.yourdomain.com 

を使用することができます。クライアントは、このCAによって発行された証明書を信頼します。

あなたが説明したスキーマでは、キーストアは必要ないと思います。証明書でクライアントを識別したい場合にも必要です。 SSL暗号化チャネルはどちらの場合でも確立されます。

yourdomain.comのようなドメイン名がなく、内部IPを使用する場合は、各サーバーの証明書を発行してIPアドレスにバインドすることをお勧めします。

akkaがサーバー証明書を検証する方法によっては、すべてのサーバーに固有の自己署名証明書を使用することができます。 Akkaはおそらく信頼設定をJVMのデフォルトに依存しています。 (CAではなく)トラストストアに自己署名証明書を含めると、sslソケットファクトリは、有効期限が切れていたり、サーバと証明書のホスト名が一致しなくても、この証明書を提示する接続を信頼します。私はそれをお勧めしません

+0

ありがとう。すべてのピア(ピア1はピア2を信頼し、ピア2はピア1を信頼し、ピア1はピア3を信頼し、ピア3はピア1とピア2を信頼しなければならない)...あなたは要点を得ることができます、それはピアツーピア信頼の指数関数的に大きなリストかもしれません、自動スケール、IPアドレスの変更など)。 主に、暗号化に使用する汎用のssl certが必要です。 クライアントの認証が必要かどうかわからない場合は、内部DNSが必要です(AWSルート53の内部DNSのように* .mycompany.localをカバーする証明書を作成する) –

+0

あなたはすべてのピアを所有しているので、クライアント認証は不要です。ネットワーク外のクライアントを自認する必要がある場合に使用する必要があります。各サーバは主CAから発行された証明書を持っているので、実際にはこのスキームは同じ機能を実行し、必要な設定は非常に簡単になります – pedrofb

+0

「サーバCAの生成」が必要なのか疑問です。 クライアントの認証が不要なため、CAなしで自己署名付き証明書を生成するのはもう少し控えめですか? –