现代浏览器都有了强制网站使用https的习惯,不然就在地址栏上显示红色的不安全标记。网站需要设定https访问,但有时候浏览器强制地址为https也带来很多不便。因此有了下面的方法。

网站强制https访问

  • 80端口跳转443端口
    nginx.conf中设定(片段):
    1
    2
    3
    4
    5
    6
    server {
    listen 80;
    listen [::]:80;
    server_name domain.com;
    return 301 https://$host$request_uri;
    }
  • 设置HSTS
    HTTP Strict-Transport-Security(通常简称为 HSTS)响应标头用来通知浏览器应该只通过 HTTPS 访问该站点,并且以后使用 HTTP 访问该站点的所有尝试都应自动重定向到 HTTPS。
    网站通过 HTTP Strict Transport Security 标头通知浏览器,这个网站禁止使用 HTTP 方式加载,并且浏览器应该自动把所有尝试使用 HTTP 的请求自动替换为 HTTPS 请求。
    1
    2
    Strict-Transport-Security: max-age=<expire-time>
    Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
    expire-time=31536000秒时刚好为一年。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name www.qs100371.top qs100371.top;
    root /usr/share/nginx/html;

    ssl_certificate "/root/ssl/_.qs100371.top.crt";
    ssl_certificate_key "/root/ssl/_.qs100371.top.key";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 10m;
    ssl_ciphers PROFILE=SYSTEM;
    ssl_prefer_server_ciphers on;
    # add_header Strict-Transport-Security "max-age=0; includeSubDomains" always;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    }
    备注:Strict-Transport-Security 标头在通过 HTTP 访问时会被浏览器忽略。只有在网站通过 HTTPS 访问并且没有证书错误时,浏览器才认为网站支持 HTTPS,然后遵守 Strict-Transport-Security 标头。浏览器这样做是因为攻击者可以拦截到站点的 HTTP 连接,然后注入或者删除标头。

浏览器端取消强制https

很多时候又需要访问http链接,浏览器强制使用https也带来了不便。

  • edge,chrome或maxthon
    地址栏里输入,
    edge://net-internals
    chrome://net-internals
    mx://net-internals
    点击左侧Domain Security Policy,

    Add HSTS domain添加域名,
    Query HSTS/PKP domain查询域名,
    域名有记录的会显示很长的文字。

    Delete domain security policies删除域名记录。
    输入域名则从强制名单中删除。
  • firefox
    地址栏输入,
    about:config
    点击“我了解此风险”按钮,输入首选项“security.enterprise_roots.enabled”,把值设置为 true,清除浏览器缓存并重启浏览器。