用MySSL检测下网站,发现PCI DSS不合规,修改了下nginx配置后,合规。
自从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
系列的加密套件,如果说想要在保证安全性的同时,也要有最好的兼容性,那么就请按照淘宝的
配置方式进行配置。
下面给出这三种配置情况:
类似百度
Nginx
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
类似淘宝
Nginx
ssl_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;
最好的安全性
Nginx
ssl_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
,应该是没有问题的。
https://blog.myssl.com/https-security-compatibility-best-practices/