与SSL握手的nginx严重错误

我在Ubuntu 14.04 LTS上遇到了问题。 我不时有一个严重的错误:

2015/01/18 12:59:44 [crit] 1065#0: *28289 SSL_do_handshake() failed (SSL: error:140A1175:SSL routines:SSL_BYTES_TO_CIPHER_LIST:inappropriate fallback) while SSL handshaking, client: 10.0.2.2, server: 0.0.0.0:443 

我检查了我的OpenSSL的版本:

 root@www:~# ldd `which nginx` | grep ssl libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f39e236b000) root@www:~# strings /lib/x86_64-linux-gnu/libssl.so.1.0.0 | grep "^OpenSSL " OpenSSL 1.0.1f 6 Jan 2014 

我search了更多关于它的信息,发现它可能是旧版本OpenSSL的问题。 所以我试图编译最新版本:

 wget https://www.openssl.org/source/openssl-1.0.1l.tar.gz && tar xzf && cd openssl-1.0.1l ./config && make && make install 

我也通过符号链接replace了旧的OpenSSL二进制文件:

 ln -sf /usr/local/ssl/bin/openssl `which openssl` 

之后,我有:

 root@www:~# openssl version OpenSSL 1.0.1l 15 Jan 2015 

但是我仍然在nginx中有旧版本:

 root@www:~# strings /lib/x86_64-linux-gnu/libssl.so.1.0.0 | grep "^OpenSSL " OpenSSL 1.0.1f 6 Jan 2014 

在更新OpenSSL后,我在Ubuntu找不到任何其他新的libssl。 如何更新libssl,使nginx可以使用最新的版本?

PS1。 也许关键错误的问题不是关于OpenSSL的版本。

PS2。 我认为这个政治上的错误可能会影响我的整个虚拟机。 我也有一个“不定时”崩溃的问题。

我已经尝试了很多东西,现在我没有希望了。 Stackoverflow请帮忙!

… BYTES_TO_CIPHER_LIST:不合适的回退)而SSL握手,客户端:10.0.2.2,服务器:0.0.0.0:443

这看起来像某人检查服务器是否支持TLS_FALLBACK_SCSV,它在你的情况。 完全不用担心。 相反,这意味着您的服务器支持一个有用的安全功能。 有关TLS_FALLBACK_SCSV以及如何像POODLE这样检测SSL降级攻击的更多信息,您可以查看http://www.exploresecurity.com/poodle-and-the-tls_fallback_scsv-remedy/

TLS_FALLBACK_SCSV是一个相当新的选项,旨在检测SSL降级攻击。 它需要客户端和服务器上的支持。 较老的nginx / OpenSSL和较旧的浏览器根本没有这个选项,所以这个问题不能被检测到,因此没有记录在早期版本中。 这个消息是至关重要的,因为它可能表明一个实际的SSL降级攻击对这个选项失败的客户端。 在实践中,它可能是一些工具探索支持的选项,如SSLLabs 。

参考ssl / ssl_lib.c函数ssl_bytes_to_cipher_list的相关代码:

 /* Check for TLS_FALLBACK_SCSV */ if ((n != 3 || !p[0]) && (p[n-2] == ((SSL3_CK_FALLBACK_SCSV >> 8) & 0xff)) && (p[n-1] == (SSL3_CK_FALLBACK_SCSV & 0xff))) { /* The SCSV indicates that the client previously tried a higher version. * Fail if the current version is an unexpected downgrade. */ if (!SSL_ctrl(s, SSL_CTRL_CHECK_PROTO_VERSION, 0, NULL)) { SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,SSL_R_INAPPROPRIATE_FALLBACK); if (s->s3) ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_INAPPROPRIATE_FALLBACK); goto err; } p += n; continue; } 

会影响客户端发送请求吗? 根据我的理解,客户端发送他的第一个请求到我们的服务器,但也许我们的负载平衡在高负载发生第一次连接失败。 然后客户端尝试将其协议版本降级为重试连接,但由于我们的服务器支持TLS_FALLBACK_SCSV,因此会执行ssl握手失败。

那么以后客户将没有机会连接我们的服务器?

如果我们的负载平衡恢复正常负载,客户端是否有机会成功重试与高协议版本的连接?