gpt4 book ai didi

php - 使用curl调用时Azure网站使用错误的SSL证书(错误51)

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:55 25 4
gpt4 key购买 nike

我在 Azure 网站上有一个项目,托管一个 API,该 API 只能使用 HTTPS 访问,并使用我的自定义 .com 域。 A 记录已创建到 .com 域,该域运行正常。 SSL 证书已购买、上传,并且 SSL 绑定(bind)已在管理面板中正确设置。

当我使用 IE/Chrome/FF 访问 API 方法时,会显示正确的证书(为我的 .com 域颁发)。当我使用以下 PHP 代码和curl 访问它时,我收到一条错误消息,就好像服务器使用默认的 *azurewebsites.com 证书进行响应一样,但由于向 .com 域发出了请求,该证书会失败。

$ch = curl_init('https://mydomain.com/api/v1/method');
$cabundle = dirname(__FILE__).'/ca-bundle.crt';

curl_setopt( $ch, CURLOPT_POST, 1);
curl_setopt( $ch, CURLOPT_POSTFIELDS, $jsonRequest);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt( $ch, CURLOPT_HEADER, 0);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt( $ch, CURLOPT_CAINFO, $cabundle);

$content = curl_exec($ch);
$curlInfo = curl_getinfo($ch);

(如您所见,如果我运行将 $cabundle 变量作为参数传递的 file_exists,我已经在使用验证证书所需的 CA 文件,它返回 true)

我得到的错误:

curl error 51: SSL: certificate subject name '*.azurewebsites.net' does not match target host name 'mydomain.com' content

如前所述,如果我使用浏览器访问相同的 URL,我的 .com 域的正确证书就是查看证书详细信息屏幕中显示的证书。

对于curl请求/验证正确的证书,或者Azure响应所请求的域的正确证书,我应该做什么?

PS:将CURLOPT_SSL_VERIFYPEER设置为false,或将CURLOPT_SSL_VERIFYHOST设置为01 > 不是选项,安全对于这个项目至关重要,MITM 攻击可能非常有害。

最佳答案

可能同一 IP 后面有多个证书,您需要使用 SNI(服务器名称指示,例如服务器名称在 SSL 握手中发送)。并非所有版本的curl都支持SNI,请查看Use cURL with SNI (Server Name Indication) .

关于php - 使用curl调用时Azure网站使用错误的SSL证书(错误51),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23932315/

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