HSTS的作用
效果:强制启用HTTPS
HSTS 和 强制HTTPS 的区别
众所周知,强制Https仅仅是做了一个端口转发,将80端口的数据包进行301重定向到443,所以两者区别还是大大滴有。
反观HSTS的工作原理,very amazing啊,相当于直接告诉浏览器只能够通过https访问此站点,不然就不让进。
正常代理工具配置:
我这边是使用的nginx,当然,apache的配置方法与nginx完全类似(感觉他俩配置结构一模一样的样子:
只需要在监听443端口的server段里加上如下语句:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
#Apache
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
#Nginx
语句解释:
Header always set/add_header #声明添加http响应头
Strict-Transport-Security #使用强制安全传输协议
max-age=31536000 #设置使用的时间,建议为每年更新
includeSubDomains #包括子域名
preload #总是加载
配置好过后,又会遇到一些小小的毛病,就比如我的服务器上同时会开一一些docker服务到某某端口,他们的资源文件是无法通过https进行访问的,直接在nginx/apache的配置文件中添加反向代理则会出现页面显示异常的问题,所以接下来就有了下一点:
关于docker容器内配置https以兼容服务器的HSTS:
这个方面的话,思来想去都感觉很有并的样子,docker容器本身就很精简,那还有那么多反向代理软件,直接都是通过框架进程打开的端口服务,所以对于不同的docker容器配置起来就很麻烦,倒是可以在制作docker容器的时候发点小bing给这个玩意儿塞进去,而且仅仅只保护从宿主机到docker之间的流量,鸡肋的要命,不如不配。
解决办法
通过ip访问docker进程
详见:
文档:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Strict-Transport-Security