nagios SSL 握手

nagios SSL 握手

我有nagios一个客户端在升级后突然出现错误。我重新安装nagios-pluginnrpe再次代理但无法解决错误。该版本nrpexinetd.

# /usr/local/nagios/libexec/check_nrpe -H localhost
CHECK_NRPE: Error - Could not complete SSL handshake.

# netstat -plan | grep :5666
tcp        0      0 :::5666                     :::*                        LISTEN      20265/xinetd

Nagios-server-IP 10.10.3.30

# cat /etc/xinetd.d/nrpe | grep -i only_from
        only_from       = 127.0.0.1 10.10.3.30


# cat /etc/xinetd.d/nrpe
# default: on
# description: NRPE (Nagios Remote Plugin Executor)
service nrpe
{
        flags           = REUSE
        socket_type     = stream
        port            = 5666
        wait            = no
        user            = nagios
        group           = nagios
        server          = /usr/local/nagios/bin/nrpe
        server_args     = -c /usr/local/nagios/etc/nrpe.cfg --inetd
        log_on_failure  += USERID
        disable         = no
        only_from       = 127.0.0.1 10.10.3.30
}

无法从客户端远程登录到服务器

# telnet 10.10.3.30 5666
Trying 10.10.3.30...
Connected to 10.10.3.30.
Escape character is '^]'.
Connection closed by foreign host.

答案1

NRPE已经几年没有更新了(2013年九月),这就是它在服务器端所做的事情

SSL_library_init();
SSLeay_add_ssl_algorithms();
meth=SSLv23_server_method();
...
SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);
...
SL_CTX_set_cipher_list(ctx,"ADH");
dh=get_dh512();

和客户端(check_nrpe在 Nagios 服务器上)

SSL_library_init();
SSLeay_add_ssl_algorithms();
meth=SSLv23_client_method();
...
SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);
...
SSL_CTX_set_cipher_list(ctx,"ADH");

这些SSLv23_xxx功能曾经是连接到任何 SSLv2 或 SSLv3.x 系统的最兼容的方式。以上两者都是已弃用。虽然代码禁用协议版本 2.0 和 3.0(仅保留 TLS),但客户端连接将以 SSLv2 ClientHello 开始。

小于 1024 的 DH 素数是现在被认为不安全(尽管在某些版本的 OpenSSL 中可能是 768)。这解释了为什么您无法连接到自己,OpenSSL 客户端 (check_nrpe) 将拒绝短 DH 密钥。 (使用 ADH 是因为它不需要证书,因此是“匿名的”,在不受信任的网络中不是一个好的计划,但为此目的是可以接受的。)

我怀疑您可能还会遇到连接新系统的第二个问题。可能发生的情况是客户端(NSCA 服务器)已更新为使用最新的 OpenSSL,SSLv2 最近已更新默认禁用,尽管一些发行版多年来一直这样做。在大多数情况下,协议/密码套件中仍应存在重叠,但禁用 SSLv2 的 TLS 服务器(本例中为 nrpe 守护进程)可能会拒绝 SSLv2客户您好握手数据包,即使客户端在握手中指示 SSLv3 或更高版本(技术详细信息请参见此处:https://security.stackexchange.com/questions/59367/what-exactly-determines-what-version-of-ssl-tls-is-used-when-accessing-a-site

要解决此问题,您可能需要在更新的系统上降级 OpenSSL,或者安装没有这些(明智的!)预防措施的并行旧版 OpenSSL。听起来都不是不错的选择......

如果是你nrpe自己建造的,应该就足够了,您需要将调用替换get_dh512()get_dh1024() 使用新的静态 1024 位密钥重新编译它 - 为此,您需要通过修改configure(第 6748 行)中的硬编码 512 并重新运行它,或者使用

opensl dhparam -C 1024 | awk '/^-----/{exit} {print}' > include/dh.h

然后make重建。您可能还需要将调用替换SSLv23_client_method()TLSv1_client_method()also,以便不会尝试SSLv2“兼容”ClientHello 并check_nrpe在Nagios 服务器上重新编译。由于您面临与其他客户端的连接中断的风险,因此您可能需要第二个check_nrpe_new二进制文件用于“升级”服务器,并在您的模板中使用它 commandcheck_command但我认为这不应该发生)。

(作为最后的手段,您可能可以做一些不漂亮的事情socatstunnel弥补任何不匹配,这是一种方法:https://security.stackexchange.com/a/108850/18555.)

更精确的答案需要 OpenSSL 版本(openssl version -a或相关的包管理器输出)和您的发行版本。

相关内容