2012-04-25 9 views
4

は、クライアントとサーバーのアプリケーションが別のマシン上で実行していることを前提と確保する方法クライアント/サーバソケット通信

今日:

// Server will receive the request and cast it as needed 
ProxyResponse message = (ProxyResponse) objStream.readObject(); 

// Update message with some content 
... 

// Sent it back to client 
ObjectOutputStream oos = new ObjectOutputStream(toClient); 
oos.writeObject(message); 

私はさらに送り出さ必ずデータを作るために、これを強化したいと思います何とか保護されています。どのように私はこれにアプローチすることをお勧めしますか?

クライアント間でデータがどのように渡され、サーバーが両端で暗号化され、復号化され、SSL経由で送信されるかの例を探しています。

+0

何から保護されていますか?盗聴?悪意のある仲介者による変更?保護しようとしている脅威に関する詳細をいくつかご記入ください。 –

+0

@GregKopff質問を更新しました – JAM

+0

'何とか保護されました'とはどういう意味ですか?とにかくSSL経由で送信する場合は、何をする必要があると思いますか?それがまさにSSLがすでに行っていることだとご存知ですか? – EJP

答えて

11

JDK provides an SSL socket実装は適切な場所と思われます。使用するのは簡単です。

もともと、あなたはおそらく、このようなコードを持っている:

final SocketFactory factory = SocketFactory.getDefault(); 
final Socket socket = factory.createSocket(host, port); 

あなたは、単に工場を変更:

final SocketFactory factory = SSLSocketFactory.getDefault(); 
final Socket socket = factory.createSocket(host, port); 

同じことがServerSocketFactoryについても同様です。

2

asymmetricまたはベースの暗号化を使用できます。 BouncyCastleライブラリを見てください。対称鍵暗号化を使用すると、データを暗号化するために使用される共有鍵を各側が持つだけの簡単なものになります。

更新された回答に基づいて、私はSSLSocketを調べることに同意します。

+0

JREに含まれる暗号よりBouncyCastleを提案する理由は何ですか? –

+2

元の質問はあいまいでした。私はそれ以来私の答えを更新しました。ただし、クライアントが暗号化プロセスをより詳細に制御できると便利な状況もあります。クライアントは公開鍵と秘密鍵のペアを生成し、公開鍵をサーバに渡して、サーバが将来の接続でクライアントを検証できるようにすることができます。このアプローチは、Google TVペアリングプロトコルで使用されています。 https://developers.google.com/tv/remote/docs/pairing – Steve