Pertanyaan Java.nio Channels dan TLS


Bagaimana cara mengamankan Java SocketChannel, ServerSocketChannel atau, bahkan mungkin, a DatagramChannel dengan TLS?

Saya tahu bahwa ada beberapa kerangka kerja (# 1  # 2) yang beriklan untuk dapat, tetapi saya ingin tahu apakah mungkin untuk mencapai hal ini dengan perpustakaan standar Java murni saja.


12
2018-02-02 19:06


asal


Jawaban:


Anda perlu menggunakan SSLEngine, sebagaimana didokumentasikan dalam Non-blocking I / O dengan SSLEngine. Pustaka yang Anda sebutkan menggunakannya atau menggunakan pustaka yang menggunakannya.

(Perhatikan bahwa ini sangat sulit digunakan.)

Anda mungkin menemukan tautan ini menarik:


Untuk Datagram, Anda harus melihat menggunakan DTLS bukannya TLS. Saya tidak yakin status penerapannya di Jawa, tetapi Anda bisa menggali melalui arsip java.openjdk.security.devel milis.


18
2018-02-02 19:18



Anda perlu menggunakan SSlengine dan lakukan jabat tangan secara manual menggunakan mesin negara itu. SSL / TLS diimplementasikan di atas TCP sehingga Anda tidak dapat menggunakannya langsung di atas a DatagramChannel.

Artikel SSL dengan Java NIO semoga bermanfaat.


8
2018-02-02 19:16



Seperti yang disebutkan oleh Bruno dengan benar, cara standar untuk melakukannya adalah menggunakan SSLEngine. Tapi kelas itu serius sulit digunakan.

Saya menemukan masalah yang sama beberapa waktu lalu dan akhirnya menulis perpustakaan saya sendiri. Ada beberapa contoh di luar sana dan tentu saja ada juga kode di dalam proyek seperti Netty, dll. Tetapi tidak ada opsi yang kuat atau mudah digunakan kembali.

Channel TLS membungkus sebuah SSLEngine dalam ByteBuffer dan memungkinkan untuk menggunakannya seperti SocketChannels yang normal.


2
2017-07-22 23:41