2012-02-02 23 views
10

मैं जावा SocketChannel, ServerSocketChannel या शायद DatagramChannel टीएलएस के साथ कैसे सुरक्षित करूं?Java.nio चैनल और टीएलएस

मुझे पता है कि कुछ ढांचे (#1#2) हैं जो विज्ञापन करने में सक्षम हैं, लेकिन मैं जानना चाहता हूं कि शुद्ध जावा मानक पुस्तकालय के साथ इसे हासिल करना संभव है या नहीं।

+0

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

+1

@MauricioLinhares: ये उदाहरण 'एसएसओ सॉकेट के लिए हैं, एनआईओ नहीं। – Bruno

उत्तर

7

आपको SSLEngine का उपयोग करने की आवश्यकता है और मैन्युअल रूप से उस राज्य मशीन का उपयोग कर हैंडशेक करें। एसएसएल/टीएलएस टीसीपी के शीर्ष पर लागू किया गया है ताकि आप इसे सीधे DatagramChannel के शीर्ष पर उपयोग न कर सकें।

लेख SSL with Java NIO सहायक हो सकता है।

+1

+1 आपके लिंक के लिए भी। मुझे आशा है कि आपको बुरा लगेगा, लेकिन मैं अपने जवाब में जावाडोक लिंक भी जोड़ूंगा। लेख लिंक के लिए – Bruno

+0

+1 –

16

आपको SSLEngine का उपयोग करने की आवश्यकता है, जैसा कि Non-blocking I/O with SSLEngine में प्रलेखित है। जिन पुस्तकालयों का आप उल्लेख करते हैं उनका उपयोग करते हैं या पुस्तकालयों का उपयोग करते हैं जो इसका उपयोग करते हैं।

(ध्यान दें कि यह बेहद उपयोग करने के लिए मुश्किल है।)

आप इन कड़ियों दिलचस्प हो सकता है:

  • This answer (जो भी एक पुस्तक अध्याय के लिए एक लिंक शामिल हैं)।
  • Notes from Jean-François Arcand जिन्होंने इसे Grizzly में कार्यान्वित किया।
  • example समस्याओं के प्रकार के रूप में आप एसिंक्रोनस एसएसएल/टीएलएस के साथ प्राप्त कर सकते हैं।
  • इन this question में उल्लिखित समस्याओं से परिचित होना भी प्रासंगिक होना चाहिए (विशेष रूप से, एसिंक मोड में उनके साथ कैसे निपटें)।
  • Simple Framework में एसिंक एसएसएल/टीएलएस के लिए भी समर्थन है।

Datagrams के लिए, आप टीएलएस के बजाय DTLS का उपयोग कर इस पर गौर करना चाहिए। मुझे जावा में इसकी कार्यान्वयन की स्थिति के बारे में निश्चित नहीं है, लेकिन आप java.openjdk.security.devel मेलिंग सूची के अभिलेखागार के माध्यम से खोद सकते हैं।

+0

+1 एक अच्छे लिंक के लिए धन्यवाद। – Jonas

+0

ध्यान दें कि ग्रीज़ली स्थानांतरित हो गया है: https://javaee.github.io/grizzly/ – mlohbihler

1

ब्रूनो सही ढंग से उल्लेख करता है, ऐसा करने का मानक तरीका एसएसएलईजीएनईएन का उपयोग कर रहा है। लेकिन वह वर्ग गंभीरता से उपयोग करने में कठोर है।

मैं कुछ समय पहले एक ही समस्या में आया और अपनी खुद की लाइब्रेरी लिखना समाप्त कर दिया। वहाँ कुछ उदाहरण हैं और निश्चित रूप से नेटटी इत्यादि जैसी परियोजनाओं के अंदर कोड भी है लेकिन न तो विकल्प मजबूत या आसानी से पुन: प्रयोज्य है।

TLS Channel बाइटबफर में एक एसएसएलईजीएनएएन लपेटता है और इसे सामान्य सॉकेट चैनलों की तरह उपयोग करने की अनुमति देता है।

+1

अच्छी नौकरी! बहुत अच्छी परियोजना। – dorony

+0

अच्छा! उस पुस्तकालय में AsynchronousSocketChannel का समर्थन करने के लिए कोई योजना है? – jyemin

+0

@ जेयमिन, ऐसा लगता है और मौजूदा इंटरफ़ेस के शीर्ष पर एक अतिरिक्त परत के रूप में संभव होना चाहिए।किसी भी तरह हमें एक चयनकर्ता लूप को लपेटने की आवश्यकता होगी [जैसा कि हम पहले से ही एक परीक्षण के रूप में हैं] (https://github.com/marianobarrios/tls-channel/blob/master/src/test/scala/tlschannel/helpers/NonBlockingLoops .scala)। पुल अनुरोध स्वागत है! :-) –

संबंधित मुद्दे