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

fB.*_*fB. 10 perl https openssl squid lwp

我想知道是否有可能强制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;
Run Code Online (Sandbox Code Playgroud)

幸运的是,在我能够提出自己的解决方案之前,问题最终已在远程服务器上得到修复,但我希望能够有选择地避免问题再次出现(基础服务在我之前已经中断了几个小时)被召唤行动).

如果存在这样的解决方案,我倾向于使用基于Crypt :: SSLeay或openSSL实现的LWP :: UserAgent级别的解决方案,因为我不想放松其他不相关应用程序的安全性.当然,在我丰富的空闲时间里,我仍然在寻找这样一个解决方案.

jos*_*rry 10

更新以发表评论

要绕过所有证书检查,您可以将代理设置为不验证证书.

$agent->ssl_opts(verify_hostname => 0);
Run Code Online (Sandbox Code Playgroud)

代理还将设置向下传递给正在使用的SSL套接字实现.例如,IO::Socket::SSL您可以设置SSL_verify_mode0x00.

$agent->ssl_opts(SSL_verify_mode => 0x00);
Run Code Online (Sandbox Code Playgroud)

  • 有时这被引用为解决方案,但在我的情况下似乎不起作用;不过,我没有时间对其进行广泛的测试,而且我很可能犯了错误。我计划在测试环境中验证这是否适合我。 (2认同)

And*_*des 10

尝试覆盖SSL证书验证

$agent->ssl_opts(verify_hostname => 0,
              SSL_verify_mode => 0x00);
Run Code Online (Sandbox Code Playgroud)

在执行https请求之前.