Php 什么';关于CURLOPT_SSL_VERIFYPEER的最新建议是什么?

Php 什么';关于CURLOPT_SSL_VERIFYPEER的最新建议是什么?,php,curl,Php,Curl,目前关于CURLOPT_SSL_VERIFYPEER的建议是什么?传统上,我总是将其设置为false,因为在获取https://url时,它总是导致问题 但是现在我读到一条评论,说这允许“中间人”攻击,我已经模糊地知道了,我应该下载文件并设置curl.cainfo config指令。这只能在php.ini文件中设置,这会让一切变得一团糟。我想在我的实际应用程序中设置它。最好不必设置全部,我仍然不明白为什么首先需要设置 我该怎么办?我不想要MITM攻击。为什么PHP没有一个合适的这样的文件?有什么

目前关于CURLOPT_SSL_VERIFYPEER的建议是什么?传统上,我总是将其设置为false,因为在获取https://url时,它总是导致问题

但是现在我读到一条评论,说这允许“中间人”攻击,我已经模糊地知道了,我应该下载文件并设置curl.cainfo config指令。这只能在php.ini文件中设置,这会让一切变得一团糟。我想在我的实际应用程序中设置它。最好不必设置全部,我仍然不明白为什么首先需要设置

我该怎么办?我不想要MITM攻击。为什么PHP没有一个合适的这样的文件?有什么问题吗?

你的回答很好

如果禁用CURLOPT_SSL_VERIFYPEER会发生什么情况?如果你禁用 这张支票,您选择退出证书颁发机构 基础设施,这意味着您选择盲目接受 自签名证书

这会使您面临极其琐碎的中间人攻击。全部的 拦截代理需要做的是提供一个自签名证书 PHP只会信任它,但前提是关闭它

在今天的生态系统中,使用它的唯一真正原因是如果你 正在使用CURLOPT_PINNEDPUBLICKEY,但由于某些原因无法使用 莱森密码

你应该保持这个状态,并确保你正在创建的任何站点都有来自可信CA的良好证书(比如付费证书或来自LetsEncrypt的免费证书)

可以在应用程序级别设置证书应有效且可信的最新文件。更详细的信息在上面的链接中,有一个开源项目是由同一位作者完成的:


如果你愿意,你可以使用它,或者只是看看它的功能,然后在你自己身上构建它

你不应该关掉它,因为它很有用。如果你不能访问https站点,那就意味着你没有下载/安装最新的证书。为什么我没有呢?这不是“https站点”,而是“一些https站点”。这解释了为什么你需要启用它。正确配置和更新的OS、PHP和curl将正确设置证书包。您还可以指定要与curl选项一起使用的CA捆绑包
CURLOPT_CAINFO
,这样就可以在php.ini之外完成。