@@ -607,6 +607,9 @@ public void onException(TcpChannel channel, Exception e) {
607607 BytesArray message = new BytesArray (e .getMessage ().getBytes (StandardCharsets .UTF_8 ));
608608 outboundHandler .sendBytes (channel , message , ActionListener .wrap (() -> CloseableChannel .closeChannel (channel )));
609609 }
610+ } else if (e instanceof StreamCorruptedException ) {
611+ logger .warn (() -> new ParameterizedMessage ("{}, [{}], closing connection" , e .getMessage (), channel ));
612+ CloseableChannel .closeChannel (channel );
610613 } else {
611614 logger .warn (() -> new ParameterizedMessage ("exception caught on transport layer [{}], closing connection" , channel ), e );
612615 // close the channel, which will cause a node to be disconnected if relevant
@@ -738,11 +741,17 @@ private static int readHeaderBuffer(BytesReference headerBuffer) throws IOExcept
738741 throw new TcpTransport .HttpOnTransportException ("This is not an HTTP port" );
739742 }
740743
741- throw new StreamCorruptedException ("invalid internal transport message format, got ("
742- + Integer .toHexString (headerBuffer .get (0 ) & 0xFF ) + ","
743- + Integer .toHexString (headerBuffer .get (1 ) & 0xFF ) + ","
744- + Integer .toHexString (headerBuffer .get (2 ) & 0xFF ) + ","
745- + Integer .toHexString (headerBuffer .get (3 ) & 0xFF ) + ")" );
744+ String firstBytes = "("
745+ + Integer .toHexString (headerBuffer .get (0 ) & 0xFF ) + ","
746+ + Integer .toHexString (headerBuffer .get (1 ) & 0xFF ) + ","
747+ + Integer .toHexString (headerBuffer .get (2 ) & 0xFF ) + ","
748+ + Integer .toHexString (headerBuffer .get (3 ) & 0xFF ) + ")" ;
749+
750+ if (appearsToBeTLS (headerBuffer )) {
751+ throw new StreamCorruptedException ("SSL/TLS request received but SSL/TLS is not enabled on this node, got " + firstBytes );
752+ }
753+
754+ throw new StreamCorruptedException ("invalid internal transport message format, got " + firstBytes );
746755 }
747756 final int messageLength = headerBuffer .getInt (TcpHeader .MARKER_BYTES_SIZE );
748757
@@ -775,6 +784,10 @@ private static boolean appearsToBeHTTP(BytesReference headerBuffer) {
775784 bufferStartsWith (headerBuffer , "TRACE" );
776785 }
777786
787+ private static boolean appearsToBeTLS (BytesReference headerBuffer ) {
788+ return headerBuffer .get (0 ) == 0x16 && headerBuffer .get (1 ) == 0x03 ;
789+ }
790+
778791 private static boolean bufferStartsWith (BytesReference buffer , String method ) {
779792 char [] chars = method .toCharArray ();
780793 for (int i = 0 ; i < chars .length ; i ++) {
0 commit comments