部署HTTPS证书以及提升SSL评级

部署HTTPS证书以及提升SSL评级

就职的公司是各种缺人,所以啥事都得做一下。C++开发是不用说了,PHP开发自然也不能推脱了,就连网站运维也是得做一下。

昨晚上线了平台功能上的第一个版本(前端实在是不擅长,只能日后再看看了),面对各种劫持,上SSL证书真的是必不可少了。

然而,部署上去之后评级是这个样子的……一脸尴尬?……
证书转发评级B

SSLv2 和 SSLv3

SSLv2 是不安全的,所以我们需要禁用它。我们也禁用 SSLv3,因为 TLS 1.0 在遭受到降级攻击时,会允许攻击者强制连接使用 SSLv3,从而禁用了前向安全性(forward secrecy)。

需要在

server{
    listen 443;
}

 

后加入禁用协议

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

加密套件(cipher suite)

前向安全性(Forward Secrecy)用于在长期密钥被破解时确保会话密钥的完整性。PFS(完备的前向安全性)是指强制在每个/每次会话中推导新的密钥。

以下加密套件是SSL Lab推荐的

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
 
ssl_prefer_server_ciphers on;
 
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

前向安全性

客户端和服务器协商一个永不重用的密钥,并在会话结束时销毁它。

所有版本的 nginx(如1.4.4)都依赖于 OpenSSL 给 Diffie-Hellman (DH)的输入参数。不幸的是,这意味着 Diffie-Hellman Ephemeral(DHE)将使用 OpenSSL 的默认设置,包括一个用于密钥交换的1024位密钥。因为我们正在使用2048位证书,DHE 客户端就会使用一个要比非 DHE 客户端更弱的密钥交换。

我们需要生成一个更强壮的 DHE 参数:

cd /etc/ssl/certs
openssl dhparam -out dhparam.pem 4096 (运气不好的时候一个小时)

然后告诉 nginx 将其用作 DHE 密钥交换:

ssl_dhparam /etc/ssl/certs/dhparam.pem;

然后重新加载 nginx 的配置文件

# 检查配置文件是否正确
/etc/init.d/nginx configtest
# 重启
/etc/init.d/nginx restart

再次检测。
A+
参考文章:增强 nginx 的 SSL 安全性

发表评论

电子邮件地址不会被公开。 必填项已用*标注