Nginx服务器中关于SSL的安全配置详解

2019-10-17 20:17:42丽君


我建议以下两个密码套件,后者来自 Mozilla 基金会。

推荐的密码套件:
 
ssl_ciphers 'AES128+EECDH:AES128+EDH';

推荐的密码套件向后兼容(IE6 / WinXP):
 
ssl_ciphers "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:!DES:!MD5:!PSK:!RC4";

  如果您的 OpenSSL 是旧版本,不可用密码将被自动丢弃。总是使用完整的密码套件,让OpenSSL选它所支持的。

密码套件的顺序非常重要,因为它决定在优先级算法将被选中。上面的建议重视算法提供完美的向前保密。

老版本的 OpenSSL 可能不会返回算法的完整列表。AES-GCM 和一些 ECDHE 相当近,而不是出现在大多数版本的 Ubuntu OpenSSL 附带或 RHEL。

优先级逻辑

    首先选择 ECDHE + AESGCM 密码。这些都是 TLS 1.2 密码并没有受到广泛支持。这些密码目前没有已知的攻击目标。     PFS 密码套件是首选,ECDHE 第一,然后 DHE。     AES 128 更胜 AES 256。有讨论是否 AES256 额外的安全是值得的成本,结果远不明显。目前,AES128 是首选的,因为它提供了良好的安全,似乎真的是快,更耐时机攻击。     向后兼容的密码套件,AES 优先 3DES。暴力攻击 AES 在 TLS1.1 及以上,减轻和 TLS1.0 中难以实现。向后不兼容的密码套件,3DES 不存在.     RC4 被完全移除. 3DES 用于向后兼容。 

强制性的丢弃

    aNULL 包含未验证 diffie - hellman 密钥交换,受到中间人这个攻击     eNULL 包含未加密密码(明文)     EXPORT 被美国法律标记为遗留弱密码     RC4 包含了密码,使用废弃ARCFOUR算法     DES 包含了密码,使用弃用数据加密标准     SSLv2 包含所有密码,在旧版本中定义SSL的标准,现在弃用     MD5 包含所有的密码,使用过时的消息摘要5作为散列算法


其它的设置

确保你已经添加了以下几行:
 
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;

在SSLv3或这是TLSv1握手时选择一个密码,通常是使用客户端的偏好。如果这个指令是启用的,那么服务器反而是使用服务器的偏好。

更多关于SSL preferserver密码的信息

更多关于SSL密码的信息
向前保密(Forward Secrecy)与Diffie Hellman Ephemeral Parameters