2012-06-20 46 views
6

Yeni eklenen Akka taşıma şifrelemesinde aralıklı bir hatayı takip etmeye çalışırken birkaç günümü harcadım.Netty SslHandler baş ağrısı

NOT: Sunucuda ve istemcilerde setIssueHandshake (true) ayarlamayı denedim, ancak hiçbir işe yaramıyor.

Cipher spesifikasyonumuz, desteklediğimiz ayarların gerçekten çalıştığından emin olmak için farklı süitlerden birkaç farklı şifreyi test eder. Ancak, testler bazen 10 kez geçebilir ve daha sonra her testte başarısız olabilir, gerçekten SecureRandomly başarısız oluyor ;-) Lütfen, testin SHA1PRNG'de bile başarısız olduğunu, dolayısıyla sağladığımız ek şifrelerle açıkça alakasız olduğunu unutmayın.

SslHandler oluşturur kodu: https://github.com/akka/akka/blob/wip-ssl-unbroken-%E2%88%9A/akka-remote/src/main/scala/akka/remote/netty/NettySSLSupport.scala

boru hattını oluşturur kodu: https://github.com/akka/akka/blob/wip-ssl-unbroken-%E2%88%9A/akka-remote/src/main/scala/akka/remote/netty/NettyRemoteSupport.scala#L66

testler: https://github.com/akka/akka/blob/wip-ssl-unbroken-%E2%88%9A/akka-remote/src/test/scala/akka/remote/Ticket1978CommunicationSpec.scala

geri çekilme yapılandırma (yukarıdaki test değil ne yaptığını öğrenmek için) geçersiz kılar: https://github.com/akka/akka/blob/wip-ssl-unbroken-%E2%88%9A/akka-remote/src/main/resources/reference.conf

deposu & truststore testi için kullanımı: https://github.com/akka/akka/tree/wip-ssl-unbroken-%E2%88%9A/akka-remote/src/test/resources

testini başarısız kök istisnadır:

**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) 

Ve "tam" biridir: Tam olarak bu istisna görmedim iken

[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 
] 

cevap

2

, bu kesinlikle böyle olduğunu javax.crypto.Cipher, iş parçacığı güvenli değildir; Ben nihayet bir şifre üzerinde senkronize ederek çözüldü hata izini bir uygulama var: bu çözüm değilse

cipher synchronized { cipher doFinal encryptedBytes } 

Özür dilemek, ama bir sürü kod yayınlanmıştır! (Muhtemelen yığın izi, sorunun bile bir Cipher örneğini aldığını gösterir - ancak bu aynı zamanda eşitleme gerektirebilir?)

+0

Teşekkürler Chris, şu anda SslHandler –

3

Netty'de bir hata değil, uygulama arasında talihsiz bir yazma yarışı vardı -uzun el sıkışma ve SSL el sıkışma. Dikkat edilmesi gereken şey, setIssueHandshake (true), el sıkışma tamamlanana kadar el ile yazma işlemlerini el ile geri yüklemeniz gerektiğinden, el sıkışma işlemlerini şeffaf bir şekilde ele almıyor gibi görünüyor.

+0

'dan şüpheleniyorum Sanırım bu, 3.5.0.Finalde niçin sabitlendiyse .. Hangi sürümü kullanıyorsunuz? –

+0

Bu 3.5.0.Final –

+0

idi 3.5.1Final önce düzeltmek için bir hata açabilir misiniz? –

İlgili konular