We’re having an issue when upgrading Tomcat from 8.5.50 to 8.5.51. Since moving to this version, requests sent to the http port are failing with a 400 error code(bad request). The server.xml is configured to redirect the http port to the https port. This has worked for years and did not start failing until the upgrade. Below is the connector config and the java class used to send a test transaction to the server.
I’ve searched the change log and the only change I can see that might cause this is the Bug fix for bug 63966 – Charset of TLS message is hard coded to ISO-8859-1. This bug fix was introduced into 8.5.51. The reason I believe this might be the reason is when we would send this request to tomcat 8.5.50 the reply Content-Type would look like this: Content-Type: text/plain;charset=ISO-8859-1 With tomcat 8.5.51, I get this: Content-Type: text/html;charset=utf-8 Any ideas why I’m getting the 400 error when upgrading to 8.5.51 and beyond ? Connector config: <Connector port="5555" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="7777" /> <Connector port="7777" protocol="HTTP/1.1" SSLEnabled="true" scheme="https" secure="true" ciphers="TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" clientAuth="false" sslProtocol="TLS" sslEnabledProtocols="TLSv1.2" keyAlias="myKey" keystore="NONE" keystorePass="password" keystoreType="PKCS11" keystoreProvider="myprovider" enableLookups="false" server="server" "/> Java class used to send the test transaction: package com.testing; import java.io.*; import java.net.*; import java.util.Date; import java.text.DateFormat; import java.text.SimpleDateFormat; public class RunTestTran{ public RunTestTran() { } public static void main(String [] args){ RunTestTran recordProcessorTest = new RunTestTran(); recordProcessorTest.runTran("localhost", 5555, "/requestProcessor/rp"); } private void runTran(String ip, int port, String appName){ Socket socket = null; PrintWriter out = null; BufferedReader in = null; String dataToSend = ""; //Create socket connection try { socket = new Socket(ip, port); out = new PrintWriter(socket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); } catch (Exception e) { System.out.println("Exception:" + e.toString() ); System.exit(1); } DateFormat dateFormat = new SimpleDateFormat("MMddHHmmsss"); //get current date time with Date() to create a 11 digit tran id Date date = new Date(); String tranId = dateFormat.format(date); String PRIMER_TRAN = " V " + tranId + "9999999999000000000JANE DOE 100 Redwood Shores Pkwy Redwood City CA94065000000000000000 PRIMER TRAN"; try{ dataToSend = URLEncoder.encode("inputRecord", "UTF-8") + "=" + URLEncoder.encode(PRIMER_TRAN, "UTF-8"); }catch(Exception e){ System.out.println("Exception caught!" + e.toString()); } // send message StringBuffer sb = new StringBuffer(); sb.append("POST /" + appName + "/wrp HTTP/1.1\r\n"); // Try connection close-- see if it does close sb.append("Connection: close\r\n"); sb.append("Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword\n"); sb.append("Accept-Language: en-us\n"); sb.append("Accept-Encoding: gzip, deflate\n"); sb.append("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\n"); // Authorization sb.append("Authorization: Basic DK34a3RvbWVydGVzddkK7WCx\n"); sb.append("Host: " + ip + ":" + port + "\n"); sb.append("Content-Length: " + dataToSend.length() + "\r\n"); sb.append("Content-Type: application/x-www-form-urlencoded\r\n"); sb.append("\r\n"); sb.append(dataToSend); // Send data String text = sb.toString(); out.println(text); System.out.println("\nText sent " + text.length() + " bytes:"); System.out.println(text + "\n\n"); try{ String gotBack1 = in.readLine(); System.out.println("Text received:" + gotBack1 ); String gotBack = null; while ( (gotBack = in.readLine()) != null){ System.out.println("Text received:" + gotBack ); if ( (gotBack.indexOf("TQ!") != -1)){ break; } } } catch (Exception e){ System.out.println("Read failed! " + e.toString()); System.exit(1); } } }