|
|
1
39
这个长期存在的安全漏洞终于在6.00版本中得到了修复
libwww-perl
默认情况下,从该版本开始
LWP::UserAgent
验证HTTPS服务器是否提供与预期主机名匹配的有效证书(除非
这可以通过新的
ssl_opts
LWP::UserAgent的选项。有关如何定位证书颁发机构证书的详细信息,请参阅该链接。但是
小心
,LWP::UserAgent过去的工作方式,如果您提供
所以
|
|
|
2
9
根据您安装的SSL模块,有两种方法可以做到这一点。这个
LWP docs recommend installing Crypt::SSLeay
.如果这就是你所做的,设置
Crypt::SSLeay示例:
请注意,get不会
或者,您可以使用
此版本还导致
|
|
|
3
6
我来到这个页面是为了寻找绕过SSL验证的方法,但所有的答案仍然非常有帮助。以下是我的发现。对于那些希望绕过SSL验证的人(不建议,但可能在某些情况下你绝对必须这样做),我使用的是lwp 6.05,这对我很有效:
我还用POST在一个页面上进行了测试,它也起作用了。关键是使用Net::SSL以及verify_hostname=0。 |
|
|
4
2
如果您直接使用LWP::UserAgent(而不是通过LWP:;Simple),则可以通过在HTTP::Request对象中添加“If SSL Cert Subject”标头来验证证书中的主机名。标头的值被视为应用于证书主题的正则表达式,如果不匹配,则请求失败。例如:
将打印
|
|
|
5
2
这里提供的所有解决方案都包含一个主要的安全缺陷,即它们只验证证书信任链的有效性,而不将证书的公用名与您连接的主机名进行比较。因此,中间的人可能会向您提供任意证书,只要该证书由您信任的CA签名,LWP就会很乐意接受该证书。伪造证书的通用名无关紧要,因为LWP从未检查过它。
如果你正在使用
|
|
|
6
1
您也可以考虑Net::SSLGlue( http://search.cpan.org/dist/Net-SSLGlue/lib/Net/SSLGlue.pm )但是,请注意,这取决于最近的IO::Socket::SSL和Net::SSLay版本。 |
|
|
7
1
你担心这件事是对的。不幸的是,我认为在我为Perl研究的任何低级SSL/TLS绑定下都不可能做到100%安全。 本质上,在握手开始之前,您需要传入要连接到SSL库的服务器的主机名。或者,您可以安排在正确的时刻发生回调,如果回调未检出,则从回调内部中止握手。编写Perl绑定到OpenSSL的人似乎很难使回调接口保持一致。 根据服务器的证书检查主机名的方法也取决于协议。因此,这必须是任何完美函数的参数。 您可能想看看是否有任何与Netscape/Mozilla NSS库的绑定。当我看到它时,它似乎很擅长这样做。 |
|
|
8
0
只需在终端中执行以下命令: sudo cpan安装Mozilla::CA 它应该能解决这个问题。 |