You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让PHP 8.3.10访问本地Windows证书?IIS环境HTTPS请求异常

解决IIS+PHP环境下HTTPS请求失败问题

核心问题概述

服务器无SSL证书,仅在IIS和PHP交互shell中出现HTTPS请求异常:

  • HTTP请求通过cURL和file_get_contents()均可正常发起
  • HTTPS请求时,file_get_contents()报错,cURL无响应
  • 已配置openssl.cafile、curl.cainfo,开启allow_url_fopen = On、allow_url_include = On,并启用php openSSL扩展,但问题未解决

排查与解决方案

1. 临时跳过SSL证书验证(仅测试环境使用)

如果是测试场景,可以临时关闭SSL证书验证来确认是否为证书信任问题:

修改cURL代码:

<?php
$ch = curl_init();
$url = "https://example.com";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 关闭证书验证(测试用)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
// 增加错误输出便于排查
if(curl_errno($ch)){
    echo 'Curl错误: ' . curl_error($ch);
}
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>

修改file_get_contents代码:

<?php
$url = "https://example.com";
// 创建跳过SSL验证的上下文
$context = stream_context_create([
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false
    ]
]);
$response = file_get_contents($url, false, $context);
// 输出错误详情
if($response === false){
    $error = error_get_last();
    echo '错误信息: ' . $error['message'];
}
echo $response;
?>

2. 检查IIS的SSL/TLS配置

  • 确认IIS服务器启用了TLS 1.2及以上版本:进入IIS管理器 -> 服务器节点 -> 检查SSL协议设置,禁用TLS 1.0、1.1等旧版本
  • 检查系统根证书存储:确保服务器已安装完整的根证书包(PHP可能优先调用系统证书存储而非php.ini配置的cafile)

3. 验证PHP扩展与配置的实际生效状态

  • 在PHP交互shell中执行php -m,确认openssl和curl扩展已加载
  • 执行php --ini查看当前使用的php.ini路径,确认之前的配置修改是在该文件中进行的
  • 修改php.ini后重启IIS服务,确保配置生效

4. 修复CA证书配置

  • 下载最新的根证书包,替换curl.cainfo和openssl.cafile指向的文件
  • 确认证书文件路径为绝对路径,且PHP进程对该文件有读取权限

内容的提问来源于stack exchange,提问作者doge guide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:13:18