2012-03-26 4 views
0

Meine Verbindung zu meiner Testanwendung endet an derselben Stelle ohne Fehler.Netty ClientBootstrap SSL Handshake beendet - Channel/ClientBootstrap schließen?

Ich denke, vielleicht etwas löst den Kanal/Verbindung zu schließen, aber ich weiß nicht, was es sein könnte. Wo genau es schließt, ändert sich leicht, wenn ich die Ausdrucke im Code ändere, so scheint das Timing auf einem anderen Thread zu sein.

Ich arbeite seit vier Tagen daran und listet mich als offiziell fest.

Hier ist mein Verbindungscode:

final HttpQueryRequestImpl realRequest = (HttpQueryRequestImpl) getPredecessorQueryResolver().resolvePredecessorResults(getPredecessorResults(), getQueryRequest(), getId()); 


    // Configure the client. 
    // TODO determine if this ClientBootstrap object can be reused. Indications in the doucmentation 
    // seem to say yes, with caveats. Reusing the pool would improve performance. Caveats must be investigated. 
    final ClientBootstrap bootstrap = new ClientBootstrap(
      new NioClientSocketChannelFactory(
      Executors.newCachedThreadPool(), 
      Executors.newCachedThreadPool())); 

    // Set up the event pipeline factory. 
    bootstrap.setPipelineFactory(new HttpSnoopClientPipelineFactory()); 

    // TODO audit and timestamp logging 
    if (logger.isInfoEnabled()) { 
     logger.info("Starting connection to !" + realRequest.getUri()); 
    } 
    // Start the connection attempt. 
    // ChannelFuture future = bootstrap.connect(new InetSocketAddress(realRequest.getHost(), realRequest.getPort())); 
    logger.info(realRequest.getHost() + " " + realRequest.getPort()); 
    ChannelFuture future = bootstrap.connect(new InetSocketAddress("myname.organization.com", 8443)); 

    // register some things to happen after the channel completes  
    future.addListener(new ChannelFutureListener() { 

     @Override 
     public void operationComplete(ChannelFuture future) throws Exception { 


      if (!future.isSuccess()) { 
       logger.error("Error connecting to " + realRequest.getHost() + ":" + realRequest.getPort() + " " + realRequest.getUri()); 
       bootstrap.releaseExternalResources(); 

      } else { 

       if (logger.isInfoEnabled()) { 
        logger.info("Connected to " + realRequest.getHost() + ":" + realRequest.getPort() + " " + realRequest.getUri()); 
       } 

       // Send the HTTP request. 
       Channel channel = future.getChannel(); 

       HttpRequest request = new DefaultHttpRequest(
       HttpVersion.HTTP_1_1, HttpMethod.GET, "/factorial"); 
       request.setHeader(HttpHeaders.Names.HOST, "myname.organization.com"); 
       request.setHeader(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.CLOSE); 
       request.setHeader(HttpHeaders.Names.ACCEPT_ENCODING, HttpHeaders.Values.GZIP); 

       ChannelFuture writeFuture = channel.write(request); 

       writeFuture.addListener(new ChannelFutureListener() { 

        @Override 
        public void operationComplete(ChannelFuture future) throws Exception { 

         logger.info("Wrote data complete"); 
         // TODO once bootstrap is reused, get rid of this 
         // Shut down executor threads to exit. 
         // bootstrap.releaseExternalResources(); 
        } 
       }); 

      } 
     } 
    }); 

Dies ist, was meine Ausgabe sieht wie folgt mit SSL-Debuggen aktiviert:

32 [main] INFO nettyliteserver.remotequeries.HttpsQuery - Starting connection to !https://myname.organization.com:8443/factorial 
32 [main] INFO nettyliteserver.remotequeries.HttpsQuery - myname.organization.com 8443 
*** 
found key for : myname.organization.com 
chain [0] = [ 
[ 
    Version: V1 
    Subject: CN=myname.organization.com, OU=myname.organization.com, O=myname.organization.com, L=myname.organization.com, ST=myname.organization.com, C=US 
    Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5 

    Key: Sun RSA public key, 1024 bits 
    modulus: 94642469145065852073118930371145672868332389407646565010478303790446281089121119363888463093443199472593726155607365724815252704927244864250811984977900576391208121343883948799873869280369621492901495505803717080952775289840654752626694613842653754724186814688913115288788127483906065658243886585022651573993 
    public exponent: 65537 
    Validity: [From: Fri Mar 09 13:29:22 EST 2012, 
       To: Sat Mar 09 13:29:22 EST 2013] 
    Issuer: C=US, CN=myname.organization.com, ST=myname.organization.com, L=myname.organization.com, EMAILADDRESS=myname.organization.com, OU=myname.organization.com, O=myname.organization.com 
    SerialNumber: [ 71c8] 

] 
    Algorithm: [SHA1withRSA] 
    Signature: 
0000: C5 55 9C 1D 76 CE 05 87 45 0D C3 15 9C DB 0B 3A .U..v...E......: 
0010: 70 0E 50 0C DB DB B4 62 2F BA A3 30 48 C0 D2 E9 p.P....b/..0H... 
0020: 45 9C 3C C0 4A 84 7B 21 51 78 93 F1 63 4C 61 37 E.<.J..!Qx..cLa7 
0030: 21 97 E8 38 F9 62 C5 EA 02 53 28 4F F8 EC 01 F2 !..8.b...S(O.... 
0040: 08 70 DB 96 D5 1D 9E 0A 89 33 D3 1D C8 79 8B C1 .p.......3...y.. 
0050: 6E 07 C4 98 FA 55 85 80 D4 10 AF A7 E5 A7 94 FA n....U.......... 
0060: 45 CB DA 7C FA 66 C6 FC 69 A4 B2 05 01 C6 DC 8E E....f..i....... 
0070: AC 15 7D A2 FC 25 DF FE 19 80 D4 27 07 EA D6 3F .....%.....'...? 
0080: 5C 73 5F 63 0B 4E 02 FC 49 EA 76 69 FA 82 5B 1B \s_c.N..I.vi..[. 
0090: 3B 45 6B 95 DC 8F C2 E8 A9 6C 10 CD 9B E0 59 D7 ;Ek......l....Y. 
00A0: DC E6 69 2C F9 DB 99 F7 7F E3 76 81 13 CD B3 FE ..i,......v..... 
00B0: 1D AD 32 7D 6F 74 A9 12 4B 06 E2 9F E9 1F EF 8A ..2.ot..K....... 
00C0: 1F CA 1D B8 08 47 00 1D 19 53 87 0A E3 FA B4 B5 .....G...S...... 
00D0: 99 4F B9 97 5D D0 EE 0D DD 09 5F 3C 41 31 D6 18 .O..]....._<A1.. 
00E0: 5C 39 01 8E DA D9 27 85 FE 0F C5 EE 00 A3 27 44 \9....'.......'D 
00F0: C0 A1 42 EA 13 5B 66 3B 64 E3 EA 9B 23 20 0B C6 ..B..[f;d...# .. 
0100: 66 DB AB 79 77 97 3E 4A D0 C7 79 C4 D2 E7 BD 1A f..yw.>J..y..... 
0110: F3 90 39 A2 A4 69 A9 A1 4E A3 0B 92 93 9F 8F 4F ..9..i..N......O 
0120: C3 4F CE E7 20 D6 45 4D 9B E0 B2 58 EC 96 19 99 .O.. .EM...X.... 
0130: E0 F3 BB E4 EF 7E 1D C7 C3 48 8B D0 7D 2D 8C 3A .........H...-.: 
0140: 1A AF 77 3A 83 F4 51 C9 D6 DE BE 24 3B 03 7C A9 ..w:..Q....$;... 
0150: 4B 5C C4 6E 59 AB E2 02 63 73 CE 98 8A D0 45 D5 K\.nY...cs....E. 
0160: 6C FE 23 79 93 69 D5 74 0D AF FE 23 AE BB 3F E4 l.#y.i.t...#..?. 
0170: 9C 05 87 E1 2E 91 51 D6 44 55 7E 66 73 1D BB C2 ......Q.DU.fs... 
0180: F3 E8 4D CA 50 D9 6D 2A AD 84 EF C7 70 4B 15 EA ..M.P.m*....pK.. 
0190: C4 E0 33 3E 44 89 A3 97 8C 32 17 FD B9 DD 22 FB ..3>D....2....". 
01A0: 08 CF 1E 49 78 B7 2F 8E 60 66 58 3D 57 6F 21 72 ...Ix./.`fX=Wo!r 
01B0: D3 87 38 9C DD EB 60 D8 BD 06 A8 04 FD 2D 59 EA ..8...`......-Y. 
01C0: 82 A8 E8 E7 73 81 1E DE FD 51 33 0C F7 47 AE 34 ....s....Q3..G.4 
01D0: 58 57 DD CE FD 12 68 A6 A8 2E 58 4F C7 6A 1E 27 XW....h...XO.j.' 
01E0: 39 EF C7 BE 75 32 96 99 6B 1B E6 23 2A A5 0E 2F 9...u2..k..#*../ 
01F0: 35 0A 0C 0C FA 92 65 1D DC 17 56 57 C4 08 89 48 5.....e...VW...H 

] 
chain [1] = [ 
[ 
    Version: V1 
    Subject: C=US, CN=myname.organization.com, ST=myname.organization.com, L=myname.organization.com, EMAILADDRESS=myname.organization.com, OU=myname.organization.com, O=myname.organization.com 
    Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5 

    Key: Sun RSA public key, 4096 bits 
    modulus: 806866056348410276765741718640530245144236832502515305762072630647553277327953919063172921502880537921571234334570551528531888439605163701867371172813984927986527584575335107418628498623377289440387978453125866503947773575289298639780740830349842738718874502642354354786938153803982142709595698253667527748252780647208422256786989310056682111281793756866001585577762899819782647308899956239433307951381179494148030342543127196354965114705680137760255253494869690234155019595101679874833401305309080790668924554791611347641826073186513714032079267845800910995372117962695304732667441462587341743926848435668491205343373472147947564642450777593350053051331533112897445884090255314793988795654376385927964164743689070718825504556057816253883950563232708345137230621100544965407234099088514072120925433729718654307794068734283314839693884400349895261851764957828001331060077733384251643023885026867016629337741393451760864161087662305445338147618921663305526880031574988450298248773113067904762125722376437187045162922144483754266350990810318433387352520742359961188082219224300651116723774686748606066644650420169490565673256120050113505389581136874611045622641221693918773655462724374483166653830081719164259720121105179323613660081321 
    public exponent: 65537 
    Validity: [From: Fri Mar 09 13:29:15 EST 2012, 
       To: Sat Mar 09 13:29:15 EST 2013] 
    Issuer: C=US, CN=myname.organization.com, ST=myname.organization.com, L=myname.organization.com, EMAILADDRESS=myname.organization.com, OU=myname.organization.com, O=myname.organization.com 
    SerialNumber: [ c1e2c18c f327ad81] 

] 
    Algorithm: [SHA1withRSA] 
    Signature: 
0000: 8A EB 65 0E 88 09 BE 9A BA 88 FB CA 9A D4 53 F4 ..e...........S. 
0010: B0 5C 91 67 BD C9 35 67 2D 37 78 2D 5C E6 4B 26 .\.g..5g-7x-\.K& 
0020: E9 8E 20 3D DE 92 9B 29 A7 CB CC 5F 4E E3 CD 1A .. =...)..._N... 
0030: FA 5B EB 0D 42 DC 17 05 4E D6 34 72 43 46 6C 55 .[..B...N.4rCFlU 
0040: 99 FF AC 00 2E BF 28 5D 4A 6A 21 DE 72 9E 6C 7A ......(]Jj!.r.lz 
0050: A6 10 28 27 21 72 0F 69 09 04 D3 FB A7 83 DF 81 ..('!r.i........ 
0060: E2 78 BD 0B 4F D7 AA B4 CC E2 E4 3B A5 30 A3 14 .x..O......;.0.. 
0070: B4 83 75 DC E6 8C 01 9A B2 BA FF 0D 3F AA F1 30 ..u.........?..0 
0080: A0 33 A9 CC 13 08 72 8F E2 75 1D 3B 30 B8 82 3C .3....r..u.;0..< 
0090: 9A A0 A3 68 18 60 C0 1F E4 2E 06 D6 1B B8 46 6F ...h.`........Fo 
00A0: AB D3 C9 AD 89 E6 E7 48 12 0F 90 A5 B8 A2 17 51 .......H.......Q 
00B0: 41 AF 1E 62 6C D2 48 B2 41 C6 CE 1D 4E B1 F7 90 A..bl.H.A...N... 
00C0: 34 26 E0 5D 95 7B BD 93 BA 4C D1 7A 08 A9 1E 57 4&.].....L.z...W 
00D0: 03 EE F2 EC BD 8E 36 43 1D 4F 9E 39 56 A8 E4 B6 ......6C.O.9V... 
00E0: 44 6C D5 D3 8C F0 FE 1F 87 87 67 2D E6 05 7E BA Dl........g-.... 
00F0: 18 FB 6C 0B D8 80 19 08 27 8F 60 09 A6 BA 68 55 ..l.....'.`...hU 
0100: 05 13 A8 9C 04 06 F8 24 A1 52 DB 67 69 2E FE 12 .......$.R.gi... 
0110: A5 23 D1 2E 56 EA 54 08 83 DD 91 43 45 8B F6 97 .#..V.T....CE... 
0120: 01 65 CC 32 4C FA D6 89 81 83 B4 21 92 F4 EC 29 .e.2L......!...) 
0130: 68 87 51 A0 FC B7 7D BD 90 F8 A1 F8 68 82 CF 03 h.Q.........h... 
0140: 4E 9C C2 FA AF 4A D3 AD 0B AB AB 73 4B B4 95 B0 N....J.....sK... 
0150: EC 64 6B 8E 2B D4 E1 41 96 19 EC E9 6B 92 51 8A .dk.+..A....k.Q. 
0160: D8 C1 87 FC DB B4 12 BD 14 AB 5C 07 73 AA DE CE ..........\.s... 
0170: E5 05 8F E9 CC 9F C4 2A B6 0F 5D 40 8E 7A 82 7E .......*..]@.z.. 
0180: CD 28 88 8F 01 3E 6C EF E7 01 58 2E C9 3F 0E 44 .(...>l...X..?.D 
0190: 4D 1A 2B BB 0D 51 76 38 26 D4 89 5C 9B AB 63 FA M.+..Qv8&..\..c. 
01A0: 4B 63 7C DC 0E 05 01 BB E4 97 73 03 4F 83 71 1E Kc........s.O.q. 
01B0: B6 CB A6 62 F9 21 1B F2 24 D3 85 1D E6 31 87 E4 ...b.!..$....1.. 
01C0: D6 74 09 70 C3 D0 4C 35 7E F1 49 5A 60 B7 02 72 .t.p..L5..IZ`..r 
01D0: 04 C9 83 AD 5E 63 1F 7B 97 4C 35 7F 15 88 D5 5D ....^c...L5....] 
01E0: DA 3B F6 80 9B 07 E5 86 4B 67 F6 B2 66 DE 81 6C .;......Kg..f..l 
01F0: FF B6 99 D1 06 EF 3A 27 68 8D F2 EE 72 C4 48 64 ......:'h...r.Hd 

] 
*** 
adding as trusted cert: 
    Subject: CN=myname.organization.com, OU=myname.organization.com, O=myname.organization.com, L=myname.organization.com, ST=myname.organization.com, C=US 
    Issuer: C=US, CN=myname.organization.com, ST=myname.organization.com, L=myname.organization.com, EMAILADDRESS=myname.organization.com, OU=myname.organization.com, O=myname.organization.com 
    Algorithm: RSA; Serial number: 0x71c8 
    Valid from Fri Mar 09 13:29:22 EST 2012 until Sat Mar 09 13:29:22 EST 2013 

adding as trusted cert: 
    Subject: C=US, CN=myname.organization.com, ST=myname.organization.com, L=myname.organization.com, EMAILADDRESS=myname.organization.com, OU=myname.organization.com, O=myname.organization.com 
    Issuer: C=US, CN=myname.organization.com, ST=myname.organization.com, L=myname.organization.com, EMAILADDRESS=myname.organization.com, OU=myname.organization.com, O=myname.organization.com 
    Algorithm: RSA; Serial number: 0xc1e2c18cf327ad81 
    Valid from Fri Mar 09 13:29:15 EST 2012 until Sat Mar 09 13:29:15 EST 2013 

trigger seeding of SecureRandom 
done seeding SecureRandom 
trigger seeding of SecureRandom 
done seeding SecureRandom 
Using SSLEngineImpl. 

985 [main] INFO nettyliteserver.ssl.FlexibleErrorSslHandler - handleDownstream 

Das ist, wo es endet. Ich habe die Ausdrucke ein wenig verändert, so dass ich manchmal auch eine weitere Zeile bekomme, den Ausdruck von logger.info ("Verbunden mit" + realRequest.getHost() + ":" + realRequest.getPort() + "" +) realRequest.getUri()); aber ich weiß wirklich nicht, was es zum Abschalten bringt.

Ich versuchte, den netty SSLHandler zu überschreiben, und bei allen öffentlichen Operationen wurde ein Ausdruck hinzugefügt, aber die Methoden close(), channelConnected(), channelDisconnected() usw. werden nie aufgerufen. Weder ist Handshake().

Meine Pipeline eingerichtet ist, einen Händedruck zu tun:

public class HttpSnoopClientPipelineFactory implements ChannelPipelineFactory { 

    public ChannelPipeline getPipeline() throws Exception { 
     // Create a default pipeline implementation. 
     ChannelPipeline pipeline = pipeline(); 

     // Enable HTTPS 

     SSLEngine engine = 
      SecureChatSslContextFactory.getClientContext().createSSLEngine(); 
     engine.setUseClientMode(true); 

     System.out.println("HERE!!!!!!!!!!!!"); 

     pipeline.addLast("ssl", new SslHandler(engine)); 


     pipeline.addLast("codec", new HttpClientCodec()); 

     // Remove the following line if you don't want automatic content decompression. 
     pipeline.addLast("inflater", new HttpContentDecompressor()); 

     // Uncomment the following line if you don't want to handle HttpChunks. 
     //pipeline.addLast("aggregator", new HttpChunkAggregator(1048576)); 

     pipeline.addLast("handler", new HttpSnoopClientHandler()); 
     return pipeline; 
    } 
} 

Mein benutzerdefinierten SSLHandler ist wirklich das gleiche wie die SslHandler der Bibliothek, ich overrode nur die Methoden Ausdrucke hinzufügen, bevor zu der Super-Version zu delegieren.

Es sieht aus wie das einzige, was auf sie genannt wird, ist handleDownstream()

Antwort

2

Sie benötigen SslHandler.handshake() selbst nach dem connect Erfolg zu nennen.

Etwas wie:

future.getChannel().getPipeline(SslHandler.class).handshake(); 

Dies muss in Ihrem ChannelFuture zu erledigen, die von der connect-Methode oder eine SimpleChannelUpstreamHandler Implementierung zurückgegeben wird, die Sie dem ChannelPipeline hinzufügen

+0

Hallo, vielen Dank für die Beantwortung. Ich denke, das ist in meiner Pipeline, obwohl es nicht ausgeführt wird. Meine Pipeline ist jetzt in der Hauptfrage ... – CStepnitz

+0

Das half, obwohl ich tatsächlich mit Code endete, der aussah: 'SslHandler sslHandler = (SslHandler) future.getChannel(). GetPipeline(). Get (" ssl ");' Das andere Problem war, dass das Zeug, das ich lief, in einem Junit-Test war und der Junit-Test vor dem Handshake endete, weil es asynchron war! Hoppla.... – CStepnitz

0

Netty Dokumentation heißt es:

Handshake

Wenn isIssueHandshake() falsch (Standard) ist, müssen Sie sich selbst um rufenden Handshake() kümmern. In den meisten Situationen wurden SslHandler ist im 'Client-Modus' verwendet, die Sie einen Handshake ausgeben möchten, sobald die Verbindung hergestellt wurde. Wenn setIssueHandshake (boolean) auf true gesetzt ist, müssen Sie sich darüber keine Gedanken machen, da der SslHandler dafür sorgen wird.

siehe javadoc

Also, Sie isIssueHandshake auf SslHandler vor estamblishing die Verbindung setzen soll

SslHandler sslHandler = new SslHandler(engine); 
setIssueHandshake(boolean); 
pipeline.addLast("ssl", sslHandler);