最近把网站升级到了HTTPS, 之后还将把当前一些应用的WebSocket 连接升级为 WSS连接,以安全地传输消息。最开始我本是为了测试 HTTP2 不限制请求并发数在切片请求中的优势。 但为了实现这一点,就顺手给网站在 Godaddy 上申请了域名和解析,并且通过Let’s Encrypt (这篇博文很清楚) 申请了SSL 证书。
ssllabs 安全评测
关于OpenSSL 和 Nginx 新版本的本地编译安装就不多说了,我基本都是在linux 云服务器上搞,注意make 之前给Nginx configure 一下, 使得编译时导出这俩与HTTP2相关的module
.configure –prefix=/etc/nginx –with-http_ssl_module –with-http_v2_module
make 结束后,便会在objs 文件夹中生成按照刚才配置编译的 nginx,软连接一下即可,杀掉原来的nginx 服务实例。启动这个带有http2 module 的nginx,在网站配置中加入对端口的监听,并采用HTTP2 协议即可:
开启HSTS
这回主要记一下关于STS 的事儿。HTTP Strict Transport Security (通常简称为HSTS) 是一个安全功能,它通过服务器response header的形式告诉浏览器只能通过HTTPS访问当前资源, 禁止HTTP方式.
摘自:https://developer.mozilla.org
一个网站接受一个HTTP的请求,然后跳转到HTTPS,用户可能在开始跳转前,通过没有加密的方式和服务器对话,比如,用户输入http://foo.com或者直接foo.com。
这样存在中间人攻击潜在威胁,跳转过程可能被恶意网站利用来直接接触用户信息,而不是原来的加密信息。
网站通过HTTP Strict Transport Security通知浏览器,这个网站禁止使用HTTP方式加载,浏览器应该自动把所有尝试使用HTTP的请求自动替换为HTTPS请求
现实案例
你连接到一个免费WiFi接入点,然后开始浏览网站,访问你的网上银行,查看你的支出,并且支付一些订单。很不幸,你接入的WiFi实际上是黑客的笔记本热点,他们拦截了你最初的HTTP请求,然后跳转到一个你银行网站一模一样的钓鱼网站。 现在,你的隐私数据暴露给黑客了。
Strict Transport Security解决了这个问题;只要你通过HTTPS请求访问银行网站,并且银行网站配置好Strict Transport Security,你的浏览器知道自动使用HTTPS请求,这可以阻止黑客的中间人攻击的把戏。
Nginx 设置HSTS
编辑你的Nginx具体网站配置文件,在SSL Configuration 中添加SSL key和cert 签名证书,并且配置add header,让每一个http response 都具有STS 字段。
- max-age 表示STS 策略的过期时间,也就是浏览器在收到带有 Strict Transport Security -
response header 多久后过期,就可以转为http 请求. - includeSubdomains 表明 STS 策略也应用到 当前域名的子域名。
如此这般,就已经开启了STS,这使得服务器每次response都告诉浏览器所有请求都强制使用https,就算用户手动输入http 地址也会在浏览器内部替换为https 请求,在根源上杜绝浏览器与服务器建立非安全连接。
写在最后
为什么我一定要对网站启用https,主要是为了测试 https 对数据传输的加密,网站性能。特别是涉及到用户个人聊天记录、支付信息等隐私数据,必须采用 SSL加密传输,才能防止数据传输过程被中间人劫持、篡改。
如今网络安全形式愈演愈烈,不论是阿里巴巴还是百度,都在几年前率先全站升级为HTTPS,GeoQ Ana这样的在线制图平台也采用HTTPS 来实现用户隐私数据(往往是商业数据)的上传,保证平台的数据安全性。
So,作为一个兼职网络安全的前端工程师,希望大家注意安全,哈哈哈。
参考文章: