gpt4 book ai didi

perl - LWP::UserAgent 坚持验证主机名

转载 作者:可可西里 更新时间:2023-11-01 15:11:19 49 4
gpt4 key购买 nike

以下脚本在运行 libwww-perl-5.836 的主机上返回综合 header ,但在使用 libwww-perl-6.30.0 的主机上不返回。在这种情况下,脚本会显示以下内容:

    500 Can't connect to backend.mutegroup.org:443 (certificate verify failed)
Content-Type: text/plain
Client-Date: Mon, 28 Jul 2014 21:09:28 GMT
Client-Warning: Internal response

Can't connect to backend.mutegroup.org:443 (certificate verify failed)

LWP::Protocol::https::Socket: SSL connect attempt failed with unknown error error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed at /usr/lib64/perl5/vendor_perl/5.16.3/LWP/Protocol/http.pm line 51.

这是脚本:

#!/usr/bin/perl

use strict;
use warnings;

use LWP::UserAgent;
use HTTP::Request::Common;

my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0, } );
my $url = 'https://backend.mutegroup.org/api/getLastId';

my $request = POST $url;
print $ua->request($request)->as_string

默认情况下,libwww-perl-5.837 及之前的版本不会验证主机名。这就解释了为什么它适用于旧主机。但是,我明确禁用检查并且它仍然坚持执行它们。

这是在 Gentoo 系统上。

最佳答案

您已关闭验证主机名;您没有关闭验证证书。

verify_hostname 控制“LWP 是否将针对安全协议(protocol)方案确保它连接到具有有效证书的服务器匹配预期的主机名”(我强调)。将其设置为 0 允许您连接到具有有效证书但未针对您尝试访问的主机/主机名颁发的服务器。

要关闭检查证书是否有效(由受信任的 CA 颁发),您需要:

use IO::Socket::SSL;

my $ua = LWP::UserAgent->new(
ssl_opts => {
verify_hostname => 0,
SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE,
},
);

请注意,如果您正在传输任何敏感信息或希望信任返回的数据,则关闭这些选项中的任何一个都不是一个好主意。关闭其中任何一个,您将失去 SSL 的优势,并且容易受到各种中间人攻击。

关于perl - LWP::UserAgent 坚持验证主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25000331/

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