2012-02-02 15 views
10

SocketChannelServerSocketChannel、またはおそらくさらにDatagramChannelをTLSで保護するにはどうすればよいですか?Java.nioのチャネルとTLS

私が知ることができるように広告するいくつかのフレームワーク(#1#2)がありますが、純粋なJava標準ライブラリだけでこれを実現できるかどうかを知りたいのですが。

+0

http://www.exampledepot.com/egs/javax.net.ssl/client.html –

+1

@MauricioLinhares:これらの例は、NIOではなくSSLSocketのものです。 – Bruno

答えて

7

SSLEngineを使用し、その状態マシンを使用して手動でハンドシェイクを行う必要があります。 SSL/TLSはTCPの上に実装されているため、DatagramChannelの上で直接使用することはできません。

記事SSL with Java NIOが役立ちます。

+1

+1あなたのリンクにも。あなたが気にしないことを願っていますが、Javadocのリンクも私の答えに追加します。 – Bruno

+0

+1の記事リンク –

16

Non-blocking I/O with SSLEngineに記載されているように、SSLEngineを使用する必要があります。あなたが言及したライブラリはそれを使用するか、それを使用するライブラリを使用します。

(これは悪名高い使用することは困難であることに注意してください。)

あなたが興味深いこれらのリンクを見つけることがあります。

(また、本の章へのリンクが含まれています)

データグラムのために、あなたの代わりにTLSのDTLSを使用してになります。私はJavaで実装されているかどうかはわかりませんが、java.openjdk.security.develメーリングリストのアーカイブを調べることができます。

+0

+1良いリンクありがとうございます。 – Jonas

+0

Grizzlyは移動しました:https://javaee.github.io/grizzly/ – mlohbihler

1

Brunoが正しく言及しているように、標準的な方法はSSLEngineを使用することです。しかし、そのクラスは真剣に使いにくいです。

私は以前同じ問題を抱え、自分のライブラリを作成しました。いくつかの例がありますが、Nettyなどのプロジェクト内にコードもあります。しかし、どちらのオプションも堅牢ではなく、簡単に再利用可能です。

TLS Channelは、SSLEngineをByteBufferにラップし、通常のSocketChannelsと同じように使用できます。

+1

良い仕事!非常に素晴らしいプロジェクト。 – dorony

+0

ニース!そのライブラリでAsynchronousSocketChannelをサポートする計画はありますか? – jyemin

+0

@jyeminは、既存のインタフェースの上に追加されたレイヤーとして実行可能なように思われます。どういうわけか、私たちはセレクタループをテストする必要があります(https://github.com/marianobarrios/tls-channel/blob/master/src/test/scala/tlschannel/helpers/NonBlockingLoops)。 .scala)。プルのリクエストを歓迎します! :-) –

関連する問題