perl 我可以强制LWP::UserAgent接受过期的SSL证书吗?

uinbv5nw  于 2022-12-19  发布在  Perl
关注(0)|答案(2)|浏览(116)

我想知道是否有可能强制LWP::UserAgent接受一个过期的SSL证书给一个已知的服务器。这个问题因为Squid代理而稍微复杂了一些。
我甚至设置了这样一个调试环境:

use warnings;
use strict;
use Carp;
use LWP::UserAgent;
use LWP::Debug qw(+);
use HTTP::Cookies;

my $proxy = 'http://proxy.example.net:8118';
my $cookie_jar = HTTP::Cookies->new( file => 'cookies.tmp' );
my $agent = LWP::UserAgent->new;
$agent->proxy( [ 'http' ], $proxy );
$agent->cookie_jar( $cookie_jar );

$ENV{HTTPS_PROXY} = $proxy;
$ENV{HTTPS_DEBUG} = 1;
$ENV{HTTPS_VERSION} = 3;
$ENV{HTTPS_CA_DIR}    = '/etc/ssl/certs';
$ENV{HTTPS_CA_FILE}    = '/etc/ssl/certs/ca-certificates.crt';

$agent->get( 'https://www.example.com/');

exit;

幸运的是,在我能够提出自己的解决方案之前,这个问题最终在远程服务器上得到了修复,但如果问题再次出现,我希望能够有选择地绕过这个问题(在我被要求采取行动之前,底层服务已经中断了几个小时)。
我更倾向于LWP::UserAgent级别的解决方案,而不是基于底层Crypt::SSLeay或openSSL实现的解决方案,如果这样的解决方案存在的话,因为我不喜欢放松其他无关应用程序的安全性。当然,我自己也在寻找这样的解决方案,在我丰富的空闲时间里。

qojgxg4l

qojgxg4l1#

更新以解决意见

要绕过 * 所有 * 证书检查,您可以将agent设置为不验证证书。

$agent->ssl_opts(verify_hostname => 0);

代理还会将设置向下传递到正在使用的SSL套接字实现。例如,对于IO::Socket::SSL,您可以将SSL_verify_mode设置为0x00

$agent->ssl_opts(SSL_verify_mode => 0x00);
p5cysglq

p5cysglq2#

尝试使用覆盖SSL证书验证

$agent->ssl_opts(verify_hostname => 0,
              SSL_verify_mode => 0x00);

然后再发出https请求。

相关问题