2012-06-20 33 views
6

Tôi đã lãng phí một vài ngày bây giờ cố gắng để theo dõi một lỗi liên tục trong mã hóa giao thông mới được thêm vào Akka.Netty SslHandler nhức đầu

LƯU Ý: Tôi đã thử nghiệm với thiết lập setIssueHandshake (true) trên một trong hai hoặc cả hai máy chủ và máy khách, nhưng nó không giúp gì cả.

Thông số mã hóa của chúng tôi kiểm tra một vài thuật toán mã hóa khác nhau từ các bộ khác nhau, để đảm bảo rằng các cài đặt chúng tôi hỗ trợ thực sự hoạt động. Tuy nhiên, các bài kiểm tra đôi khi có thể vượt qua 10 lần, và sau đó bắt đầu thất bại mọi thử nghiệm khác, thật sự là SecureRandomly không ;-) Xin lưu ý rằng bài kiểm tra không thành công ngay cả trên SHA1PRNG nên rõ ràng là không liên quan đến mật mã bổ sung mà chúng tôi cung cấp.

Các mã tạo các SslHandler: https://github.com/akka/akka/blob/wip-ssl-unbroken-%E2%88%9A/akka-remote/src/main/scala/akka/remote/netty/NettySSLSupport.scala

Các mã mà xây dựng các đường ống dẫn: https://github.com/akka/akka/blob/wip-ssl-unbroken-%E2%88%9A/akka-remote/src/main/scala/akka/remote/netty/NettyRemoteSupport.scala#L66

Các xét nghiệm: https://github.com/akka/akka/blob/wip-ssl-unbroken-%E2%88%9A/akka-remote/src/test/scala/akka/remote/Ticket1978CommunicationSpec.scala

Sự sụp đổ lại cấu hình (đối với những gì các thử nghiệm trên không ghi đè): https://github.com/akka/akka/blob/wip-ssl-unbroken-%E2%88%9A/akka-remote/src/main/resources/reference.conf

Kho lưu trữ khóa & để sử dụng cho thử nghiệm: https://github.com/akka/akka/tree/wip-ssl-unbroken-%E2%88%9A/akka-remote/src/test/resources

Ngoại lệ gốc mà không kiểm tra là:

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

Và "đầy đủ", một là:

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

Trả lời

2

trong khi tôi đã không nhìn thấy chính xác những ngoại lệ này, nó chắc chắn là trường hợp mà a javax.crypto.Cipher không phải là chủ đề an toàn; Tôi có một ứng dụng mà cuối cùng tôi theo dõi xuống một lỗi được giải quyết bằng cách đồng bộ hóa trên mật mã:

cipher synchronized { cipher doFinal encryptedBytes } 

Xin lỗi nếu điều này không phải là giải pháp, nhưng bạn được đăng rất nhiều mã! (Có thể không chính xác giống như dấu vết ngăn xếp cho biết rằng sự cố thậm chí còn nhận được một phiên bản Cipher - nhưng điều này cũng có thể cần đồng bộ không?)

+0

Cảm ơn Chris, hiện tại tôi đang nghi ngờ SslHandler –

3

Không có lỗi trong Netty, đã có một cuộc viết ghi không may giữa ứng dụng bắt tay-up và bắt tay SSL. Đáng lưu ý là setIssueHandshake (true) dường như không minh bạch trong việc bắt tay vì bạn cần phải tự viết lại cho đến khi bắt tay hoàn thành.

+0

Tôi nghĩ rằng điều này đã được sửa trong netty 3.5.0.Final .. bạn đang sử dụng phiên bản nào? –

+0

Đây là 3.5.0.Final –

+0

bạn có thể mở một lỗi để chúng tôi có thể sửa lỗi trước 3.5.1Final? –

Các vấn đề liên quan