I've spent some time refactoring a load-balanced web application in AWS in order to make it end-to-end HTTPS, CloudFront->ALB->EC2. This was mostly just for fun, to see if I could do it. Having jumped through quite a lot of hoops to make it work, I'm now wondering if it's worth upgrading the production infrastructure to work this way. Currently in production it's just HTTPS at the front-end and between CloudFront and ALB, but between the ALB and the EC2's it's plain HTTP.
Are there any actual benefits to using HTTPS between the Application Load Balancer and the EC2's.
I had originally hoped to have it end-to-end HTTP/2, but I couldn't get this to work to the EC2's, so that part has to be HTTP1.1
Some details about the setup.
The EC2's are running IIS, Win2022. I have a Launch Template with UserData that fully configures them including creating the self-signed SSL's for IIS.
The ALB and CloudFront obviously use ACM for the certificates.
The setup seems stable, but I'm not entirely happy about the amount of complexity I've introduced to support the ALB->EC2 HTTPS. It means it now has extra http bindings for the healthcheck, instead of being able to just use a single binding for the traffic and healthcheck.
The deployment pipeline has also become more complex, with an extra step to retrieve an an SSL cert to apply it to the IIS site.
One potential benefit, is that the site itself knows that it's running over a secure connection, so self-referencing URL's will be generated properly by default. However I've mostly found work-arounds for this anyway by manually updating the server variables in the application code.
It seems to be considered a good practice to use end-to-end HTTPS, but I'm not entirely sure why. I don't want to change the production system unless there's some specific benefits to doing so.