间歇性ssl_error_no_cypher_overlap

在过去的一周里,客户端在使用Firefox时,会随机获取ssl_error_no_cypher_overlap错误。 Safari和Chrome也出现连接问题。 出现此问题时,找不到任何软件包或代码更新。

我们在三台服务器之间进行负载平衡,三台服务器都具有相同版本的nignx(1.6.2-1.el5.ngx)和openssl(0.9.8e-32.el5_11),以及相同的configuration,指定哪些协议和密码(根据Mozilla推荐的nginxconfiguration)。

我不知道我在这里错过了什么。

所有服务器之间共享的nginxconfiguration:

ssl on; ssl_certificate /etc/nginx/ssl/wildcard.pem; ssl_certificate_key /etc/nginx/ssl/wildcard.key; ssl_session_timeout 5m; ssl_session_cache shared:SSL:50m; ssl_protocols TLSv1; 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; 

在我们的日志中:

 2015/01/21 11:16:05 [crit] 3428#0: *150887640 SSL_do_handshake() failed (SSL: error:1408A0D7:SSL routines:SSL3_GET_CLIENT_HELLO:required cipher missing) while SSL handshaking, client: *.*.*.*, server: 0.0.0.0:443 2015/01/21 11:17:34 [crit] 3429#0: *150929634 SSL_do_handshake() failed (SSL: error:1408A0D7:SSL routines:SSL3_GET_CLIENT_HELLO:required cipher missing) while SSL handshaking, client: *.*.*.*, server: 0.0.0.0:443 2015/01/21 11:18:23 [crit] 3434#0: *150952369 SSL_do_handshake() failed (SSL: error:1408A0D7:SSL routines:SSL3_GET_CLIENT_HELLO:required cipher missing) while SSL handshaking, client: *.*.*.*, server: 0.0.0.0:443 2015/01/21 11:18:23 [crit] 3434#0: *150952368 SSL_do_handshake() failed (SSL: error:1408A0D7:SSL routines:SSL3_GET_CLIENT_HELLO:required cipher missing) while SSL handshaking, client: *.*.*.*, server: 0.0.0.0:443 2015/01/21 11:18:30 [crit] 3428#0: *150955385 SSL_do_handshake() failed (SSL: error:1408A0D7:SSL routines:SSL3_GET_CLIENT_HELLO:required cipher missing) while SSL handshaking, client: *.*.*.*, server: 0.0.0.0:443 2015/01/21 11:18:43 [crit] 3433#0: *150961363 SSL_do_handshake() failed (SSL: error:1408A0D7:SSL routines:SSL3_GET_CLIENT_HELLO:required cipher missing) while SSL handshaking, client: *.*.*.*, server: 0.0.0.0:443 2015/01/21 11:18:53 [crit] 3428#0: *150965840 SSL_do_handshake() failed (SSL: error:1408A0D7:SSL routines:SSL3_GET_CLIENT_HELLO:required cipher missing) while SSL handshaking, client: *.*.*.*, server: 0.0.0.0:443 

从一个快速sslscan:

  Supported Server Cipher(s): Accepted TLSv1 256 bits DHE-RSA-AES256-SHA Accepted TLSv1 256 bits AES256-SHA Accepted TLSv1 128 bits DHE-RSA-AES128-SHA Accepted TLSv1 128 bits AES128-SHA Accepted TLSv1 168 bits DES-CBC3-SHA Prefered Server Cipher(s): TLSv1 128 bits DHE-RSA-AES128-SHA 

你在密码string中input的许多密码(如GCM,SHA384和EC)不能用于你使用的旧的OpenSSL版本。 这只剩下几个密码。 公司中的客户往往背后的一些(可能是透明的)代理做SSL拦截(即中间人攻击)分析encryption内容的恶意软件。 在这种情况下,可用的密码不是由浏览器决定的,而是由拦截代理决定的。 可能是因为拦截设备不支持,所提供的less数密码是不够的,导致required cipher missing

日志显示客户端正在尝试通过SSLv3连接,而不能因为您的服务器不支持SSLv3。 这可能是因为他们正在尝试TLSv1.2,然后是TLSv1.1,然后跳到SSLv3,因为您不支持TLSv1.1或1.2。

将您的ssl_protocols行切换到TLSv1 TLSv1.1 TLSv1.2