由于握手问题,PerL SSL连接尝试失败

时间:2014-10-29 11:52:51

标签: perl ubuntu ssl curl openssl


我希望有人可以提供帮助,我使用的是nagios插件check_ilo2_health,该插件在我们的OpenSuSE系统上工作正常,但新的Ubuntu 14.04系统存在问题,删除了nagios的东西并运行perl,基本上是这样的:

perl -e 'use IO::Socket::SSL qw(debug3);IO::Socket::SSL->new(SSL_hostname => "", PeerAddr=>"10.0.0.1:443",  Proto=>"tcp",SSL_verify_mode => SSL_VERIFY_NONE)or die $!'

我使用自签名证书连接到HP ILO2并获得回复:

DEBUG: .../IO/Socket/SSL.pm:2503: new ctx 19182624
DEBUG: .../IO/Socket/SSL.pm:526: socket not yet connected
DEBUG: .../IO/Socket/SSL.pm:528: socket connected
DEBUG: .../IO/Socket/SSL.pm:550: ssl handshake not started
DEBUG: .../IO/Socket/SSL.pm:586: not using SNI because hostname is unknown
DEBUG: .../IO/Socket/SSL.pm:647: Net::SSLeay::connect -> 0
DEBUG: .../IO/Socket/SSL.pm:695: connection failed - connect returned 0
DEBUG: .../IO/Socket/SSL.pm:1757: SSL connect attempt failed because of handshake problems
DEBUG: .../IO/Socket/SSL.pm:2537: free ctx 19182624 open=19182624
DEBUG: .../IO/Socket/SSL.pm:2549: OK free ctx 19182624
IO::Socket::SSL: SSL connect attempt failed because of handshake problems error:140943FC:SSL routines:SSL3_READ_BYTES:sslv3 alert bad record mac        ...propagated at -e line 1.

如果我在curl中运行它:

curl "https://10.0.0.1" --insecure

它可以从国际劳工组织返回页面。

我想告诉perl或openSSL忽略任何证书问题,因为这是一个监控系统,很多服务器都使用自签名证书。

关于可以做些什么的任何想法?

版本:

Perl Version: This is perl 5, version 18, subversion 2 (v5.18.2) built for x86_64-linux-gnu-thread-multi
Crypt::SSLeay   0.72
IO::Socket::SSL 1.997
Net::SSLeay     1.66

提前致谢

2 个答案:

答案 0 :(得分:3)

  

我想告诉perl或openSSL忽略任何证书问题,因为这是一个监控系统,很多服务器都使用自签名证书。

您正在执行此操作,即使用SSL_VERIFY_NONE的SSL_verify_mode。

  

IO :: Socket :: SSL:由于握手问题导致SSL连接尝试失败错误:140943FC:SSL例程:SSL3_READ_BYTES:sslv3警告错误记录mac ...在-e第1行传播。

奇怪,但我已经看过其他报道" HP ILO2"和bad_record_mac。 尝试将版本减少到SSL 3.0,例如SSL_version => "SSLv3"

但是因为POODLE会使SSL 3.0不是一个令人满意的解决方案,所以我有兴趣看一下curl工作的SSL握手(上传到cloudshark.org)。

答案 1 :(得分:0)

当连接到仅支持SSLv2的服务器时,Net :: LDAP(也使用IO :: Socket :: SSL)会发生相同的错误。

IO :: Socket :: SSL默认根据手册页“在SSLv2和SSLv3之间自动协商”,因此省略SSL_version可使脚本与较旧的服务器一起使用。

或者,更乐观的是,当管理员四处升级服务器时,脚本仍然可以工作!