网站之所以想起要启用HSTS,主要是最近不少的朋友说网站打不开了,虽然Ping值一切正常,但是就是网页无法访问。猜测可能是DNS解析这一环节出了问题。另外自己本地的DNS劫持已经到了“丧心病狂”的地步了,不加https访问京东淘宝等全部被加入各种推广。
启用HSTS后自然想要加入HSTS Preload List了,这是各大浏览器都遵循的一个强制使用https访问的网站列表,只要加入到这个列表中,所有的通过浏览器访问请求都会强制走https,这在很大程度上可以杜绝“第一次”访问的劫持,最大限度地提高https访问的安全性。
需要注意的是加入HSTS Preload List需要以根域名的形式加入,如果你启用了www.podipod.com这样的二级域名形式访问,你需要先停止301跳转,即要保证podipod.com这样的根域名是用https可以访问到的。(PS:大家在申请时结合具体情况分析)。HSTS是在服务器强化https安全,如果你的网站还没有启用https,可以试试免费的SSL证书Let’s Encrypt,最近还推出了免费泛域名证书:免费Let’s Encrypt泛域名SSL证书一键申请与SSL使用教程,更多的关于建站的经验与技巧,你可以看看:
# Apache需加载mod_header库,一般位于httpd.conf文件,搜索mod_headers并取消注释。(已加载可跳过) LoadModule headers_module modules/mod_headers.so #然后对应站点VirtualHost里面插入HSTS响应头信息 Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
保存 Apache 配置文件,然后重启。现在你的 web 站点在每次访问时都会发送该请求头,失效时间是两年(秒数),这个失效时间每次都会设置为两年后。
1.2 Nginx 配置 HSTS
Nginx 服务器中的配置最为简单,只需要编辑 Nginx 配置文件(如:/usr/local/nginx/conf/nginx.conf)将下面行添加到你的 HTTPS 配置的 server 块中即可:
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
如果你发现直接添加在 server 块中无效的情况,你可以试试直接插入到 location ~ *php 内:
location ~ [^/]\.php(/|$) { add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; }
配置保存后重启 Nginx 服务。
1.3 在 Lighttpd 中配置 HSTS
将下述配置增加到你的 Lighttpd 配置文件(例如:/etc/lighttpd/lighttpd.conf):
server.modules += ( "mod_setenv" ) $HTTP["scheme"] == "https" { setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload") }
编辑保存后记得重启一下。
1.4 PHP通用配置 HSTS 方法
将以下代码添加到网站根目录 index.php 中或者header.php中
header("Strict-Transport-Security: max-age=63072000; includeSubdomains; preload");
开启了HSTS后,你部署SSL/TLS的服务检测得分就可能是A+以上了。ssllabs官网以及演示如下:
ssllabs官网MySSL官网podipod软库网演示podipod软库网ssllabs评分为“A+”。
本文由 podipod软库网 作者:DevOps 发表,转载请注明来源!