Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
最近折螣了下SSL,如果有关注的话可以发现本站的证书从 Let’s Encrypt -> StartSSL -> COMODO -> GeoTrust ,中间也是经历了不少波折,然后想再加个HSTS,发现没有什么现成的方案,那只能自己研究咯╮(╯_╰)╭
HSTS是“HTTP Strict Transport Security”(HTTP严格安全传输)的缩写,开启了这项设置以后,主流浏览器会强制性地使用HTTPS来请求资源,能够更加有效地保护你网站和用户的数据安全。
首先HSTS要加个Strict-Transport-Security的Header,格式如下
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
有两种方案,第一种是在php使用header函数,第二种是在Apache设置Header
由于本站静态化了╮(╯_╰)╭,第一种只能抛弃咯,然后就去研究Apache
首先是加入Header的语句,via,直接使用Header set就好
然后是判断,翻了下才发现原来Apache也有if语句(via),那就好,用if语句判断是否使用SSL,是就加入HSTS头,不是就301跳转,嗯,灰灰我真是个天才
把设定加入根目录的.htaccess即可,下面是本站完整的.htaccess
# 针对 Hostker 主机的 SSL 监听方案 RewriteEngine On RewriteCond %{HTTP:KERSSL} !on RewriteRule (.*) https://huihui.moe/$1 [NC,L,R=301] <If "%{HTTP:KERSSL} == 'on'"> # Header Set Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" Header always set Public-Key-Pins 'pin-sha256="l2yRLumd//mpm/WYi63mkNBZrNOpv+iqbuuqZHz2FZk="; pin-sha256="klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY="; pin-sha256="amMeV6gb9QNx0Zf7FtJ19Wa/t2B7KpCF/1n2Js3UuSU="; max-age=2592000' </If> # BEGIN WPSuperCache RewriteBase / RewriteCond %{REQUEST_METHOD} !POST RewriteCond %{QUERY_STRING} !.*=.* RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$ RewriteCond %{HTTP:X-Wap-Profile} !^[a-z0-9\"]+ [NC] RewriteCond %{HTTP:Profile} !^[a-z0-9\"]+ [NC] RewriteCond %{DOCUMENT_ROOT}/cache/supercache/%{SERVER_NAME}/$1/index-https.html -f RewriteRule ^(.*) "/cache/supercache/%{SERVER_NAME}/$1/index-https.html" [L] # END WPSuperCache # BEGIN WordPress RewriteRule ^static/(.*) /wp-content/themes/huihui/$1 [L] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress #允许跨域 <FilesMatch "\.(svg|ttf|otf|eot|woff|woff2)$"> Header set Access-Control-Allow-Origin "*" </FilesMatch> ## 设置出错页面 # 设置404 页 ErrorDocument 404 /404 ## 设置缓存策略 # 启用缓存功能 ExpiresActive On # 指定文件缓存5天 <FilesMatch "\.(css|js|ico|eot|ttf|woff)$"> ExpiresDefault "access plus 5 days" </FilesMatch>
对于 HSTS 生效前的首次 HTTP 请求,依然无法避免被劫持。浏览器厂商们为了解决这个问题,提出了 HSTS Preload List 方案:内置一份可以定期更新的列表,对于列表中的域名,即使用户之前没有访问过,也会使用 HTTPS 协议。
详细的介绍可以看ququ大大的文章,申请链接在这里,下面是本站申请成功截图留念~
大概在2-3个月左右,本站就会被编译进Chrome中啦~在介里可以看到详细Preload列表
更新:
目前 huihui.moe 已經加入 HSTS Preload List, 被硬編碼進了 chrome, 可喜可賀~哇依~
詳看 Chromium 源碼, 本站在 14295 行~www
SSLLabs是个测试https客户端/服务端兼容性的项目,本站的测试结果
达到A+啦~干杯~( ゜- ゜)つロ
おわり
(又水了一篇文章o((;>口<;))o
收藏了!不错的内容=-=