我想知道是否有可能强制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实现的解决方案,如果这样的解决方案存在的话,因为我不喜欢放松其他无关应用程序的安全性。当然,我自己也在寻找这样的解决方案,在我丰富的空闲时间里。
2条答案
按热度按时间qojgxg4l1#
更新以解决意见
要绕过 * 所有 * 证书检查,您可以将agent设置为不验证证书。
代理还会将设置向下传递到正在使用的SSL套接字实现。例如,对于
IO::Socket::SSL
,您可以将SSL_verify_mode
设置为0x00
。p5cysglq2#
尝试使用覆盖SSL证书验证
然后再发出https请求。