网站搬迁完成后,想起这次也将SSL证书给安装上去了,并且是AWS,其实也就是VPS了,可以各种折腾,之前使用虚拟空间,配置都是很多不能改的。现在是AWS了,各种无拘无束了。所以就开启那个SSL检查的网站——ssllabs(也可以使用globalsign的在线检查工具,其实也是用ssllabs的,只是其有提供中文的说明)。
测试完,竟然只有A-,看来大部分使用Ubuntu的默认配置,还是不够的,不过好在网络都有提供一些提示之类的。还是很友好的。就谷歌对应的解决办法。还是挺多的。最后的话,折腾到了A,其实还是可以进一步到A+的,不过使用A+的话,需要把整个站点都开始HTTPS加密的方式。觉得登录用就行了,如果整个站点都用的话,一些插件,可能会用不了。比较蛋疼。
折腾完后,我这个站点的级别如下:
还不错吧,需要说的是,我现在并没有全站开启SSL,所以被降到了A,因为有些插件(社会化插件对SSL兼容差,所以就没有全站开了)。说说一般默认配置下,会导致降分的原因吧。主要就是下面的一些配置项吧
BEAST漏洞攻击
这个吧,好多大神都说了,这个是因为SSLv2 SSLv3级TLSv1上会出现的漏洞,但是当RC4与TLSv1结合及TLSv1.1或TLSv1.2版本的不会被BEAST漏洞攻击,但是大神对这个也很纠结,因为RC4是弱加密的,但是大神又说还是有不少终端对于RC4支持比较多,所以大神保留了RC4,不过也有其他大神干掉了RC4,如果你打算规避掉BEAST漏洞攻击的话,可以关闭掉SSLv2,SSLv3及TLSv1。但是从维基百科上看,网络上对于SSLv3级TLSv1的支持是近100%的,具体可以点击这里查看,所以我还是保留TLSv1,这样能保证最好的兼容性,但是关闭了RC4的加密。这样其实还是会被BEAST漏洞攻击的,还是等以后TLSv1.1级TLSv1.2普及了,就可以把TLSv1干掉了。
协议配置
所以对于协议这方面,我就配置成只是禁用掉SSLv2及SSLv3了。
SSLProtocol all -SSLv2 -SSLv3
当然,如果后面TLSv1.1及TLSv1.2支持更广了,就可以把TLSv1也干掉,那么久配置成下面这样(暂时还是兼容为主吧):
SSLProtocol all -SSLv2 -SSLv3 -TLSv1
OCSP 装订
这个的配置就相对比较容易了。不会很复杂。大神把SSLStaplingResponderTimeout配置成5,是5秒的意思,默认值是10,差距不大,所以我是没加这个了。
SSLUseStapling on SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off SSLStaplingCache shmcb:/var/run/ocsp(128000)
还有一点的是SSLStaplingCache shmcb:/var/run/ocsp(128000)是不能配置到virtual host里面的,所以可以写到外面就OK了。
全站开启SSL
这个的配置,也可以通过修改htaccess规则来实现的。前面也说过了,所以我是关闭的。开启的话,配置如下
Header add Strict-Transport-Security "max-age=15768000"
可以适当修改数值的大小。
关闭SSL压缩
规避CRIME attack
SSLCompression off
Heartbleed Vulnerability
这个就是之前很著名的事件了,发生在openssl的某些版本上,升级下openssl的版本就规避了。Ubuntu14.04已经是规避该问题了。
Forward secrecy
这个是和加密方式的配置还有就是上面的压缩配置及协议有关,,加密方式、协议、及压缩都配置好了,这个就OK了,最早的时候,我就是为了找这个如何规避掉,然后就找了一大片,然后。。嗯,然后就发了这篇文章了。
加密方式
需要开启如下的开关才能自定义配置
SSLHonorCipherOrder On
含有RC4的
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA 3DES RC4 !aNULL !eNULL !LOW !MD5 !EXP !PSK !SRP !DSS +3DES 3DES +RC4 RC4"
不含RC4的(我使用该配置)
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4
或者配置成这样,也是不含RC4
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"
CA证书链
还有就是记得配置上CA证书链,因为有些终端如果没有CA证书链的话,会出现SSL证书错误,比如Firefox浏览器,一些手机的终端等,都会有这样的问题。
SPDY
这个是用TLS 下一代协议协商(NPN),谷歌上面开发的,只是beta版本,由于deb包和14.04的Ubuntu有依赖上的问题,等到时候解包了,重新封装deb包后,我再更新这一段吧。不配置的话,不影响分数的。哈哈哈。
后来我下载了源码,编译SPDY模块,发现其现在应该是只支持apache2.2版本的,而ubuntu14.04是2.4版本的,编译的时候,都自己下载httpd的源码进行编译,所以就不搞这个了,等其出兼容2.4版本的,再直接安装吧。
参考资料:
Online Certificate Status Protocol
Configuring Apache, Nginx, and OpenSSL for Forward Secrecy
Disable SSLv2 and SSLv3 in Apache
Strong SSL Security on Apache2