OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全

OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全插图

现在Https基本都是网站的标配,安装SSL证书完成后,都会增加一个步骤,就是强制301跳转,将Http的网址全部跳转到Https上。这样无论访客如何访问,最后都是访问Https的页面。有的还将不含www的网址跳转到含www的网址上,这样又增加了一个301跳转。那么,最终的目的达到了,但是这样多重跳转后将产生了跳转的延迟时间,如果网络不好的话,在刚开始打开网页的那时就会变成响应很慢。那有没有直接访问就是Https的页面,无需301跳转呢?答案是有的,那就是HSTS,接下来,虾皮路就分享一下OpenLiteSpeed网站开启HSTS图文教程,让网站访问更快更安全。

一、什么是HSTS

HSTS的全称是HTTP Strict-Transport-Security,它是一个Web安全策略机制(web security policy mechanism)。

HSTS最早于2015年被纳入到ThoughtWorks技术雷达,并且在2016年的最新一期技术雷达里,它直接从“评估(Trial)”阶段进入到了“采用(Adopt)“阶段,这意味着ThoughtWorks强烈主张业界积极采用这项安全防御措施,并且ThoughtWorks已经将其应用于自己的项目。

HSTS最为核心的是一个HTTP响应头(HTTP Response Header)。正是它可以让浏览器得知,在接下来的一段时间内,当前域名只能通过HTTPS进行访问,并且在浏览器发现当前连接不安全的情况下,强制拒绝用户的后续访问要求。

二、开启Https和HSTS之间的联系

有不少网站只通过HTTPS对外提供服务,但用户在访问某个网站的时候,在浏览器里却往往直接输入网站域名(例如www.example.com),而不是输入完整的URL(例如https://www.example.com),不过浏览器依然能正确的使用HTTPS发起请求。这背后多亏了服务器和浏览器的协作,如下图所示。

OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全插图1

图1:服务器和浏览器在背后帮用户做了很多工作

简单来讲就是,浏览器向网站发起一次HTTP请求,在得到一个重定向响应后,发起一次HTTPS请求并得到最终的响应内容。所有的这一切对用户而言是完全透明的,所以在用户眼里看来,在浏览器里直接输入域名却依然可以用HTTPS协议和网站进行安全的通信,是个不错的用户体验。

一切看上去都是那么的完美,但其实不然,由于在建立起HTTPS连接之前存在一次明文的HTTP请求和重定向(上图中的第1、2步),使得攻击者可以以中间人的方式劫持这次请求,从而进行后续的攻击,例如窃听数据,篡改请求和响应,跳转到钓鱼网站等。

以劫持请求并跳转到钓鱼网站为例,其大致做法如下图所示:

OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全插图2

图2:劫持HTTP请求,阻止HTTPS连接,并进行钓鱼攻击

  • 第1步:浏览器发起一次明文HTTP请求,但实际上会被攻击者拦截下来
  • 第2步:攻击者作为代理,把当前请求转发给钓鱼网站
  • 第3步:钓鱼网站返回假冒的网页内容
  • 第4步:攻击者把假冒的网页内容返回给浏览器

这个攻击的精妙之处在于,攻击者直接劫持了HTTP请求,并返回了内容给浏览器,根本不给浏览器同真实网站建立HTTPS连接的机会,因此浏览器会误以为真实网站通过HTTP对外提供服务,自然也就不会向用户报告当前的连接不安全。于是乎攻击者几乎可以神不知鬼不觉的对请求和响应动手脚。

解决之道:使用HSTS

既然建立HTTPS连接之前的这一次HTTP明文请求和重定向有可能被攻击者劫持,那么解决这一问题的思路自然就变成了如何避免出现这样的HTTP请求。我们期望的浏览器行为是,当用户让浏览器发起HTTP请求的时候,浏览器将其转换为HTTPS请求,直接略过上述的HTTP请求和重定向,从而使得中间人攻击失效,规避风险。其大致流程如下:

OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全插图3

图3:略过HTTP请求和重定向,直接发送HTTPS请求

  • 第1步:用户在浏览器地址栏里输入网站域名,浏览器得知该域名应该使用HTTPS进行通信
  • 第2步:浏览器直接向网站发起HTTPS请求
  • 第3步:网站返回相应的内容

也就是说,只要设置好HSTS后,因为间隔有效期一般是1年,就可以告诉浏览器,在接下来的31536000秒内(1年),对于当前域名及其子域名的后续通信应该强制性的只使用HTTPS,直到超过有效期为止。

完整的流程如下图所示:

OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全插图4

图4:完整的HSTS流程

三、在Nginx、Apache、Lighttpd中分别开启HSTS

这里先介绍照顾一下使用Nginx、Apache、Lighttpd环境的小伙伴,如何在Nginx、Apache、Lighttpd中开启HSTS。

1. 在 Apache 中配置 HSTS

编辑你的 apache 配置文件(如 /etc/apache2/sites-enabled/website.conf 和 /etc/apache2/httpd.conf ),并加以下行到你的 HTTPS VirtualHost:


# 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"

如果使用的是BT宝塔面板,则直接复制到对应的站点文件中。

OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全插图5

现在你的 web 站点在每次访问时都会发送该请求头,失效时间是两年(秒数)。这个失效时间每次都会设置为两年后。别忘了保存 Apache 配置文件,然后重启。

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 服务。

3. 在 Lighttpd 中配置 HSTS

对于 lighttpd 来说貌似也很简单,但我没有亲自测试过哈,将下述配置增加到你的 Lighttpd 配置文件(例如:/etc/lighttpd/lighttpd.conf):

server.modules += ( "mod_setenv" )$HTTP["scheme"] == "https" {	setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload")}

编辑保存后记得重启一下最好咯!

4. PHP通用配置 HSTS 方法

将以下代码添加到网站根目录 index.php 中或者header.php中

header("Strict-Transport-Security: max-age=63072000; includeSubdomains; preload");

接下来虾皮路再介绍一下在OpenLiteSpeed网站开启HSTS的图文教程。

四、在OpenLiteSpeed配置开启HSTS

1、首先登陆OpenLiteSpeed的后台

点击左边菜单【虚拟主机】=>【摘要】,然后选择自己的域名

OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全插图6

2、选择菜单【资源集】

点击新增添加资源集,然后选择默认的Static,点击下一步

OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全插图7

3、填写相应的参数

这里一共有3个地方要进行改动,分别是URI *、可访问 *、头部操作。前两项如下

URI *填写路径,一般默认的填/
可访问 *选择
OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全插图8

头部操作的输入框内填写如下:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-Content-Type-Options nosniff
X-XSS-Protection 1;mode=block
X-Frame-Options SAMEORIGIN

解释一下:

  • max-age,单位是秒,用来告诉浏览器在指定时间内,这个网站必须通过HTTPS协议来访问。这里直接写31536000,也就是一年,也就是对于这个网站的HTTP地址,浏览器需要先在本地替换为HTTPS之后再发送请求。
  • includeSubDomains,可选参数,如果指定这个参数,表明这个网站所有子域名也必须通过HTTPS协议来访问。
  • preload,可选参数,一个浏览器内置的使用HTTPS的域名列表。
OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全插图9

然后保存,重启litespeed即可。

五、验证有无开启HSTS

一般开启后,用谷歌浏览器来验证一下,标头会有如下信息:

OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全插图10

也可以用安全网站验证,如下:

  1. 官网:https://www.ssllabs.com/
  2. 中文版:https://myssl.com
  3. 演示版:https://www.ssllabs.com/ssltest/analyze.html?d=www.xiapilu.com

未开启前,一般情况下是A的得分,如下

OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全插图11

开启后,如下图,分数可以到达最高,也就是A+

OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全插图12

六、加入HSTS Preload List

进入hstspreload官网https://hstspreload.org,输入你的域名,然后检测结果会告诉是否符合加入HSTS Preload List,没有问题的话勾选确定。其中有个警告说是要让默认不带子域名的HTTP不用启用HSTS标头的,这里虾皮路没有理会这么多,不影响结果。

OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全插图13

HSTS Preload List审核的时间有长有短,一旦提交后你就只能等待。

OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全插图14

加入到了HSTS Preload List后,你可能还需要等待1-2月,待新版本的Chrome和Chromium、Firefox、IE等发布后,你的域名算是正式被各大浏览器承认并强制使用Https访问了,你可以在Chrome浏览器的地址框中输入“chrome://net-internals/#hsts”查看。

如何撤销HSTS Preload List

https://hstspreload.org/removal/

官方也提供了一个申请删除HSTS Preload List,不过需要注意的是撤销HSTS Preload List和加入HSTS Preload List一样,花费的时间可能需要几个月以上,所以申请HSTS Preload List前一定要谨慎。

OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全插图15
 收藏 (0) 更新不易,打赏吧

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

除特别注明外,本站所有文章均基于CC-BY-NC-SA 4.0原创,转载请注明出处。
文章名称:《OpenLiteSpeed网站开启HSTS图文教程 让网站访问更快更安全》
文章链接:https://www.xiapilu.com/web/web-tutorial/openlitespeed-hsts.html
分享到: 生成海报

评论 2

评论前必须登录!

立即登录   注册

  1. #1

    感谢大佬!Nginx之前这些设置都看过其他大神的博客都学会了,但是最近刚转到Openlitespeed,这些设置都通过您这学习了,感谢分享,也买过您这边的插件,也会一直持续关注的希望可以学习更多优化openlitespeed的教程

    jaredzhang3年前 (2020-12-11)国内网友谷歌浏览器 Windows 7 登录以回复
切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活