HTTPS能给网站带来更安全的保护,主要体现在以下几个方面:
更好地保护用户的隐私。
避免用户访问到伪造的服务器。
HTTPS 还可以防止流量劫持
HTTPS安全检测可以通过以下链接进行检测:
我的检测结果:
可以看到没有进行HSTS头部署、HPKP头部署。 通过旁边的链接,可以进入相关的修复帮助页面,以下是修复的重点。
通过在加密的HTTP响应中包含
Strict-Transport-Security头来实现网站HSTS,例如
Strict-Transport-Security: max-age=63072000; includeSubdomains;preload;
最佳的部署方案是部署在离用户最近的位置,例如架构有前端反向代理和后端web服务器,在前端代理处配置HSTS是最好的,否则就需要在web服务器层配置HSTS。如果web服务器不明确支持HSTS,可以通过增加响应头的机制,但需要阅读各种服务器的附属细则。如果其他方法都失败了,可以在应用程序层增加HSTS。
#启用HTTP严格传输安全
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
#HSTS策略只能在加密通道的HTTP响应中进行设置,因此需要把http重定向到https,如果明文响应中允许设置HSTS头,中间人攻击者就可以通过在普通站点中注入HSTS信息来执行DoS攻击
<VirtualHost *:80>
ServerName www.abclogs.com
ServerAlias abclogs.com
…
#将所有访问者重定向到加密的网站
RedirectPermanent / https://www.abclogs.com/
<VirtualHost>
第三方模块 http://hstsiis.codeplex.com/
server {
listen xxxx:443 ssl;
server_name www.abclogs.com;
add_header Strict-Transport-Security "max-age=31536000;includeSubdomains;preload";
….
}
server {
listen xxxx:80;
server_name www.abclogs.com;
return 301 https://www.abclogs.com$request_uri;
…
}
注意:addheader指令只会将HTTP头添加到非错误响应中(2xx和3xx)
下面你可以看到三个主流 Web 服务器的配置方法。这只是一个 HTTP 响应头,绝大多数 Web 服务器都可以设置它。它只需要设置到 HTTPS 网站上。
下面的例子固定到 COMODO RSA Domain Validation Secure Server CA 及备份的 Comodo PositiveSSL CA 上,30天失效期,包括所有的子域。
编辑你的 Apache 配置文件(如 /etc/apache2/sites-enabled/website.conf 或 /etc/apache2/httpd.conf),并添加下列行到你的 VirtualHost 中:
# 如需要,载入 headers 模块。
LoadModule headers_module modules/mod_headers.so
Header set Public-Key-Pins "pin-sha256=\"klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY=\"; pin-sha256=\"633lt352PKRXbOwf4xSEa1M517scpD3l5f79xMD9r9Q=\"; max-age=2592000; includeSubDomains"
Lighttpd 更简单一些,将下列行添加到你的 Lighttpd 配置文件(如 /etc/lighttpd/lighttpd.conf):
server.modules += ( "mod_setenv" )
$HTTP["scheme"] == "https" {
setenv.add-response-header = ( "Public-Key-Pins" => "pin-sha256=\"klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY=\"; pin-sha256=\"633lt352PKRXbOwf4xSEa1M517scpD3l5f79xMD9r9Q=\"; max-age=2592000; includeSubDomains")
}
NGINX 的配置更简短。添加以下行到你的 HTTPS 配置的 server 块中:
add_header Public-Key-Pins 'pin-sha256="klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY="; pin-sha256="633lt352PKRXbOwf4xSEa1M517scpD3l5f79xMD9r9Q="; max-age=2592000; includeSubDomains';
HPKP 报告功能允许浏览器报告任何违例给你。
如果你在响应头中添加了附加的 report-uri="http://www.abclogs.com/hpkp-report" 参数,并用该 URI 处理接收到的数据的话,客户端会在发现违例时发送报告给你。这个报告是以 POST 方式发送到你指定的 report-uri 上,并以类似下面的 JSON 格式:
{
"date-time": "2014-12-26T11:52:10Z",
"hostname": "www.abclogs.com",
"port": 443,
"effective-expiration-date": "2014-12-31T12:59:59",
"include-subdomains": true,
"served-certificate-chain": [
"-----BEGINCERTIFICATE-----\nMIIAuyg[...]tqU0CkVDNx\n-----ENDCERTIFICATE-----"
],
"validated-certificate-chain": [
"-----BEGINCERTIFICATE-----\nEBDCCygAwIBA[...]PX4WecNx\n-----ENDCERTIFICATE-----"
],
"known-pins": [
"pin-sha256=\"dUezRu9zOECb901Md727xWltNsj0e6qzGk\"",
"pin-sha256=\"E9CqVKB9+xZ9INDbd+2eRQozqbQ2yXLYc\""
]
}
HPKP 也可以设置为非强制的,可以使用 Public-Key-Pins-Report-Only 来只发送违例报告给你。
这样可以让你在网站不可访问或 HPKP 配置不正确时不固定,之后你可以将这个响应头改为 Public-Key-Pins 来强制固定。
修补完成后:
百度在2015年3月将搜索服务全站HTTPS化以来,HTTPS正被越来越多的网站和企业使用。但是我们发现,进行正确的HTTPS配置和安全部署情况并不乐观,安全指数分析了全网13288198个网站,其中有1089693个网站使用了HTTPS,占比8.2%。使用HTTPS的网站中有1080884个网站存在配置或安全问题,占比99.19%。(2017年3月1日数据)
中国互联网网站HTTPS使用和安全情况:
我们希望:通过使用HTTPS带来的安全改善、HTTPS证书有效性、HTTPS安全部署、HTTPS漏洞等多个角度,推进中国互联网网站提升HTTPS安全,避免被浏览器HTTPS危险、不安全提示和访问拦截。
参考链接:
https://bsi.baidu.com/topic/https/hpkp.html