Enter your search

Using secure sessions behind an HTTP proxy

Making things more secure

GoSquared is served entirely via HTTPS, so it was a logical and easy decision to modify our user sessions to use secure cookies. A couple of lines of configuration later, and we were good to go.

Not quite.

We use Node.js extensively, and Connect.session, which is used by Express, will refuse to set secure cookies when the connection isn’t encrypted (req.connection.encrypted) unless the option of proxy is set to true and the x-forwarded-proto is https. This is not the case with standard secure cookies, but it’s been coded into Connect probably for security reasons.

Why does this matter? Isn’t everything is served via https anyway?

Of course, but everything is also served via an ELB which proxies to our nginx cluster, which in turn proxies to our apps servers via internal http connections. The fix is trivial as it’s easy to set/modify headers in nginx, making the header validation in Connect quite pointless – proxy_set_header x-forwarded-proto https;.

In completely unrelated news, sessions on GoSquared now use secure + httponly cookies!

PS. remember to add proxy_set_header Host $host; too if you need the host header to be forwarded too, it appears to get lost otherwise.

Written by
Lead developer at GoSquared for integrations, partnerships and the API. Works on pretty much everything.

You May Also Like

Group 5 Created with Sketch. Group 11 Created with Sketch. CLOSE ICON Created with Sketch. icon-microphone Group 9 Created with Sketch. CLOSE ICON Created with Sketch. SEARCH ICON Created with Sketch. Group 4 Created with Sketch. Path Created with Sketch. Group 5 Created with Sketch.