gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:22 27 4
gpt4 key购买 nike

我怎样才能得到 LWP验证我正在连接的服务器的证书是否由受信任的机构签署并颁发给正确的主机?据我所知,它甚至不检查证书是否声称是我正在连接的主机名。这似乎是一个主要的安全漏洞(尤其是最近的 DNS 漏洞)。

更新:原来我真正想要的是 HTTPS_CA_DIR,因为我没有 ca-bundle.crt。但是 HTTPS_CA_DIR=/usr/share/ca-certificates/ 成功了。无论如何,我将答案标记为已接受,因为它已经足够接近了。

更新 2:事实证明,HTTPS_CA_DIRHTTPS_CA_FILE 仅在您使用 Net::SSL 作为底层 SSL 库时适用.但 LWP 也适用于 IO::Socket::SSL,它将忽略那些环境变量并愉快地与任何服务器对话,无论它提供什么证书。有更通用的解决方案吗?

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

更新 4: LWP 6.00终于解决了问题。参见 my answer了解详情。

最佳答案

这个长期存在的安全漏洞终于在 libwww-perl 的 6.00 版中得到修复.从该版本开始,默认为 LWP::UserAgent验证 HTTPS 服务器是否提供与预期主机名匹配的有效证书(除非 $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} 设置为假值,或者,如果根本未设置该变量,则为了向后兼容, $ENV{HTTPS_CA_FILE}$ENV{HTTPS_CA_DIR} 已设置)。

这可以由新的 ssl_opts 控制LWP::UserAgent 的选项。有关证书颁发机构证书的位置的详细信息,请参阅该链接。但是要小心,LWP::UserAgent 过去的工作方式,如果您向构造函数提供ssl_opts 散列,那么verify_hostname默认为 0 而不是 1。(This bug 已在 LWP 6.03 中修复。)为了安全起见,请始终在 ssl_opts 中指定 verify_hostname => 1

因此 use LWP::UserAgent 6; 应该足以验证服务器证书。

关于perl - 如何让 LWP 验证 SSL 服务器证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74358/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com