Search code examples
google-chromefiddler

Chrome:The website uses HSTS. Network errors...this page will probably work later


I am developing against localhost. This morning right after I used fiddler I started getting this error on chrome (works correctly in firefox)

"You cannot visit localhost right now because the website uses HSTS. Network errors and attacks are usually temporary, so this page will probably work later." enter image description here

Now localhost works in chrome only if fiddler is running. I already made sure the proxy redirects that fiddler makes are corrected when fiddler shuts down.

I also tried importing the certificate to my trusted root and restarting the browser (and also the machine).


Solution

  • One very quick way around this is, when you're viewing the "Your connection is not private" screen:

    type badidea

    type thisisunsafe (credit to The Java Guy for finding the new passphrase)

    That will allow the security exception when Chrome is otherwise not allowing the exception to be set via clickthrough, e.g. for this HSTS case.

    This is only recommended for local connections and local-network virtual machines, obviously, but it has the advantage of working for VMs being used for development (e.g. on port-forwarded local connections) and not just direct localhost connections.

    Note: the Chrome developers have changed this passphrase in the past, and may do so again. If badidea ceases to work, please leave a note here if you learn the new passphrase. I'll try to do the same.

    Edit: as of 30 Jan 2018 this passphrase appears to no longer work.

    If I can hunt down a new one I'll post it here. In the meantime I'm going to take the time to set up a self-signed certificate using the method outlined in this stackoverflow post:

    How to create a self-signed certificate with openssl?

    Edit: as of 1 Mar 2018 and Chrome Version 64.0.3282.186 this passphrase works again for HSTS-related blocks on .dev sites.

    Edit: as of 9 Mar 2018 and Chrome Version 65.0.3325.146 the badidea passphrase no longer works.

    Edit 2: the trouble with self-signed certificates seems to be that, with security standards tightening across the board these days, they cause their own errors to be thrown (nginx, for example, refuses to load an SSL/TLS cert that includes a self-signed cert in the chain of authority, by default).

    The solution I'm going with now is to swap out the top-level domain on all my .app and .dev development sites with .test or .localhost. Chrome and Safari will no longer accept insecure connections to standard top-level domains (including .app).

    The current list of standard top-level domains can be found in this Wikipedia article, including special-use domains:

    Wikipedia: List of Internet Top Level Domains: Special Use Domains

    These top-level domains seem to be exempt from the new https-only restrictions:

    • .local
    • .localhost
    • .test
    • (any custom/non-standard top-level domain)

    See the answer and link from codinghands to the original question for more information:

    answer from codinghands