【发布时间】:2020-06-25 21:23:44
【问题描述】:
我正在尝试使用简单的 PERL 脚本连接到封闭的服务器 - 空调
#!/usr/bin/perl
use 5.10.1;
use warnings;
use strict;
use IO::Socket::SSL;
use IO::Socket::SSL qw/debug3/;
my $sock = IO::Socket::SSL->new(
PeerHost => '192.168.1.4',
PeerPort => 2878,
verify_hostname => 0,
SSL_verify_mode => SSL_VERIFY_NONE,
SSL_verifycn_scheme => undef
) or die "failed connect or ssl handshake: $!,$SSL_ERROR";
print "$sock\n";
现在,这一切都运行良好,然后我更新了 OpenSSL (libssl1.0.0) 准确地说,一切都崩溃了:
DEBUG: .../IO/Socket/SSL.pm:220: set domain to 2
DEBUG: .../IO/Socket/SSL.pm:1653: new ctx 1984680
DEBUG: .../IO/Socket/SSL.pm:363: socket not yet connected
DEBUG: .../IO/Socket/SSL.pm:365: socket connected
DEBUG: .../IO/Socket/SSL.pm:383: ssl handshake not started
DEBUG: .../IO/Socket/SSL.pm:446: Net::SSLeay::connect -> -1
DEBUG: .../IO/Socket/SSL.pm:1328: SSL connect attempt failed with unknown error error:14082174:SSL routines:SSL3_CHECK_CERT_AND_ALGORITHM:dh key too small
DEBUG: .../IO/Socket/SSL.pm:452: fatal SSL error: SSL connect attempt failed with unknown error error:14082174:SSL routines:SSL3_CHECK_CERT_AND_ALGORITHM:dh key too small
DEBUG: .../IO/Socket/SSL.pm:1328: IO::Socket::INET6 configuration failed error:00000000:lib(0):func(0):reason(0)
DEBUG: .../IO/Socket/SSL.pm:1690: free ctx 1984680 open=1984680
DEBUG: .../IO/Socket/SSL.pm:1698: OK free ctx 1984680
failed connect or ssl handshake: ,IO::Socket::INET6 configuration failed error:00000000:lib(0):func(0):reason(0) at ./spare line 9.
我很乐意使用任何替代软件包来解决这个问题,但我确实需要解决它,因为我无法更新空调上的证书...
我曾考虑使用 LWP 和原始 Net:SSLeay,但问题似乎出在底层 OpenSSL 库中。
【问题讨论】:
-
用于 SSL/TLS 的证书密钥多长时间?推荐值为 4096 或至少 2048。
-
回声 | openssl s_client -connect 192.168.1.4:2878 2>/dev/null | openssl x509 -text -noout | grep "Public-Key" 公钥:(1024 位)