RSS订阅专注X86/ARM架构技术
博客交流QQ群693563350 赞助本站
你现在的位置:网站首页 / 建站 / 正文内容

HTTP HSTS协议和nginx如何配置HSTS

15501 建站 | 2017年03月29日

Netcraft 公司最近公布了他们检测SSL/TLS网站的研究,并指出只有仅仅5%的用户正确执行了HTTP严格传输安全HSTS。本文介绍nginx如何配置HSTS。


什么是HSTS

HTTPS(SSL和TLS)确保用户和网站通讯过程中安全,使攻击者难于拦截、修改和假冒。当用户手动输入域名或http://链接,该网站的第一个请求是未加密的,使用普通的http。最安全的网站立即发送回一个重定向使用户引向到https连接,然而,中间人攻击者可能会攻击拦截初始的http请求,从而控制用户后续的回话。

自然而然HSTS应运而生为了解决这一潜在的安全问题。即时用户输入域名或http连接,浏览器将严格的升级到https连接。

5.jpg

HSTS如何工作的

HSTS策略是从安全的HTTPS站点发送的HTTP响应头部发布的。

Strict-Transport-Security: max-age=63072000

当浏览器从HTTPS站点看到这个头部,就知道该域名只能通过HTTPS(SSL 或者 TLS)访问了。并将此信息缓存到63072000,也就是2年。

可选的参数includeSubDomains告诉浏览器该策略适用于当前域下的所有子域。

Strict-Transport-Security: max-age=63072000; includeSubDomains

nginx配置HSTS

在nginx配置文件上设置HSTS响应头部。下面是我的配置文件,红色字体是我配置的HSTS响应头部。

server {

listen 80;

server_name diannaobos.com www.diannaobos.com;

rewrite ^(.*) https://$server_name$1 permanent;

}

server

    {

        listen 443;

        #listen [::]:80;

         ssl on;

        server_name www.diannaobos.com diannaobos.com;

         add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

        index index.html index.htm index.php default.html default.htm default.php;

        root  /home/wwwroot/www.diannaobos.com;

        ssl_certificate   /usr/local/nginx/ssl/214045388450580.pem;

        ssl_certificate_key  /usr/local/nginx/ssl/214045388450580.key;

        ssl_session_timeout 5m;

        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

        ssl_prefer_server_ciphers on;


        include diannaobos.conf;

        #error_page   404   /404.html;

        include enable-php.conf;


        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

        {

            expires      30d;

        }


        location ~ .*\.(js|css)?$

        {

            expires      12h;

        }


        location ~ /\.

        {

            deny all;

        }


        access_log  /home/wwwlogs/www.diannaobos.com.log;

    }


测试HTTP严格传输安全:

一旦用户提出HSTS策略,它的缓存信息期由max-age指定。在此期间,浏览器将会拒绝通过未加密的HTTP访问web服务,并拒绝给予例外证书错误(如果该网站以前提交了一个有效可信的证书)。如果指定了一个includeSubDomanis参数,这些限制也同样适用于当前域下的所有子域。

测试网站的SSL安全等级: 进入https://www.ssllabs.com/ssltest/,输入你的网站域名就可以给你的网站做一次全面的SSL检查。

加强HSTS

保护客户端从HTTP拦截,从它看到STS头部到声明的max-age的期间内。然而,HSTS并不是HTTP回话劫持的完美解决方案。用户仍然容易受到攻击,如果他们通过HTTP访问HSTS保护的网站时:

1、以前从未访问过该网站

2、最近重新安装了其操作系统

3、最近重新安装了其浏览器

4、切换到新的浏览器

5、切换到一个新的设备如移动电话

6、删除浏览器的缓存

7、最近没访问过该站并且max-age过期了

为了解决这个问题,google坚持维护了一个“HSTS preload list”的站点域名和子域名,并通过https://hstspreload.org提交其域名。该域名列表被分发和硬编码到主流的web浏览器。客户端访问此列表中的域名将主动的使用HTTPS,并拒绝使用HTTP访问该站点。

一旦设置了STS头部或者提交了你的域名到HSTS预加载列表,这是不可能将其删除的。这是一个单向的决定使你的域名通过HTTPS可用的。


参考链接:http://www.linuxprobe.com/billion-web-error-tolerant

https://www.landiannews.com/archives/32574.html


上一篇:cms如何使用帝国备份王网站搬家

下一篇:创建windows计划任务使FRP开机启动

猜你喜欢