gpt4 book ai didi

perl - OpenSSL DH key 太小错误

转载 作者:太空宇宙 更新时间:2023-11-03 12:45:51 26 4
gpt4 key购买 nike

我正在尝试使用一个简单的 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 库中。

最佳答案

... SSL3_CHECK_CERT_AND_ALGORITHM:dh key too small

I have looked in to using LWP and raw Net:SSLeay, but the problem seems to be in the underlying OpenSSL libs.

虽然它是由 OpenSSL 的更改引起的,但问题实际上出在服务器端。服务器在 key 交换中使用弱 DH key ,由于 Logjam attack,最新版本的 OpenSSL 强制使用非弱 DH key .

如果服务器支持不使用 DH key 交换的密码,您可以通过限制客户端提供的密码使它们不包含任何 DH 密码来解决此问题。

my $sock = IO::Socket::SSL->new(..., SSL_cipher_list => 'DEFAULT:!DH' ...);

除此之外,像您一样简单地禁用任何验证是不好的:

    ...
verify_hostname => 0,
SSL_verify_mode => SSL_VERIFY_NONE,
SSL_verifycn_scheme => undef

首先,verify_hostname 根本不是有效参数(这仅适用于 LWP)。此外,如果您使用 SSL_verify_mode 禁用验证,则无需设置 SSL_verifycn_scheme,因为不验证也意味着不验证证书主题。

但比禁用验证更好的方法是使用 SSL_fingerprint 来指定您期望的证书,这样即使对于自签名或过期的证书也能进行适当的检查。参见 common usage errors在 IO::Socket::SSL 文档中获取更多信息。

关于perl - OpenSSL DH key 太小错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36417224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com