In HTTPS request , Request.IsSecureConnection return false In HTTPS request , Request.IsSecureConnection return false asp.net asp.net

In HTTPS request , Request.IsSecureConnection return false


To reduce costs I suspect that the SSL certificate is installed on the TMG Gateway and that this gateway is simply rewriting the request to standard HTTP when passing it to the actual web server. So by the time the request hits IIS and your web application it is a standard plain HTTP request.


This tripped my up after deploying to Amazon's Elastic Beanstalk environment. I couldn't see any way to get the load-balancer to allow the SSL request straight through to the server. Instead it was always terminating the SSL at the load-balancer and passing plain http back to the server.

I found this documentation: Elastic Load Balancing Concepts - X-Forwarded Headers.

Essentially the load-balancer injects a number of additional HTTP Headers into each request before forwarding it to the back-end server. The most relevant one is X-Forwarded-Proto which tracks the protocol used to connect from the client's browser to the load-balancer. This can be checked like so:

var loadbalancerReceivedSSLRequest = string.Equals(Request.Headers["X-Forwarded-Proto"], "https");var serverReceivedSSLRequest = Request.IsSecureConnection;if (loadbalancerReceivedSSLRequest || serverReceivedSSLRequest){    // SSL in use.}else{    // SSL not in use.}


Well another way to check is to check the port

if(context.Request.Url.Port == 443)

Note: check which port is used for secure connections, usually it is 443