首页 / 知识
关于perl:如何获得LWP来验证SSL服务器证书?
2023-04-16 01:20:00

How can I get LWP to validate SSL server certificates?如何获得LWP以验证所连接的服务器的证书是否已由受信任的授权机构签名并颁发给了正确的主机?据我所知,它甚至不检查证书是否声称我正在连接的主机名。这似乎是一个主要的安全漏洞(尤其是最近的DNS漏洞)。
更新:原来我真正想要的是
更新2:事实证明 更新3:不幸的是,解决方案仍未完成。 Net :: SSL或IO :: Socket :: SSL都没有根据证书检查主机名。这意味着某人可以获得某个域的合法证书,然后假冒任何其他域而不会抱怨LWP。 更新4:LWP 6.00最终解决了该问题。有关详细信息,请参见我的答案。
这个长期存在的安全漏洞终于在libwww-perl的6.00版中得以修复。从该版本开始,默认情况下,LWP :: UserAgent会验证HTTPS服务器是否提供与期望的主机名匹配的有效证书(除非
这可以通过LWP :: UserAgent的新ssl_opts选项进行控制。有关该证书颁发机构证书如何定位的详细信息,请参见该链接。但是请注意,LWP :: UserAgent的工作方式是:如果向构造函数提供
因此,
有两种方法可以执行此操作,具体取决于您安装的SSL模块。 LWP文档建议安装Crypt :: SSLeay。如果已完成操作,则将 Crypt :: SSLeay的示例:
请注意,get不是
或者,您可以使用
此版本还会导致
我登陆此页面,寻找一种绕过SSL验证的方法,但是所有答案仍然非常有帮助。 这是我的发现。 对于那些希望绕过SSL验证的用户(不建议这样做,但是在某些情况下您绝对必须这样做),我使用的是lwp 6.05,这对我来说很有效:
我还在带有POST的页面上进行了测试,它也可以正常工作。 关键是使用Net :: SSL以及verify_hostname = 0。 此处介绍的所有解决方案都存在一个主要的安全漏洞,因为它们仅验证证书的信任链的有效性,而不将证书的公用名与您要连接的主机名进行比较。因此,中间的人可能会向您出示任意证书,并且LWP会很乐意接受该证书,只要该证书由您信任的CA签署即可。伪证书的公用名无关紧要,因为LWP从未对其进行过检查。
如果您将
如果直接使用LWP :: UserAgent(而不是通过LWP :: Simple),则可以通过将" If-SSL-Cert-Subject"标头添加到HTTP :: Request对象来验证证书中的主机名。标头的值被视为要应用于证书主题的正则表达式,如果不匹配,则请求失败。例如:
将打印
您对此感到担心是正确的。不幸的是,我认为在我为Perl看过的任何低级SSL / TLS绑定下,都不可能100%安全地做到这一点。 本质上,您需要在握手开始之前传递要连接到SSL库的服务器的主机名。另外,您可以安排在适当的时机进行回调,如果未检出,则中止来自回调内部的握手。编写与OpenSSL的Perl绑定的人似乎很难使回调接口保持一致。 根据服务器的证书检查主机名的方法也取决于协议。因此,这必须是任何完善函数的参数。 您可能想查看是否有到Netscape / Mozilla NSS库的绑定。当我看着它的时候,似乎做得很好。 您也可以考虑使用Net :: SSLGlue(http://search.cpan.org/dist/Net-SSLGlue/lib/Net/SSLGlue.pm)但是,请注意,这取决于最近的IO :: Socket :: SSL和Net :: SSLeay版本。
只需在终端中执行以下命令即可: 它应该解决它。 |
最新内容
相关内容
linux服务器分区命令?
linux服务器分区命令?,系统,管理,信息,设备,时间,命令,基础,首次,平均,情况,linux系统格式化分区用哪个命令Linux的磁盘格式化命令是“mkfs”,远程命令连接linux?
远程命令连接linux?,系统,密码,名称,图片,网络,软件,百度,地址,服务,电脑,Linux系统MySQL如何开启远程连接百度经验:jingyan.baidu.com工具/原连接linux桌面命令?
连接linux桌面命令?,系统,软件,工作,密码,电脑,信息,工具,网站,地址,名称,linux命令行怎么进入桌面返回到我的桌面界面:Ctrl+Alt+F7退出。Ctrl+linux访问连接命令?
linux访问连接命令?,系统,地址,网络,密码,服务,软件,位置,对外,处分,命令,怎么用Linux命令联网1、登陆Linux系统。先使用root账号及密码登陆lilinux服务器上传命令?
linux服务器上传命令?,服务,软件,平台,数据,工具,系统,手机,电脑,设备,官网,从linux服务器中下载或上传文件您要问的是为什么linux服务器一直linux命令行拨号连接?
linux命令行拨号连接?,系统,网络,软件,手机,服务,密码,地址,名称,电话号码,发行,请教名位大吓们:在Linux下如果实现PPOE拨号连接?将eth1和eth0linux命令查看连接数?
linux命令查看连接数?,数字,对比,网络,系统,数据,地址,状态,通讯,信息,命令,linux查看tcp连接数1、允许将TIME-WAIT sockets重新用于新的TCP连linux网络服务器命令?
linux网络服务器命令?,地址,网络,系统,名称,信息,工具,状态,中心,灵活,基础,linux系统下查看网关命令。linux查看网关命令,为您提供linux查看网linux网络服务器命令?
linux网络服务器命令?,地址,网络,系统,名称,信息,工具,状态,中心,灵活,基础,linux系统下查看网关命令。linux查看网关命令,为您提供linux查看网linux命令连接光驱?
linux命令连接光驱?,系统,位置,设备,数据,电脑,服务,资料,盘中,智能,管理,Linux系统下如何挂载U盘,硬盘,光驱1、加挂NTFS文件系统 在目前多数linux跳板机连接命令?
linux跳板机连接命令?,地址,服务,密码,工具,中国,网络,位置,系统,电脑,在线,怎么把本地文件通过跳板机FTP到一台LINUX服务器上面去1、局域中国linux命令查看连接数?
linux命令查看连接数?,数字,对比,网络,系统,数据,地址,状态,通讯,信息,命令,linux查看tcp连接数1、允许将TIME-WAIT sockets重新用于新的TCP连