2012-06-20 13 views
6

मैंने हाल ही में नए जोड़े गए अक्का परिवहन एन्क्रिप्शन में एक अस्थायी बग को ट्रैक करने की कोशिश कर लिया है।नेटटी एसएसएच हैंडलर सिरदर्द

नोट: मैंने सर्वर या क्लाइंट दोनों पर सेट IssueHandshake (true) सेट करने के साथ प्रयोग किया है, लेकिन यह बिल्कुल मदद नहीं करता है।

हमारे सिफर स्पेक विभिन्न स्वीट्स से दो अलग-अलग सिफर का परीक्षण करते हैं, यह सुनिश्चित करने के लिए कि हम जिन सेटिंग्स का समर्थन करते हैं, वे वास्तव में काम करते हैं। हालांकि, परीक्षण कभी-कभी 10 गुना पास हो सकते हैं, और फिर हर दूसरे टेस्ट में असफल होने लगते हैं, यह वास्तव में सिक्योररैंडमली असफल रहा है ;-) कृपया ध्यान दें कि परीक्षण SHA1PRNG पर भी विफल रहता है, इसलिए यह हमारे द्वारा प्रदान किए गए अतिरिक्त सिफर से स्पष्ट रूप से असंबंधित है।

कोड कि SslHandler बनाता है: https://github.com/akka/akka/blob/wip-ssl-unbroken-%E2%88%9A/akka-remote/src/main/scala/akka/remote/netty/NettySSLSupport.scala

कोड है कि पाइप लाइन का निर्माण: https://github.com/akka/akka/blob/wip-ssl-unbroken-%E2%88%9A/akka-remote/src/main/scala/akka/remote/netty/NettyRemoteSupport.scala#L66

परीक्षण: https://github.com/akka/akka/blob/wip-ssl-unbroken-%E2%88%9A/akka-remote/src/test/scala/akka/remote/Ticket1978CommunicationSpec.scala

फॉल-बैक config (क्या परीक्षण से ऊपर नहीं है के लिए ओवरराइड): https://github.com/akka/akka/blob/wip-ssl-unbroken-%E2%88%9A/akka-remote/src/main/resources/reference.conf

कुंजीस्टोर & ट्रस्टस्टोर परीक्षण के लिए उपयोग करने के लिए: https://github.com/akka/akka/tree/wip-ssl-unbroken-%E2%88%9A/akka-remote/src/test/resources

जड़ अपवाद है कि परीक्षण विफल हो जाता है:

**java.security.InvalidKeyException: No installed provider supports this key: (null)** 
    at javax.crypto.Cipher.a(DashoA13*..) 
    at javax.crypto.Cipher.init(DashoA13*..) 
    at javax.crypto.Cipher.init(DashoA13*..) 
    at com.sun.net.ssl.internal.ssl.CipherBox.<init>(CipherBox.java:88) 
    at com.sun.net.ssl.internal.ssl.CipherBox.newCipherBox(CipherBox.java:119) 
    at com.sun.net.ssl.internal.ssl.CipherSuite$BulkCipher.newCipher(CipherSuite.java:369) 
    at com.sun.net.ssl.internal.ssl.Handshaker.newReadCipher(Handshaker.java:410) 
    at com.sun.net.ssl.internal.ssl.SSLEngineImpl.changeReadCiphers(SSLEngineImpl.java:550) 
    at com.sun.net.ssl.internal.ssl.SSLEngineImpl.readRecord(SSLEngineImpl.java:1051) 
    at com.sun.net.ssl.internal.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:845) 
    at com.sun.net.ssl.internal.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:721) 
    at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:607) 
    at org.jboss.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:969) 
    at org.jboss.netty.handler.ssl.SslHandler.decode(SslHandler.java:670) 
    at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:333) 
    at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:214) 
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) 
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) 
    at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:91) 
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.processSelectedKeys(AbstractNioWorker.java:373) 
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:247) 
    at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:35) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:680) 

और "पूर्ण" एक है:

[ERROR] [06/20/2012 10:38:33.670] [remote-sys-4] [ActorSystem(remote-sys)] [email protected]://[email protected]:59104] Error[ 
javax.net.ssl.SSLException: Algorithm missing: 
    at com.sun.net.ssl.internal.ssl.SSLEngineImpl.changeReadCiphers(SSLEngineImpl.java:554) 
    at com.sun.net.ssl.internal.ssl.SSLEngineImpl.readRecord(SSLEngineImpl.java:1051) 
    at com.sun.net.ssl.internal.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:845) 
    at com.sun.net.ssl.internal.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:721) 
    at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:607) 
    at org.jboss.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:969) 
    at org.jboss.netty.handler.ssl.SslHandler.decode(SslHandler.java:670) 
    at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:333) 
    at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:214) 
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) 
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) 
    at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:91) 
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.processSelectedKeys(AbstractNioWorker.java:373) 
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:247) 
    at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:35) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:680) 
Caused by: java.security.NoSuchAlgorithmException: Could not create cipher AES/128 
    at com.sun.net.ssl.internal.ssl.CipherBox.<init>(CipherBox.java:99) 
    at com.sun.net.ssl.internal.ssl.CipherBox.newCipherBox(CipherBox.java:119) 
    at com.sun.net.ssl.internal.ssl.CipherSuite$BulkCipher.newCipher(CipherSuite.java:369) 
    at com.sun.net.ssl.internal.ssl.Handshaker.newReadCipher(Handshaker.java:410) 
    at com.sun.net.ssl.internal.ssl.SSLEngineImpl.changeReadCiphers(SSLEngineImpl.java:550) 
    ... 17 more 
Caused by: java.security.InvalidKeyException: No installed provider supports this key: (null) 
    at javax.crypto.Cipher.a(DashoA13*..) 
    at javax.crypto.Cipher.init(DashoA13*..) 
    at javax.crypto.Cipher.init(DashoA13*..) 
    at com.sun.net.ssl.internal.ssl.CipherBox.<init>(CipherBox.java:88) 
    ... 21 more 
] 

उत्तर

2

जबकि मैं वास्तव में इस अपवाद नहीं देखा है, यह निश्चित रूप से मामला है कि javax.crypto.Cipher धागा सुरक्षित नहीं है; मैं एक आवेदन जहाँ मैं अंत में एक बग जो सिफर पर सिंक्रनाइज़ करके हल किया गया था नीचे ट्रैक किए गए है:

cipher synchronized { cipher doFinal encryptedBytes } 

क्षमा याचना अगर यह समाधान नहीं है, लेकिन आप कोड का एक बहुत तैनात! (संभवतः यह स्टैक ट्रेस जैसा ही नहीं है इंगित करता है कि इस मुद्दे को Cipher इंस्टेंस भी मिल रहा है - लेकिन क्या इसे सिंक्रनाइज़ करने की भी आवश्यकता हो सकती है?)

+0

धन्यवाद क्रिस, अभी मुझे एसएसएच हैंडलर –

3

नेटटी में कोई बग नहीं, एप्लिकेशन के बीच एक दुर्भाग्यपूर्ण लेखन-दौड़ थी -लेवल हैंडशेक और एसएसएल हैंडशेक। ध्यान देने योग्य है कि setIssueHandshake (true) हैंडशेक को पारदर्शी रूप से संभालने वाला प्रतीत नहीं होता है क्योंकि हैंडशेक पूरा होने तक आपको मैन्युअल रूप से लिखने की आवश्यकता होती है।

+0

पर संदेह है मुझे लगता है कि यह नेटटी 3.5.0 में तय किया गया था। अंतिम .. आप किस संस्करण का उपयोग कर रहे हैं? –

+0

यह 3.5.0 था। अंतिम –

+0

क्या आप कृपया एक बग खोल सकते हैं ताकि हम 3.5.1 फ़ाइनल से पहले इसे ठीक कर सकें? –

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