ssl - SSL 握手的 nginx 严重错误

标签 ssl nginx openssl ubuntu-14.04

我在 Ubuntu 14.04 LTS 上的 nginx 有问题。有时我会收到严重错误:

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

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

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

./config && make && make install

我还通过符号链接(symbolic link)用新的 OpenSSL 二进制文件替换了旧的 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 可以使用最新版本?

附注 1。也许严重错误的问题与 OpenSSL 的版本无关。

附注 2。我认为这个严重错误可能会影响我的整个虚拟机。我还遇到了“不时”VM 崩溃的问题。

我已经尝试了很多事情,现在我绝望了。 Stackoverflow 请帮忙!

最佳答案

...BYTES_TO_CIPHER_LIST:inappropriate fallback) while SSL handshaking, client: 10.0.2.2, server: 0.0.0.0:443

这看起来像是有人在检查服务器是否支持 TLS_FALLBACK_SCSV,在您的情况下确实如此。完全不用担心。相反,这意味着您的服务器支持有用的安全功能。有关 TLS_FALLBACK_SCSV 以及如何检测 SSL 降级攻击(如 POODLE)的更多信息这样你可以看看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;
        }

关于ssl - SSL 握手的 nginx 严重错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28010492/

相关文章:

linux - AWS/Ubuntu 存档服务器似乎已关闭?

node.js - 在没有 SSL 证书的情况下通过 Nginx 转发 HTTPS 流量

python - 通过 starttls 方法从 smtplib 登录到旧电子邮件服务器

java - tomcat SSL请求参数丢失

php - Nginx 和 PHP-FPM 502 网关错误

SSL 握手失败 - verisign 链证书 - 包含两个 CA 签名证书和一个自签名证书

c - 在 AES 密码对象上禁用 PKCS#7 填充?

ssl - 当我尝试启动 ProFTPD 服务器时 Webmin 发送 fatal error

asp.net - 从 IIS 6 中的 url 中删除 www

apache - 使用通配符子域和 ssl 设置复杂的 htaccess