当前位置 主页 > 服务器问题 > nginx问题汇总 >

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

    栏目:nginx问题汇总 时间:2018-10-21 16:57

      如果您的 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

    向前保密的概念很简单:客户端和服务器协商一个可靠的密钥,并在会话结束后销毁。服务器中的RSA私钥用来签名客户端和服务器之间交换的Diffie-Hellman密钥。副主密钥从Diffie-Hellman握手中得到,并用于加密。由于副主密钥在客户端和服务器之间的连接中是明确具体的,并用于有限的时间,因此被叫作Ephemeral(短暂的)。

    由于有Forward Secrecy,即使攻击者持有服务器的私钥,也不能够解密过去的会话。私钥仅仅用来签名DH(Diffie-Hellman)的握手,它并没有泄漏副主密钥。Diffie-Hellman确保了副主密钥不会离开客户端和服务器,也不会被中间人截获。


    1.4.4所有的nginx版本在往Diffiel-Hellman输入参数时依赖OpenSSL。不幸的时,这就意味着Ephemeral Diffiel-Hellman(DHE)会使用OpenSSL的这一缺陷,包括一个1024位的交换密钥。由于我们正在使用一个2048位的证书,DHE客户端比非ephemeral客户端将使用一个更弱的密钥交换。

    我们需要产生一个更强的DHE参数:
    cd /etc/ssl/certs
    openssl dhparam -out dhparam.pem 4096

    然后告诉nginx在DHE密钥交换的时候使用它:
     复制代码 代码如下:
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    OCSP 适用

    在和服务器连接的时候,客户端通过使用证书撤销列表(CRL)来验证服务器证书的有效性,或者是使用在线证书状态协议(OCSP)记录。但是CRL的问题是:CRL的列表项不断增多,而且需要不断地下载。