通常情况下,我们将用户的 HTTP 请求 302 跳转到 HTTPS,这会存在两个问题:
302 跳转是由浏览器触发的,服务器无法完全控制,这个需求导致了 HSTS(HTTP Strict Transport Security)的诞生。HTSP 就是添加 header 头(add_header Strict-Transport-Security max-age=15768000;includeSubDomains),告诉浏览器网站使用 HTTPS 访问,支持HSTS的浏览器(Chrome, firefox, ie 都支持了 HSTS就会在后面的请求中直接切换到 HTTPS。在 Chrome 中会看到浏览器自己会有个 307 Internal Redirect
的内部重定向。在一段时间内也就是max-age定义的时间,不管用户输入www.trustauth.cn还是http://www.trustauth.cn,都会默认将请求内部跳转到https://www.trustauth.cn。
服务器端配置HSTS,减少302跳转,其实HSTS的最大作用是防止302 HTTP劫持。HSTS的缺点是浏览器支持率不高,另外配置HSTS后HTTPS很难实时降级成HTTP。
同时,也建议启用SPDY来提高性能。有关SPDY内容参见前面文章,不在此外累述了。
下面来说说如何在Apache2, NGINX , Lighttpd启用HSTS。
1 2 3 4 5 6 | # Optionally load the headers module: LoadModule headers_module modules / mod_headers . so < VirtualHost 0.0.0.0 : 443 > Header always set Strict – Transport – Security “max-age=63072000; includeSubdomains; preload” < / VirtualHost > |
然后,重启Apache服务。
1 | add_header Strict – Transport – Security “max-age=63072000; includeSubdomains; preload” ; |
在server端添加该头部,并重启服务。
1 2 3 4 | server . modules += ( “mod_setenv” ) $ HTTP [ “scheme” ] == “https” { setenv . add – response – header = ( “Strict-Transport-Security” = > “max-age=63072000; includeSubdomains; preload” ) } |
X-Frame-Options 头部添加到HTTPS站点,确保不会嵌入到frame 或 iframe,避免点击劫持,以确保网站的内容不会嵌入到其他网站。
1 | Header always set X – Frame – Options DENY |
1 | add _header X – Frame – Options “DENY” ; |
1 2 3 4 | server . modules += ( “mod_setenv” ) $ HTTP [ “scheme” ] == “https” { setenv . add – response – header = ( “X-Frame-Options” = > “DENY” ) } |
文章转载来自:trustauth.cn