-
Notifications
You must be signed in to change notification settings - Fork 10
Very difficult to avoid being upgraded to HTTPS in Chrome Beta #12
Description
We're in the process of launching https://github.com/dadrian/https-upgrade in Chrome. Right now, the feature is enabled for 50% of Chrome Beta, although you can also use it in stable (M113) by enabling #https-first-mode-v2 AND #https-upgrades on chrome://flags. We intend to enable this by default eventually, but we're not there yet.
HTTPS Upgrades optimistically upgrade any HTTP navigation to HTTPS. If HTTPS is unavailable, Chrome falls back to HTTP without an interstitial. The feature is not intended to protect against active adversaries.
Users can opt out of the upgrade feature on specific sites by adding the site to the "Insecure Content" "permission" accessible via chrome://settings/content or via the Page Info (Lock) Icon, and then navigating to an HTTP page on that site.
Putting this all together, what does this mean for NeverSSL?
- Any Omnibox navigation to
neverssl.com, regardless of scheme, gets upgraded to HTTPS. - Rather than serve a RST, NeverSSL sends a redirect to
http://$RANDOM_SUBDOMAIN.neverssl.com - The HTTPS Upgrades feature intercepts the redirect to HTTP, and upgrades it to HTTPS.
- NeverSSL happily serves
https://$RANDOM_SUBDOMAIN.neverssl.comand the user is stuck on HTTPS - (optional, terrible workaround) The user clicks Page Info (Lock Icon) -> Site Settings -> Insecure Content -> Allowed
- The user manually changes the scheme back to HTTP and forces a navigation (hits enter)
- NeverSSL is now accessible over HTTP
Certainly, the UX for disabling upgrades is not good, although it's not entirely clear if there's any good options. What I don't understand is why NeverSSL supports HTTPS at all? I understand you did it to work around the schemeless Omnibox upgrades to HTTPS that landed a couple years ago, but wouldn't it work equally well to have port 443 return a RST, so that Chrome and other browsers immediately fall back to HTTP?
Alternatively, is there some way to serve a RST on the $RANDOM_SUBDOMAIN.neverssl.com on port 443, so that the redirect continues to stay on HTTP?