大部分网站只在一些包含敏感数据的页面采用HTTPS,比如登录注册,支付等。但由于近年来Wifi普及,Free Wifi所带来的安全问题,越来越多被重视,很多网站开始采用全站HTTPS。目前国外的大型网站比如Google、Facebook、Microsoft、Twitter、PayPal等都采用了全站HTTPS,而且Google明确表示优先https网站内容。
副作用:证书费用、SEO、访问速度、无法获取referer。
(1)安全问题
流量劫持
访问A网站,实际上打开的是B网站(比如:DNS劫持)
网页劫持
ISP通过修改返回代码的方式强制在网站中植入弹窗广告代码。流量劫持的一种。
会话劫持
火狐插件火羊(FireSheep) :抓取无安全保护的wifi热点上的信息流
中间人攻击(Man In The Middle,简称MITM)
A通过B给C传话,但B在传话给C的时候,可以夸大其词填油加醋,中间人B一次MITM攻击。会话劫持的一种。
注射式攻击(Injection)
在双方正常的通讯流插入恶意数据。会话劫持的一种。
SSLStrip
输入网址时一般都不输入协议,浏览器默认使用HTTP,服务器会302响应提示浏览器再发起一个HTTPS请求。这样就混入了使用明文传输的HTTP会话。SSLstrip可以利用这一点,通过劫持HTTP会话劫持了SSL会话。
POODLE(贵宾犬漏洞)
2014年由Google发现的POODLE漏洞(Padding Oracle On Downloaded Legacy Encryption vulnerability),可被攻击者用来窃取采用SSL3.0版加密通信过程中的内容,又被称为“贵宾犬攻击”。
心脏滴血漏洞
OpenSSL Heartbleed模块存在一个BUG。从服务器内存中读取包括用户名、密码和信用卡号等隐私信息在内的数据。
。。。。。。等等还有很多!
(2)关于SSL/TLS
a) SSL/TLS协议
SSL安全套接字层 :Secure Socket Layer;TLS传输层安全协议 :Transport Layer Security
b) SSL证书类型
- DV证书 :Domain Validation,CA只验证域名信息,适合个人网站使用
- OV证书 :Organization Validation,在DV证书的基础上,增加认证公司的信息,适合包含个人隐私
- EV证书 :Extended Validation,最为严格一般会要求提供纸质材料,适合在线支付、EC站等
- 自签名证书 : 只适合内部的测试环境
c) 显示图标的区别
d) 各证书比较
e) SSL厂商
免费: StartSSL、 Let's Encrypt
付费:Comodo、IdenTrust、Symantec、GoDaddy、GlobalSign
(3)导入SSL后的一些注意事项
a) HSTS RFC6797 强制浏览器使用HTTPS与服务器创建连接。
HSTS 预载入列表 : https://hstspreload.appspot.com/
谷歌Chrome维护的预载入列表,目前各大浏览器都支持这个列表了。
服务器启用HSTS
Ngnix
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
Apache
LoadModule headers_module modules/mod_headers.so <VirtualHost *.*.*.*:443> Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" </VirtualHost>
Lighttpd
server.modules += ( "mod_setenv" ) $HTTP["scheme"] == "https" { setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload") }
确保网站的内容不会嵌入到其他网站:
Apache
Header always set X-Frame-Options DENY
nginx
add_header X-Frame-Options "DENY";
Lighttpd
server.modules += ( "mod_setenv" ) $HTTP["scheme"] == "https" { setenv.add-response-header = ( "X-Frame-Options" => "DENY") }
b) SSL卸载
SSL offloading,或者叫SSL加速SSL acceleration,使用指定服务器承担SSL协议及加解密计算负荷,从而提高系统整体性能的一种技术。
同一domain下要使用相对URLs:
引用
<a href="/mypj/2016/11/29/1.html" target="_blank">文本</a>
跨多个domain时使用协议相对URLs:
引用
<a href="//www.domain.com/mypj/2016/11/29/1.html" target="_blank">文本</a>
一些反向代理服务器会把最初从浏览器发出时候的协议放入请求的头部:
引用
X-Forwarded-Proto: https
c) SNI(Server Name Identification)
服务器建立SSL连接时要请求服务器的证书,而服务器在发送证书的时候,是不知道浏览器访问的是哪个域名的,所以不能根据不同域名发送不同的证书。使用SNI扩展可以在连接到服务器建立SSL链接之前先发送要访问站点的域名(Hostname),这样服务器根据这个域名返回一个合适的证书。从而解决一个服务器使用多个域名和证书的SSL/TLS证书。
目前大多数操作系统和浏览器都已经很好地支持SNI扩展。
d) 安全Cookie
- secure属性:只能在 HTTPS 连接中被浏览器传递到服务器端
- HttpOnly属性:通过程序(JS脚本、Applet等)将无法读取
e) 其他
- 使用TLS v1.2(禁用SSL v3)
- 关闭RC4、3DES加密算法
- Diffie-Hellman密钥交换(Diffie-Hellman key exchange)
- 支持前向安全(PFS:Perfect Forward Secrecy)即使是所有用户的私钥被攻击者窃取,以前所有已生成的会话密钥也不会被攻击者破解。
- 使用Qualys SSL Test测试所有公开的SSL服务器:https://www.ssllabs.com/ssltest/
- Java维持了一份可信任根证书颁发机构(CA)清单。
参考:
https://www.youtube.com/watch?v=cBhZ6S0PFCY
http://blog.csdn.net/luocn99/article/details/39777707
https://www.zhihu.com/question/28379088
http://op.baidu.com/2015/04/https-index/
https://zenlogic.jp/aossl/
https://www.symantec.com/ja/jp/page.jsp?id=always-on-ssl
https://hyper-text.org/archives/2015/01/full_time_ssl_website_quick_start.shtml
https://osusume-houhou.com/advantages-and-disadvantages-together-always-ssl-of-https/
http://www.infoq.com/cn/articles/https-difficult
https://www.feistyduck.com/books/openssl-cookbook/