Search code examples
.netsslherokuparse-platform

Heroku apps not working with https after TLS v1.0/1.1 End of life schedule


I have a couple of applications deployed with parseplaform. The applications are worked until yesterday but from today I have received that systems do not work. After spending sometimes it seems Heroku not accepting requests from the parse app.

Parse server cloud function apps are deployed with Heroku which enabled ACM(Automatic certification management) which is currently TLS v1.2. The domain name, for example, https://my-app.herokuapp.com/parse.

Also, my CMS app is deployed with Appharbor which is written in C# .net framework. This is also using the TLS v1.2 certification.

I have found that Heroku is no longer accepting TLS v.1.0/1.1. After that change only these apps has been stopped working.

In my CMS application, I have mentioned server as follow:

<add key="ParseServer" value="https://my-app.herokuapp.com/parse/" />

It is not working but when changing it to HTTP like the following it starts working:

<add key="ParseServer" value="http://my-app.herokuapp.com/parse/" />

When trying a request from CMS, for example when login like follows:

var parseUser = await ParseUser.LogInAsync(username, password);

it produces an error following:

System.NullReferenceException: 'Object reference not set to an instance of an object.'

Stacktrace:

at Parse.Internal.HttpClient.<>c__DisplayClass16.<ExecuteAsync>b__d(Task`1 t)
   at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()
   at Parse.Internal.InternalExtensions.<>c__DisplayClass7`1.<OnSuccess>b__6(Task t)
   at System.Threading.Tasks.ContinuationResultTaskFromTask`1.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()
   at Parse.Internal.InternalExtensions.<>c__DisplayClass7`1.<OnSuccess>b__6(Task t)
   at System.Threading.Tasks.ContinuationResultTaskFromTask`1.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()
   at Parse.Internal.InternalExtensions.<>c__DisplayClass7`1.<OnSuccess>b__6(Task t)
   at System.Threading.Tasks.ContinuationResultTaskFromTask`1.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at Senterapps.Web.Controllers.LoginController.<Index>d__5.MoveNext() in \path\project\Controller.cs:line 555

Is there something I need to check beyond this? What I am doing wrong? Thanks in advance :)


Solution

  • The issue was turned out as a protocol issue with my .net framework 4.5. So the actual issue with applications that primarily do not support TLSv1.2. To support that I've added the following override to my Global.asax.cs:

    ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;
    

    Got the idea while reading this article on the Microsft blog. In the future need to update the .net frameworks and dependencies according to it. until that this is the workaround.