自从MySSL 推出之后,很多网站HTTPS 检测评分都达到了A 或者A+ ,但在看检测结果的时候,发现类似于百度 和淘宝 这类大用户群的网站居然没有评级到A 或者在使用的加密套件上有橙色的加密套件,这就让我们非常诧异,难道是这些个网站不注重安全么?如果说百度 评级不高,那还能说得过去,毕竟在搜索的时候没啥重要信息,牺牲一点安全性获取极致的兼容性。但是淘宝 这种电商不应该不会不重视网站的安全性。那又是什么原因让这些网站造成了这种情况呢?通过仔细的观察报告结果和查询资料发现,这些网站这样做的原因是为了更好的兼容性。但各家也有不同的做法: 百度先来看一下的百度的评分:
 从图中可以看出www.baidu.com 这个网站的评分是C ,造成这个评分的主要原因是使用RC4 加密套件,文章一开始就说了,评不到A 或者更高的原因是为了兼容性,那么再看一下客户端模拟的结果:
 从这里发现哪怕用户使用的是IE6 这款老古董级别的浏览器也能访问百度 。这样的兼容性可以说是异常良好了。但是安全性就有点欠缺,如果要适配IE6 这款浏览器,那么SSL协议 就必须得支持SSL2 和SSL3 ,因为IE6 支持也仅支持这两个协议,SSL2 是明确说明不安全的了,SSL3 上又有著名的POODLE 漏洞问题,SSL3 上的所有CBC 加密套件都会受该漏洞影响,除去CBC 加密套件,那么就只剩下RC4 系列的加密套件了。这个没得选择。 淘宝相对于百度,面对兼容性问题,淘宝又是另一种做法了。 淘宝虽然评分到了A ,但是在支持的加密套件中存在橙色的选项:
 从图中可以看出淘宝 舍弃了SSL3 协议,换句话说就是放弃了对IE6 的支持,这个从客户端模拟结果上也可以体现出来:
 但是那个黄色的TLS_RSA_WITH_3DES_EDE_CBC_SHA 又是什么原因呢?这是为了兼容XP 上的IE8 这类浏览器,这些浏览器器支持加密套件基本都是不安全的,唯一比较安全的就是3DES 系列的了。为了兼容这些浏览器这应该算是一种比较好的方式了。 如何达到A+最近发现有很多blog 主在他们的blog 中推荐我们MySSL ,这让我们非常惊喜,在这里首先感谢一下这些blog 主对我们MySSL 的推广。 但是在看到 给启用 SSL 的站点推荐个 HTTPS 专用工具网站 的评论中,有一些blog 主对如何评到A 以及A+ 不是很理解,这里简单的说明一下。 首先要是,这个评分,并不仅仅是针对于证书的部署情况而言的,这是一个多方面综合的评级。其中包括了证书 、SSL协议 、加密套件 、漏洞 、不安全的外链 等等。如果您的网站的评分已经达到A ,那么没有被评到A+ 的最大的可能性就是没有使用HSTS ,使用HSTS 的方法很简单,只要在添加Strict-Transport-Security 这个HTTP 头部信息即可。 用nginx 服务器做说明: add_header Strict-Transport-Security 'max-age=31536000';
但有一点需要注意,Strict-Transport-Security 中的max-age 的时间不能小于15552000 。 总结如果您的服务器需要支持IE6 这种古董级别的浏览器,那么就按照百度 的做法,如果说对兼容性没有太大的需求,只要主流的浏览器能够访问那么就不要支持3DES 系列的加密套件,如果说想要在保证安全性的同时,也要有最好的兼容性,那么就请按照淘宝的 配置方式进行配置。 下面给出这三种配置情况: 类似百度Nginxssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH;ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
类似淘宝Nginxssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
最好的安全性Nginxssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256::!MD5;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
但也有可能因为openssl 版本的不同会导致相同的配置得到不同的检测结果。如果您的openssl 处于较新的版本那么按照最好的安全性 进行配置,得到一个A ,应该是没有问题的。
|