Каналы Java.nio и TLS - PullRequest
       30

Каналы Java.nio и TLS

12 голосов
/ 02 февраля 2012

Как мне защитить Java SocketChannel, ServerSocketChannel или, возможно, даже DatagramChannel с TLS?

Я знаю, что есть некоторые фреймворки ( # 1 # 2 ), которые рекламируют, чтобы иметь возможность, но я хочу знать, возможно ли достичь этого с помощью чистой Java одна стандартная библиотека.

Ответы [ 3 ]

18 голосов
/ 02 февраля 2012

Вам необходимо использовать SSLEngine, как описано в Неблокирующий ввод / вывод с SSLEngine . Упомянутые вами библиотеки используют его или используют библиотеки, которые его используют.

(Обратите внимание, что этим общеизвестно сложно пользоваться.)

Вам могут понравиться эти ссылки:


Для дейтаграмм вы должны использовать DTLS вместо TLS. Я не уверен в его статусе реализации в Java, но вы можете просмотреть архивы списка рассылки java.openjdk.security.devel.

8 голосов
/ 02 февраля 2012

Вам необходимо использовать SSLEngine и выполнить рукопожатие вручную, используя этот конечный автомат.SSL / TLS реализован поверх TCP, поэтому вы не можете использовать его непосредственно над DatagramChannel.

. Статья SSL с Java NIO может быть полезной.

2 голосов
/ 23 июля 2017

Как правильно отмечает Бруно, стандартный способ сделать это - использовать SSLEngine.Но этот класс серьезно сложен в использовании.

Я столкнулся с той же проблемой некоторое время назад и закончил писать свою собственную библиотеку.Есть несколько примеров, и, конечно, также есть код внутри проектов, таких как Netty и т. Д. Но ни один из этих вариантов не является надежным или легко используемым.

Канал TLS оборачивает SSLEngine в ByteBufferи позволяет использовать его как обычные SocketChannels.

...