gpt4 book ai didi

perl - Mojo::UserAgent 证书验证失败

转载 作者:太空宇宙 更新时间:2023-11-03 13:09:34 25 4
gpt4 key购买 nike

我想访问无法验证证书的网站(主机名不正确,我无法更改/更新我的应用程序指向的服务器上的证书)。我正在使用 Mojo::UserAgent 来获取请求。那么如何忽略它并继续连接到该网站呢?我已经看到没有选项。

我不想使用 LWP::UserAgent

我已经使用 WWW::CurlWWW::Curl::Easy 完成了它,但我想使用 Mojo::UserAgent 清理代码(在我的整个应用程序中使用)。

最佳答案

hostname not correct ... So how would go about ignoring this and continues to connect to the website?

仅仅因为主机名与证书不匹配就放弃任何类型的验证是一个非常糟糕的主意。为什么要使用 TLS?

更好的方法是预先知道您期望获得哪个证书,并验证您是否确实获得了这个证书。这可以通过选项 SSL_fingerprint 轻松完成。不幸的是,Mojo::UserAgent 不提供设置连接特定参数的方法,因此您需要在连接之前立即设置它,然后再进行其他连接:

use IO::Socket::SSL 1.980;
IO::Socket::SSL::set_client_defaults(
SSL_fingerprint => "sha256$55a5dfaaf..."
);
... use Mojo::UserAgent to connect ..
IO::Socket::SSL::set_client_defaults(); # set back

有关使用此选项以及如何获取指纹的更多信息,请参阅 Certificate error in Perl .

如果只有主机名是错误的,另一种方法是使用 SSL_verifycn_name 选项来指定您在证书中期望的主机名。

IO::Socket::SSL::set_client_defaults(
SSL_verifycn_name => 'foo.example.com',
);

另一种方法可以使用 set_args_filter_hack 函数来完成,该函数旨在处理设置奇怪默认值或不允许用户设置自己的值的模块:

my $hostname = undef;
IO::Socket::SSL::set_args_filter_hack(
sub {
my ($is_server,$args) = @_;
$args->{SSL_verifycn_name} = $hostname if $hostname;
}
);
...
$hostname = 'foo.example.com';
... do something with Mojo::UserAgent ...
$hostname = undef;

这样您就可以为每次 SSL 握手调整设置。

有关详细信息,请参阅 documentation of IO::Socket::SSL ,尤其是关于常见使用错误的部分。这部分还记录了如果证书的某些部分有误,您应该做什么而不是禁用任何类型的验证。


'SSL connect attempt failed error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol'
curl ... SSL connection using TLS_RSA_WITH_RC4_128_MD5

我猜您在这里遇到的问题与证书验证无关。鉴于此服务器使用的是非常古老的密码 RC4-MD5,我将假设该服务器只能处理 SSL 3.0。由于 IO::Socket::SSL 中的安全原因,此版本已被禁用一段时间。明确暂时使用这个不安全的版本:

IO::Socket::SSL::set_client_defaults(
SSL_version => 'SSLv3'
);

关于perl - Mojo::UserAgent 证书验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35197010/

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