相关疑难解决方法(0)

如何让LWP验证SSL服务器证书?

如何让LWP验证我连接的服务器的证书是否由受信任的机构签名并发送给正确的主机?据我所知,它甚至没有检查证书声称是否为我正在连接的主机名.这似乎是一个主要的安全漏洞(特别是最近的DNS漏洞).

更新: 事实证明我真正想要的是HTTPS_CA_DIR,因为我没有ca-bundle.crt.但是HTTPS_CA_DIR=/usr/share/ca-certificates/诀窍呢.无论如何,我将答案标记为已被接受,因为它足够接近.

更新2:事实证明,HTTPS_CA_DIR并且HTTPS_CA_FILE仅当您正在使用的Net :: SSL作为底层的SSL库申请.但LWP也适用于IO :: Socket :: SSL,它将忽略这些环境变量并愉快地与任何服务器通信,无论它呈现什么证书.有更通用的解决方案吗?

更新3:不幸的是,解决方案仍然不完整.Net :: SSL和IO :: Socket :: SSL都没有根据证书检查主机名.这意味着某人可以获得某个域的合法证书,然后在没有LWP抱怨的情况下冒充任何其他域.

更新4: LWP 6.00终于解决了这个问题.详情请见我的回答.

perl ssl https lwp

44
推荐指数
3
解决办法
8万
查看次数

HTTPS代理和LWP :: UserAgent

我已经阅读了很多网站上的一些帖子,但仍然无法完成这项工作.

我有一台运行perl 5.12.4的OpenSSL 0.9.8r客户机(OSX),LWP 6.0.4,更新了Crypt :: SSLeay,Net :: SSL等.我正在尝试连接到HTTPS站点(https:/通过我在Windows VM上运行的WinGate代理,在示例中为/github.com.请注意,我的实际应用程序附加到我无法控制的SSL Web服务.

从Firefox,指向代理一切都是copacetic.页面加载成功,我在代理软件活动监视器中看到了连接.如果我能在Perl中工作,我会很高兴.我从这个Stack Overflow问题的代码开始:如何强制LWP使用Crypt :: SSLeay进行HTTPS请求?并添加了一些调试和额外的输出.我现在站在这里:

#!/usr/bin/perl

use strict;
use warnings;
use Net::SSL (); # From Crypt-SSLeay

BEGIN {
  $Net::HTTPS::HTTPS_SSL_SOCKET_CLASS = "Net::SSL"; # Force use of Net::SSL
  $ENV{HTTPS_PROXY} = 'https://192.168.1.11:80';
#  $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
  $ENV{HTTPS_DEBUG} = 1;  #Add debug output
}

use LWP::UserAgent;
my $ua = LWP::UserAgent->new();
my $req = HTTP::Request->new('GET','https://github.com/');
my $response = $ua->request($req);

print "--\n";
print "$_\n" for grep { $_ =~ /SSL/ …
Run Code Online (Sandbox Code Playgroud)

perl https proxy lwp lwp-useragent

6
推荐指数
1
解决办法
3万
查看次数

标签 统计

https ×2

lwp ×2

perl ×2

lwp-useragent ×1

proxy ×1

ssl ×1