Re: SSL handshake crash
Ingela Anderton Andin <[email protected]> Fri, 25 Dec 2015 11:54:58 +0000
| Newsgroups | gmane.comp.lang.erlang.bugs |
|---|---|
| Message-ID | <[email protected]> |
--===============7943957748793367798== Content-Language: sv-SE Content-Type: multipart/alternative; boundary="_000_B3CF142BE0AC334585C9F2076B18F8D2532C1B4EESESSMB205erics_" --_000_B3CF142BE0AC334585C9F2076B18F8D2532C1B4EESESSMB205erics_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Hi! From ssl users guide "Ensure active is set to false before trying to upgrade a connection to an= SSL connection, otherwise SSL handshake messages can be delivered to the w= rong process." Regards Ingela Erlang/OTP team - Ericsson AB ________________________________ Fr=E5n: [email protected] [[email protected]] f= =F6r Danil Zagoskin [[email protected]] Skickat: den 24 december 2015 10:22 Till: Ulf Wiger Kopia: [email protected] =C4mne: Re: [erlang-bugs] SSL handshake crash Hi! I have the same issue, but not so often. It seems to appear only when upgrading plain socket to TLS (XMPP starttls i= n my case). Possibly it's some kind of race condition when client sends TLS hello befor= e server does ssl_accept(). Maybe some active/passive socket mode issue. If you control the client code, could you add some sleep before starttls an= d check if that fixes the issue? On Wed, Dec 23, 2015 at 8:38 PM, Ulf Wiger <[email protected]<mailto:ulf@wiger.= net>> wrote: Hmm=85 I send this to erlang-bugs, but it didn=92t seem to get through. When connecting some Android software to an Erlang node using TLS, we somet= imes (about 1 in 3 or 4 times) get the following errors: 2015-12-22 15:31:00.772 [error] <0.210.0> gen_fsm <0.210.0> in state hello = terminated with reason: no function clause matching ssl_handshake:update_ha= ndshake_history(undefined, <<1,0,0,175,3,1,86,121,221,42,209,19,198,53,3,42= ,92,9,16,158,197,5,169,29,247,96,14,32,123,176,...>>) line 450 15:31:00.783<dlink_tls_conn/327>dlink_tls_conn:terminate(): Reason: {{funct= ion_clause,[{ssl_handshake,update_handshake_history,[undefined,<<1,0,0,175,= 3,1,86,121,221,42,209,19,198,53,3,42,92,9,16,158,197,5,169,29,247,96,14,32,= 123,176,109,210,170,150,204,23,32,228,0,0,70,0,4,0,5,0,47,0,53,192,2,192,4,= 192,5,192,12,192,14,192,15,192,7,192,9,192,10,192,17,192,19,192,20,0,51,0,5= 7,0,50,0,56,0,10,192,3,192,13,192,8,192,18,0,22,0,19,0,9,0,21,0,18,0,3,0,8,= 0,20,0,17,0,255,1,0,0,64,0,11,0,4,3,0,1,2,0,10,0,52,0,50,0,14,0,13,0,25,0,1= 1,0,12,0,24,0,9,0,10,0,22,0,23,0,8,0,6,0,7,0,20,0,21,0,4,0,5,0,18,0,19,0,1,= 0,2,0,3,0,15,0,16,0,17>>],[{file,"ssl_handshake.erl"},{line,450}]},{tls_con= nection,'-next_state/4-fun-0-',3,[{file,"tls_connection.erl"},{line,458}]},= {tls_connection,next_state,4,[{file,"tls_connection.erl"},{line,467}]},{gen= _fsm,handle_msg,7,[{file,"gen_fsm.erl"},{line,518}]},{proc_lib,init_p_do_ap= ply,3,[{file,"proc_lib.erl"},{line,240}]}]},{gen_fsm,sync_send_all_state_ev= ent,[<0.210.0>,{start,infinity},infinity]}} 2015-12-22 15:31:00.784 [error] <0.210.0> CRASH REPORT Process <0.210.0> wi= th 0 neighbours exited with reason: no function clause matching ssl_handsha= ke:update_handshake_history(undefined, <<1,0,0,175,3,1,86,121,221,42,209,19= ,198,53,3,42,92,9,16,158,197,5,169,29,247,96,14,32,123,176,...>>) line 450 = in gen_fsm:terminate/7 line 626 2015-12-22 15:31:00.785 [error] <0.209.0> gen_server <0.209.0> terminated w= ith reason: {{function_clause,[{ssl_handshake,update_handshake_history,[und= efined,<<1,0,0,175,3,1,86,121,221,42,209,19,198,53,3,42,92,9,16,158,197,5,1= 69,29,247,96,14,32,123,176,109,210,170,150,204,23,32,228,0,0,70,0,4,0,5,0,4= 7,0,53,192,2,192,4,192,5,192,12,192,14,192,15,192,7,192,9,192,10,192,17,192= ,19,192,20,0,51,0,57,0,50,0,56,0,10,192,3,192,13,192,8,192,18,0,22,0,19,0,9= ,0,21,0,18,0,3,0,8,0,20,0,17,0,255,1,0,0,64,0,11,0,4,3,0,1,2,0,10,0,52,0,50= ,0,14,0,13,0,25,0,11,0,12,0,24,0,9,0,10,0,22,0,23,0,8,0,...>>],...},...]},.= ..} in gen_fsm:sync_send_all_state_event/3 line 257 2015-12-22 15:31:00.786 [error] <0.209.0> CRASH REPORT Process <0.209.0> wi= th 0 neighbours exited with reason: {{function_clause,[{ssl_handshake,updat= e_handshake_history,[undefined,<<1,0,0,175,3,1,86,121,221,42,209,19,198,53,= 3,42,92,9,16,158,197,5,169,29,247,96,14,32,123,176,109,210,170,150,204,23,3= 2,228,0,0,70,0,4,0,5,0,47,0,53,192,2,192,4,192,5,192,12,192,14,192,15,192,7= ,192,9,192,10,192,17,192,19,192,20,0,51,0,57,0,50,0,56,0,10,192,3,192,13,19= 2,8,192,18,0,22,0,19,0,9,0,21,0,18,0,3,0,8,0,20,0,17,0,255,1,0,0,64,0,11,0,= 4,3,0,1,2,0,10,0,52,0,50,0,14,0,13,0,25,0,11,0,12,0,24,0,9,0,10,0,22,0,23,0= ,8,0,...>>],...},...]},...} in gen_server:terminate/7 line 826 2015-12-22 15:31:00.787 [error] <0.109.0> Supervisor tls_connection_sup had= child undefined started with {tls_connection,start_link,undefined} at <0.2= 10.0> exit with reason no function clause matching ssl_handshake:update_han= dshake_history(undefined, <<1,0,0,175,3,1,86,121,221,42,209,19,198,53,3,42,= 92,9,16,158,197,5,169,29,247,96,14,32,123,176,...>>) line 450 in context ch= ild_terminated We run OTP Erlang/OTP 18 [erts-7.2] with ssl-7.2, and the erlang side has t= he following options: [{verify,verify_peer}, {certfile,"/home/.../device_cert.crt=94}, {keyfile,"/home/.../device_key.pem=94}, {cacertfile,"/home/.../root_cert.crt=94}, {verify_fun,{#Fun<dlink_tls_conn.65.24728257>,{'RSAPublicKey=92,...}}}, {partial_chain,#Fun<dlink_tls_conn.64.24728257>}] Basically, the verify_fun validates a self-signed cert https://github.com/PDXostc/rvi_core/blob/develop/components/dlink_tls/src/d= link_tls_conn.erl#L393 and the partial_chain fun most likely does much less than it should https://github.com/PDXostc/rvi_core/blob/develop/components/dlink_tls/src/d= link_tls_conn.erl#L421 On the Android side, we=92re using Android 4.4.2 (API 19). It feels like a timing-related problem on the erlang side. Let me know if you need more information. BR, Ulf W _______________________________________________ erlang-bugs mailing list [email protected]<mailto:[email protected]> http://erlang.org/mailman/listinfo/erlang-bugs -- Danil Zagoskin | [email protected]<mailto:[email protected]> --_000_B3CF142BE0AC334585C9F2076B18F8D2532C1B4EESESSMB205erics_ Content-Type: text/html; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable <html dir=3D"ltr"> <head> <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DWindows-1= 252"> <style id=3D"owaParaStyle">P { MARGIN-BOTTOM: 0px; MARGIN-TOP: 0px } </style> </head> <body fPStyle=3D"1" ocsi=3D"0"> <div style=3D"direction: ltr;font-family: Tahoma;color: #000000;font-size: = 10pt;"> <p>Hi!</p> <p> </p> <p>From ssl users guide</p> <p> </p> <p> "Ensure active is set to false before trying to upgrade a con= nection to an SSL connection, otherwise SSL handshake messages can be deliv= ered to the wrong process."</p> <p> </p> <p>Regards Ingela Erlang/OTP team - Ericsson AB</p> <div style=3D"FONT-SIZE: 16px; FONT-FAMILY: Times New Roman; COLOR: #000000= "> <hr tabindex=3D"-1"> <div id=3D"divRpF636945" style=3D"DIRECTION: ltr"><font color=3D"#000000" s= ize=3D"2" face=3D"Tahoma"><b>Fr=E5n:</b> [email protected] [er= [email protected]] f=F6r Danil Zagoskin [[email protected]]<br> <b>Skickat:</b> den 24 december 2015 10:22<br> <b>Till:</b> Ulf Wiger<br> <b>Kopia:</b> [email protected]<br> <b>=C4mne:</b> Re: [erlang-bugs] SSL handshake crash<br> </font><br> </div> <div></div> <div> <div dir=3D"ltr">Hi! <div><br> </div> <div>I have the same issue, but not so often.</div> <div>It seems to appear only when upgrading plain socket to TLS (XMPP start= tls in my case).</div> <div><br> </div> <div>Possibly it's some kind of race condition when client sends TLS hello = before server does ssl_accept(). Maybe some active/passive socket mode issu= e.</div> <div><br> </div> <div>If you control the client code, could you add some sleep before startt= ls and check if that fixes the issue?</div> </div> <div class=3D"gmail_extra"><br> <div class=3D"gmail_quote">On Wed, Dec 23, 2015 at 8:38 PM, Ulf Wiger <span= dir=3D"ltr"> <<a href=3D"mailto:[email protected]" target=3D"_blank">[email protected]</a>>= ;</span> wrote:<br> <blockquote class=3D"gmail_quote" style=3D"PADDING-LEFT: 1ex; MARGIN: 0px 0= px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"> <div dir=3D"ltr"><span style=3D"FONT-SIZE: 12px; FONT-FAMILY: Helvetica; CO= LOR: rgb(0,0,0)">Hmm=85 I send this to erlang-bugs, but it didn=92t seem to= get through.</span> <div style=3D"FONT-SIZE: 12px; FONT-FAMILY: Helvetica; COLOR: rgb(0,0,0)"><= br> </div> <div style=3D"FONT-SIZE: 12px; FONT-FAMILY: Helvetica; COLOR: rgb(0,0,0)">W= hen connecting some Android software to an Erlang node using TLS, we someti= mes (about 1 in 3 or 4 times) get the following errors:<br> <br> 2015-12-22 15:31:00.772 [error] <0.210.0> gen_fsm <0.210.0> in = state hello terminated with reason: no function clause matching ssl_handsha= ke:update_handshake_history(undefined, <<1,0,0,175,3,1,86,121,22= 1,42,209,19,198,53,3,42,92,9,16,158,197,5,169,29,247,96,14,32,123,176,...&g= t;>) line 450<br> <br> 15:31:00.783<dlink_tls_conn/327>dlink_tls_conn:terminate(): Reason: {= {function_clause,[{ssl_handshake,update_handshake_history,[undefined,<&l= t;1,0,0,175,3,1,86,121,221,42,209,19,198,53,3,42,92,9,16,158,197,5,169,29,2= 47,96,14,32,123,176,109,210,170,150,204,23,32,228,0,0,70,0,4,0,5,0,47,0,53,= 192,2,192,4,192,5,192,12,192,14,192,15,192,7,192,9,192,10,192,17,192,19,192= ,20,0,51,0,57,0,50,0,56,0,10,192,3,192,13,192,8,192,18,0,22,0,19,0,9,0,21,0= ,18,0,3,0,8,0,20,0,17,0,255,1,0,0,64,0,11,0,4,3,0,1,2,0,10,0,52,0,50,0,14,0= ,13,0,25,0,11,0,12,0,24,0,9,0,10,0,22,0,23,0,8,0,6,0,7,0,20,0,21,0,4,0,5,0,= 18,0,19,0,1,0,2,0,3,0,15,0,16,0,17>>],[{file,"ssl_handshake.erl&= quot;},{line,450}]},{tls_connection,'-next_state/4-fun-0-',3,[{file,"t= ls_connection.erl"},{line,458}]},{tls_connection,next_state,4,[{file,&= quot;tls_connection.erl"},{line,467}]},{gen_fsm,handle_msg,7,[{file,&q= uot;gen_fsm.erl"},{line,518}]},{proc_lib,init_p_do_apply,3,[{file,&quo= t;proc_lib.erl"},{line,240}]}]},{gen_fsm,sync_send_all_state_event,[&l= t;0.210.0>,{start,infinity},infinity]}} <br> <br> 2015-12-22 15:31:00.784 [error] <0.210.0> CRASH REPORT Process <0.= 210.0> with 0 neighbours exited with reason: no function clause matching= ssl_handshake:update_handshake_history(undefined, <<1,0,0,175,3= ,1,86,121,221,42,209,19,198,53,3,42,92,9,16,158,197,5,169,29,247,96,14,32,1= 23,176,...>>) line 450 in gen_fsm:terminate/7 line 626<br> <br> 2015-12-22 15:31:00.785 [error] <0.209.0> gen_server <0.209.0> = terminated with reason: {{function_clause,[{ssl_handshake,update_handshake_= history,[undefined,<<1,0,0,175,3,1,86,121,221,42,209,19,198,53,3,42,9= 2,9,16,158,197,5,169,29,247,96,14,32,123,176,109,210,170,150,204,23,32,228,= 0,0,70,0,4,0,5,0,47,0,53,192,2,192,4,192,5,192,12,192,14,192,15,192,7,192,9= ,192,10,192,17,192,19,192,20,0,51,0,57,0,50,0,56,0,10,192,3,192,13,192,8,19= 2,18,0,22,0,19,0,9,0,21,0,18,0,3,0,8,0,20,0,17,0,255,1,0,0,64,0,11,0,4,3,0,= 1,2,0,10,0,52,0,50,0,14,0,13,0,25,0,11,0,12,0,24,0,9,0,10,0,22,0,23,0,8,0,.= ..>>],...},...]},...} in gen_fsm:sync_send_all_state_event/3 line 257<br> <br> 2015-12-22 15:31:00.786 [error] <0.209.0> CRASH REPORT Process <0.= 209.0> with 0 neighbours exited with reason: {{function_clause,[{ssl_han= dshake,update_handshake_history,[undefined,<<1,0,0,175,3,1,86,121,221= ,42,209,19,198,53,3,42,92,9,16,158,197,5,169,29,247,96,14,32,123,176,109,21= 0,170,150,204,23,32,228,0,0,70,0,4,0,5,0,47,0,53,192,2,192,4,192,5,192,12,1= 92,14,192,15,192,7,192,9,192,10,192,17,192,19,192,20,0,51,0,57,0,50,0,56,0,= 10,192,3,192,13,192,8,192,18,0,22,0,19,0,9,0,21,0,18,0,3,0,8,0,20,0,17,0,25= 5,1,0,0,64,0,11,0,4,3,0,1,2,0,10,0,52,0,50,0,14,0,13,0,25,0,11,0,12,0,24,0,= 9,0,10,0,22,0,23,0,8,0,...>>],...},...]},...} in gen_server:terminate/7 line 826<br> <br> 2015-12-22 15:31:00.787 [error] <0.109.0> Supervisor tls_connection_s= up had child undefined started with {tls_connection,start_link,undefined} a= t <0.210.0> exit with reason no function clause matching ssl_han= dshake:update_handshake_history(undefined, <<1,0,0,175,3,1,86,121,221= ,42,209,19,198,53,3,42,92,9,16,158,197,5,169,29,247,96,14,32,123,176,...>= ;>) line 450 in context child_terminated<br> <br> <br> We run OTP Erlang/OTP 18 [erts-7.2] with ssl-7.2, and the erlang side has t= he following options:<br> <br> [{verify,verify_peer},<br> {certfile,"/home/.../device_cert.crt=94},<br> {keyfile,"/home/.../device_key.pem=94},<br> {cacertfile,"/home/.../root_cert.crt=94},<br> {verify_fun,{#Fun<dlink_tls_conn.65.24728257>,{'RSAPublicKey=92,...}}= },<br> {partial_chain,#Fun<dlink_tls_conn.64.24728257>}]<br> <br> Basically, the verify_fun validates a self-signed cert<br> <a href=3D"https://github.com/PDXostc/rvi_core/blob/develop/components/dlin= k_tls/src/dlink_tls_conn.erl#L393" target=3D"_blank">https://github.com/PDX= ostc/rvi_core/blob/develop/components/dlink_tls/src/dlink_tls_conn.erl#L393= </a><br> <br> and the partial_chain fun most likely does much less than it should<br> <a href=3D"https://github.com/PDXostc/rvi_core/blob/develop/components/dlin= k_tls/src/dlink_tls_conn.erl#L421" target=3D"_blank">https://github.com/PDX= ostc/rvi_core/blob/develop/components/dlink_tls/src/dlink_tls_conn.erl#L421= </a><br> <br> On the Android side, we=92re using Android 4.4.2 (API 19).<br> <br> It feels like a timing-related problem on the erlang side.<br> <br> Let me know if you need more information.<br> <br> BR,<br> Ulf W</div> </div> <br> _______________________________________________<br> erlang-bugs mailing list<br> <a href=3D"mailto:[email protected]" target=3D"_blank">erlang-bugs@erl= ang.org</a><br> <a href=3D"http://erlang.org/mailman/listinfo/erlang-bugs" rel=3D"noreferre= r" target=3D"_blank">http://erlang.org/mailman/listinfo/erlang-bugs</a><br> <br> </blockquote> </div> <br> <br clear=3D"all"> <div><br> </div> -- <br> <div class=3D"gmail_signature"> <div dir=3D"ltr"> <div><font face=3D"'courier new', monospace">Danil Zagoskin | <a href=3D"ma= ilto:[email protected]" target=3D"_blank"> [email protected]</a></font></div> </div> </div> </div> </div> </div> </div> </body> </html> --_000_B3CF142BE0AC334585C9F2076B18F8D2532C1B4EESESSMB205erics_-- --===============7943957748793367798== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ erlang-bugs mailing list [email protected] http://erlang.org/mailman/listinfo/erlang-bugs --===============7943957748793367798==--