2008-12-03 81 views
9

我想知道是否有可能强制LWP :: UserAgent接受单个知名服务器的过期SSL证书。这个问题在两者之间的Squid代理有点复杂。我可以强制LWP :: UserAgent接受过期的SSL证书吗?

我去尽可能建立一个调试环境,如:

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; 

好在这个问题最终被固定在远程服务器上,我能够拿出自己的解决方案之前,但我想能够有选择地绕过问题,如果它再次出现(底层服务已被打乱了几个小时,然后才被采取行动)。

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

回答

9

更新,解决了评论

要绕过所有证书检查,您可以设置agent达到无法验证证书。

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

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

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

这有时被引用为解决方案,但它似乎并不适用于我的情况;尽管如此,我没有时间对它进行广泛的测试,而且我可能会犯错误。 我打算在测试环境中验证它是否适用于我。 – 2008-12-09 08:28:22

9

尝试重写SSL证书验证与

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

你做的HTTPS请求之前。

相关问题