SMTP SEND CRITICAL - invalid SSL_version specified at /usr/share/perl5/IO/Socket/SSL.pm line 368
我正在使用 nagios 脚本 /usr/lib/nagios/plugins/check_smtp_send 使用 gmail 发送电子邮件。
当我添加诊断时,我得到以下信息:
SMTP SEND CRITICAL - invalid SSL_version specified(SSLv3 TLSv1) at /usr/share/perl5/IO/Socket/SSL.pm line 368
Ubuntu 14.04 与发行版中的标准 nagios。
有人知道如何解决这个问题吗?
答案1
check_smtp_send 中的代码有错误。它要么直接指定无效字符串SSL_version
,要么使用这样做的模块(非常旧且未维护的模块Net::SMTP::TLS
因此错误而闻名)。它可能在较新版本的代码中已修复。
但考虑到我不知道你正在运行哪个操作系统,该代码属于哪个包,如果这是一个已知的错误,我真的无法帮助,而是说它要么已经修复,你应该升级,要么需要修复。在后一种情况下,我可以提供帮助,但我需要访问相关代码。
有关此类问题的更多信息,您可能会在以下位置找到/usr/share/perl5/IO/Socket/SSL.pm 第 332 行指定的 SSL_version 无效。在那里您可以找到直接原因(错误的 SSL_version)、间接原因(在较新版本的 IO::Socket::SSL 中对 SSL_version 进行更严格的检查)以及如何在代码中修复它(修复有问题的代码中的 SSL_version,不要通过更改 IO::Socket::SSL 来解决此问题)。
基于https://exchange.nagios.org/directory/Plugins/Email-and-Groupware/check_email_delivery/details: - 该软件包最后更新于 2011 年 - 它使用旧的Net::SMTP::TLS
导致问题
解决方法是简单地从 Net::SMTP::TLS 中删除设置错误 SSL_version 的部分。这应该是第 182 行,请参阅https://metacpan.org/source/AWESTHOLM/Net-SMTP-TLS-0.12/lib/Net/SMTP/TLS.pm#L182。
前:
if(not IO::Socket::SSL::socket_to_SSL($me->{sock},
SSL_version => "SSLv3 TLSv1")){
croak "Couldn't start TLS: ".IO::Socket::SSL::errstr."\n";
}
后:
if(not IO::Socket::SSL::socket_to_SSL($me->{sock})){
croak "Couldn't start TLS: ".IO::Socket::SSL::errstr."\n";
}