On 10/09/2020 21:23, Brian Harris wrote:
> Thanks Christopher.  You just nailed it buddy.  I changed them all to \r\n
> and it got a 200.  I was completely overlooking that as it had never
caused
> a problem before.  Something in 8.5.51 would not allow that anymore.

That is the fix for CVE-2020-1935

See http://tomcat.apache.org/security-8.html#Fixed_in_Apache_Tomcat_8.5.51

It isn't explicit in the changelog because it is security related and
the change log is public before the release is available.

Mark


>
> On Thu, Sep 10, 2020 at 4:07 PM Christopher Schultz <
> ch...@christopherschultz.net> wrote:
>
> Brian,
> 
> On 9/10/20 13:13, Brian Harris wrote:
>>>> 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_AE
> S_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_ECD
> SA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECD
> HE_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);
>>>>
>>>> }
>>>>
>>>> } }
> 
> Half your headers have \n line-terminators rather than \r\n
> line-terminators. Is that intentional? It's certianly not /legal/.
> 
> -chris
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>
>>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to