如果Web服务中的SSL协议出现安全问题,攻击者就可以拥有你所有的安全信息。Nginx使用ssl模块配置HTTPS支持,就会遇到这个问题。
通过命令: nmap --script ssl-cert,ssl-enum-ciphers -p 443(host),就可以看到如下部分信息:
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - strong
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - strong
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - strong
| TLS_ECDHE_RSA_WITH_RC4_128_SHA - strong
| TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA - broken
| TLS_ECDH_anon_WITH_AES_128_CBC_SHA - broken
| TLS_ECDH_anon_WITH_AES_256_CBC_SHA - broken
| TLS_ECDH_anon_WITH_RC4_128_SHA - broken
| TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 - weak
| TLS_RSA_EXPORT_WITH_RC4_40_MD5 - weak
| TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_RSA_WITH_AES_256_CBC_SHA256 - strong
| TLS_RSA_WITH_AES_256_GCM_SHA384 - strong
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
在上面的片段中我们看到了weak、strong字段,weak都是40位加密的,strong应该都在128位以上。
如果在配置 Nginx 的 SSL 时不指定 ssl_ciphers,那么默认允许使用的加密算法和协议将会包括一些已经证实不够安全的算法及协议,比如对称加密密钥不足 128-bit 的算法等,也就是SSL协议包含很多算法,其中有一些128位以下的较容易被破解需要禁用。为了保证 SSL 连接足够安全,将128位以下弱加密算法禁用,在配置时应该明确指定算法:
ssl_ciphers HIGH:!ADH:!MD5;
编辑配置文件nginx.conf,把这句加在 server 配置节里就可以了,在浏览器使用不安全的算法时,会自动禁止连接。