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 できません。

# 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 年 9 月)、これがサーバー側で行われる作業です。

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_nrpeNagiosサーバー)

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は証明書を必要としないため、「匿名」なので、信頼できないネットワークでは良い計画ではありませんが、この目的には許可されています。)

新しいシステムへの接続に2番目の問題がある可能性があります。クライアント(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再構築します。また、SSLv2「互換性」ClientHelloを試さずにNagiosサーバーで再コンパイルしないように呼び出しを置き換えることもできますSSLv23_client_method()。他のクライアントとの接続が切断される危険性があるため、サーバーを「アップグレード」するために2番目のバイナリが必要になる可能性があり、これをテンプレートで使用できます(しかし私はこれが起こってはならないと思います)。TLSv1_client_method()check_nrpecheck_nrpe_newcommandcheck_command

(最後の手段で悪いことをしたり、socat矛盾stunnelを補償したりする方法は次のとおりです。https://security.stackexchange.com/a/108850/18555.)

より正確な回答を得るには、OpenSSLバージョン(openssl version -aまたは関連パッケージマネージャの出力)とディストリビューションが必要です。

関連情報