如何使用TLS保護Java SocketChannel
,ServerSocketChannel
或者甚至可以保護DatagramChannel
?Java.nio頻道和TLS
我知道有一些框架(#1#2)宣傳是可以的,但我想知道是否有可能通過純Java標準庫來實現這一目標。
如何使用TLS保護Java SocketChannel
,ServerSocketChannel
或者甚至可以保護DatagramChannel
?Java.nio頻道和TLS
我知道有一些框架(#1#2)宣傳是可以的,但我想知道是否有可能通過純Java標準庫來實現這一目標。
您需要使用SSLEngine並使用該狀態機手動執行握手。 SSL/TLS在TCP之上實現,因此您不能直接在DatagramChannel
上使用它。
該文章SSL with Java NIO可能會有所幫助。
+1也適用於您的鏈接。我希望你不介意,但我也會將Javadoc鏈接添加到我的答案中。 – Bruno 2012-02-02 19:38:20
+1文章鏈接 – 2012-10-09 13:56:31
您需要使用SSLEngine
,如Non-blocking I/O with SSLEngine中所述。你提到的庫使用它或使用它的庫。
(注意,這是非常困難的使用。)
你可能會發現這些鏈接有趣:
數據報,你應該考慮使用DTLS而非TLS。我不確定它在Java中的實現狀態,但是你可以深入瞭解java.openjdk.security.devel
郵件列表的檔案。
+1感謝您的好鏈接。 – Jonas 2012-02-02 19:21:48
請注意,灰熊已經移動:https://javaee.github.io/grizzly/ – mlohbihler 2017-06-15 13:20:20
正如Bruno正確地提到的那樣,標準的做法是使用SSLEngine。但是那個級別的認真很難使用。
前段時間我遇到了同樣的問題,最後寫了我自己的庫。這裏有一些例子,當然也有像Netty這樣的項目中的代碼等等。但是這兩個選項都不健壯或不易重複使用。
TLS Channel將SSLEngine包裝在ByteBuffer中,並允許像使用普通SocketChannels一樣使用它。
幹得好!非常好的項目。 – dorony 2017-09-19 14:41:33
不錯!任何計劃在該庫中支持AsynchronousSocketChannel? – jyemin 2018-01-05 16:17:55
@jyemin,似乎是可行的,應該可能只是作爲現有接口之上的附加層。不知何故,我們需要包裝一個選擇器循環[就像我們已經作爲一個測試](https://github.com/marianobarrios/tls-channel/blob/master/src/test/scala/tlschannel/helpers/NonBlockingLoops .scala)。拉請求歡迎! :-) – 2018-01-05 22:54:18
http://www.exampledepot.com/egs/javax.net.ssl/client.html – 2012-02-02 19:09:39
@MauricioLinhares:這些例子適用於'SSLSocket's,而不是NIO。 – Bruno 2012-02-02 19:43:07