Monthly Archive for June, 2013

SSL安全性与nginx配置

服务器SSL/TLS的配置不仅包括证书和私钥,还需要配置合适的SSL参数以保证安全性:

1. 禁用SSLV1,SSLV2等不安全的协议
2. 使用适当的ciphers:能够抵御beast attack (针对SSL 3.0和TLS 1.0)和其它攻击,并且提供perfect forward secrecy (PFS).

下面的nginx配置能够在Qualys’s SSL Server Test中得到A Grade。而nginx默认的ssl配置只能得到B(不能防止beast attack)。

ssl_prefer_server_ciphers On;
ssl_ciphers AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH;

nginx官方文档里推荐的ciphers设置:

ssl_ciphers RC4:HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

但此ciphers在Internet Explorer和Safari下可能不能提供足够的安全性。

另外,对于客户端来说,推荐使用Firefox或Chrome浏览器。Internet Explorer和Safari由于优先使用的ciphers较弱,访问绝大多数SSL网站时都无法保证PFS。

淘宝我去年买了个表的

月初手机欠费停机,想到淘宝充点话费,结果登陆时要求安全验证输入手机验证码。验证你麻痹。我去年买了个表的。淘宝越来越恶心了。。

我个人非常厌恶各种所谓的“安全”措施,比如:

1.要求安装数字证书或安全控件(如支付宝、网银)
2.不能保存cookie下次自动登陆。(如淘宝、Paypal)
3.第一次尝试登陆就需要输入验证码。(如360buy)
4.其它乱七八糟安全措施,比如必须手动输入密码,不能用Lastpass自动填写、禁止复制黏贴等(如Web QQ)。
5.要求输入手机验证码。(如网银)

这些措施本质上是通过人为添加额外的限制,妨碍信息的自由流通,最终干涉了人们的自由。而自由是第一位的自然权利(natural rights)和普世价值;即使牺牲安全,也必须首先保证自由。为了所谓的“安全”而限制自由,是本末倒置。

网站和在线服务提供商应该只使用业界和工业标准的、对用户无干扰的技术手段来保障安全性。如SSL client authentication(正面例子是StartSSL)。像手机验证码这种是最严重的干扰,因为它只能用手机接收和人工输入,无法使用程序或脚本自动化完成,强制割裂了完整的在线操作流程。在任何情况下都不应该使用这种手段;至少也应该提供用户选择的权利。