Php 本地SSL https请求上的错误
我在Digital Ocean上有一个UbuntuLamp服务器,并设置了一个SSL证书(工作非常好)。该网站通过https运行(http请求被重定向到https)。在我的一个PHP脚本中,我必须向本地服务器发送一个cURL请求。我基本上是发送一个带有JSON数据的POST请求,该请求将用于在另一端模板化文档。简言之,两端都位于同一站点上:Php 本地SSL https请求上的错误,php,ssl,curl,https,Php,Ssl,Curl,Https,我在Digital Ocean上有一个UbuntuLamp服务器,并设置了一个SSL证书(工作非常好)。该网站通过https运行(http请求被重定向到https)。在我的一个PHP脚本中,我必须向本地服务器发送一个cURL请求。我基本上是发送一个带有JSON数据的POST请求,该请求将用于在另一端模板化文档。简言之,两端都位于同一站点上: https://example.com/form.php https://example.com/templates/document.php 将数据从
https://example.com/form.php
https://example.com/templates/document.php
form.php
发送到templates/document.php
时出现的cURL错误是:
SSL证书问题:无法获取本地颁发者证书
我读过至少20篇文章,告诉我在php.ini的原始行位置添加这些行:
curl.cainfo=“/etc/ssl/certs/cacert.pem”
openssl.cafile=“/etc/ssl/certs/cacert.pem”
CURLOPT\u SSL\u VERIFYPEER
到false
来绕过此错误。然而,我知道这不是一个在生产模式的网站选择
不可能对自己的主机执行这样的SSL cURL请求吗?还是因为它只是一个本地请求,所以我可以对这个非常特定的请求禁用CURLOPT\u SSL\u VERIFYPEER
提前谢谢你
编辑:
向cURL请求添加详细选项将显示以下信息:
- 正在尝试123.456.789.01
- 已连接到example.com(123.456.789.01)端口443(#0)
- ALPN,提供http/1.1
- 密码选择:全部:!出口:!出口40:!出口56:!阿努尔:!低:!RC4:@强度
- 已成功设置证书验证位置:
- CAfile:/etc/ssl/certs/cacert.pem CApath:/etc/ssl/certs
- SSL证书问题:无法获取本地颁发者证书
- 正在关闭连接0
不过,它似乎没有任何帮助。我的猜测是,卷曲部分可能无法读取cafile。或者cacert.pem本身有问题。你能通过命令行连接吗?
卷曲吗https://example.com/templates/document.php --verbose--cacert/var/ssl/cacert.pem
工作吗?如果您向Web用户发出su请求,它是否有效?是否不可能向其自己的主机发出此类SSL cURL请求?
为什么不可能。但是如果我没有弄错的话,VERIFYPEER
更能防止“中间人”类型的攻击。所以,它可能仍然不理想。恐怕这是另一个问题,但在我的例子中,curl没有连接到123.456.789.01,而是连接到127.0.0.1。这就是解决方案:@DominikSpäte-刚刚尝试过,不幸的是,同样的结果。@StefanM该命令有效,它甚至可以用于webuser www数据。但在PHP中不能使用curl()。我已经仔细检查了我是否使用了相同的参数。