SSL v3 Poodle安全漏洞修复建议

利用SSL保护你的网站流量远远不止是在服务器安装一个SSL证书而已 。时代在不断的发展,随着浏览器的老化、密码强度的降低以及攻击者变得更具创造性,情况已经发生了微妙的变化。

对初识者来说,你需要选择一组具有高安全保障的密码,同时又不能忽略掉来自旧浏览器上的访问者。

强密码

密码能够实现加密和消息身份的功能 。如果密码被判定为脆弱的或容易受到攻击的话,它的实用性就会大打折扣。不幸的是,必须在“一组足够安全的且可用的密码”和“一组用户浏览器所支持的密码”之间维持一个平衡。

在撰写本文之时,下面的Nginx配置就是本站正在使用的配置,并且在Qualys公司的SSL Lab测试中获得了A+评级:

其中最关键的部分就是ssl_protocols,ssl_prefer_server_ciphers以及ssl_ciphers行。我们淘汰了带有ssl_protocols行配置的旧版SSL。为了确保浏览器能够支持,我们只使用我们所需要的密码,并开启了ssl_prefer_server_ciphers选项。最后,ssl_cipher明确指定了我们认为安全的密码协议,以及一些我们需要明确排除的情况(!aNULL表示不能做身份验证的加密算法,!MD5表示拒绝使用MD5加密,其他情况类似)

HSTS较为安全

我们都知道HTTPS确实很厉害,但却有很多细枝末节可以迫使浏览器退回到纯文本的HTTP。一个过时的锚点(anchor),一个难以清除的浏览器缓存或者一个恶意的第三方插件都可能成为罪魁祸首。幸运的是,当前的浏览器都采用了一种标准,允许服务器告知浏览器是否所有的Web流量都要通过一个安全连接。HSTS是一个简单头部,每次客户端发起请求时,服务器都会提供HSTS。该头部指示客户端应该无条件拒绝和特定域名建立不安全的HTTP链接要持续多长时间。

如果你下定决心只让你的服务器通过HTTPS访问,那么下面的Nginx指令会强制把HSTS部署到浏览器中: 

然而,为了防止不能运行或者出现配置错误,推荐你从一个较小的max-age开始,例如仅设置为24小时:

一旦你对你的网站仅能通过HTTPS访问的这一想法感到满意,你再把max-age升级为几个月或一年。

Apache和其他的Web服务器

这里描述的大多数配置选项都可以很容易地转换到Apache和其他当前的web服务器中。例如,下面就是Apache所支持的上面描述的SSL密码配置:

另外,为了让Apache支持HSTS,你可能要需要开启mod_header配置。