SocketChannel
、ServerSocketChannel
、またはおそらくさらにDatagramChannel
をTLSで保護するにはどうすればよいですか?Java.nioのチャネルとTLS
私が知ることができるように広告するいくつかのフレームワーク(#1#2)がありますが、純粋なJava標準ライブラリだけでこれを実現できるかどうかを知りたいのですが。
SocketChannel
、ServerSocketChannel
、またはおそらくさらにDatagramChannel
をTLSで保護するにはどうすればよいですか?Java.nioのチャネルとTLS
私が知ることができるように広告するいくつかのフレームワーク(#1#2)がありますが、純粋なJava標準ライブラリだけでこれを実現できるかどうかを知りたいのですが。
SSLEngineを使用し、その状態マシンを使用して手動でハンドシェイクを行う必要があります。 SSL/TLSはTCPの上に実装されているため、DatagramChannel
の上で直接使用することはできません。
記事SSL with Java NIOが役立ちます。
+1あなたのリンクにも。あなたが気にしないことを願っていますが、Javadocのリンクも私の答えに追加します。 – Bruno
+1の記事リンク –
Non-blocking I/O with SSLEngineに記載されているように、SSLEngine
を使用する必要があります。あなたが言及したライブラリはそれを使用するか、それを使用するライブラリを使用します。
あなたが興味深いこれらのリンクを見つけることがあります。
(また、本の章へのリンクが含まれています)データグラムのために、あなたの代わりにTLSのDTLSを使用してになります。私はJavaで実装されているかどうかはわかりませんが、java.openjdk.security.devel
メーリングリストのアーカイブを調べることができます。
+1良いリンクありがとうございます。 – Jonas
Grizzlyは移動しました:https://javaee.github.io/grizzly/ – mlohbihler
Brunoが正しく言及しているように、標準的な方法はSSLEngineを使用することです。しかし、そのクラスは真剣に使いにくいです。
私は以前同じ問題を抱え、自分のライブラリを作成しました。いくつかの例がありますが、Nettyなどのプロジェクト内にコードもあります。しかし、どちらのオプションも堅牢ではなく、簡単に再利用可能です。
TLS Channelは、SSLEngineをByteBufferにラップし、通常のSocketChannelsと同じように使用できます。
良い仕事!非常に素晴らしいプロジェクト。 – dorony
ニース!そのライブラリでAsynchronousSocketChannelをサポートする計画はありますか? – jyemin
@jyeminは、既存のインタフェースの上に追加されたレイヤーとして実行可能なように思われます。どういうわけか、私たちはセレクタループをテストする必要があります(https://github.com/marianobarrios/tls-channel/blob/master/src/test/scala/tlschannel/helpers/NonBlockingLoops)。 .scala)。プルのリクエストを歓迎します! :-) –
http://www.exampledepot.com/egs/javax.net.ssl/client.html –
@MauricioLinhares:これらの例は、NIOではなくSSLSocketのものです。 – Bruno