我想知道是否可以强制 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 实现的解决方案,因为我不想放松其他不相关应用程序的安全性。当然,我自己仍在利用大量的空闲时间寻找这样的解决方案。

有帮助吗?

解决方案

更新以解决评论

绕过 全部 证书检查您可以设置 代理人 最多不验证证书。

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

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

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

其他提示

尝试与重写SSL证书验证

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

在执行HTTPS请求之前。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top