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

Debian环境下Zscaler代理致OpenSSL及PHP get_file_contents故障求助

Debian下Zscaler代理SSL问题解决方案

问题1:证书已在证书库中,为何命令行openssl仍需指定-CAfile?

Debian系统的SSL证书由ca-certificates包统一管理,系统会把信任证书合并到/etc/ssl/certs/ca-certificates.crt,同时在/etc/ssl/certs目录生成证书哈希值命名的软链接供程序查找。你遇到的情况通常是以下原因导致:

  • zScaler证书未加入系统信任池:仅把证书放到/etc/ssl/certs目录不够,必须执行update-ca-certificates命令更新系统证书链,该命令会将目录内有效证书合并到ca-certificates.crt并生成对应哈希链接。
  • openssl s_client默认不自动加载系统CA库:默认情况下,openssl s_client不会主动读取系统CA证书池,需要显式指定-CApath /etc/ssl/certs或-CAfile /etc/ssl/certs/ca-certificates.crt才能调用系统信任证书,你之前指定单个证书所以成功,未指定则无法找到对应 issuer。
  • 证书哈希链接未生成:如果证书的哈希软链接不存在,openssl无法通过哈希快速定位证书,可手动生成:
    cd /etc/ssl/certs
    ln -s zScalerRootCA.crt $(openssl x509 -hash -noout -in zScalerRootCA.crt).0
    

问题2:如何让get_file_contents()使用系统环境配置正常工作(不硬编码到应用)?

PHP的file_get_contents依赖系统环境和PHP配置处理SSL与代理,按以下步骤配置即可:

1. 确保系统CA证书池包含zScaler证书

先将证书纳入系统信任:

# 将证书放入自定义证书标准目录
sudo cp zScalerRootCA.crt /usr/local/share/ca-certificates/
# 更新系统证书链
sudo update-ca-certificates

2. 配置PHP使用系统CA证书

编辑对应PHP版本的配置文件(如/etc/php/8.2/cli/php.ini或/etc/php/8.2/fpm/php.ini),添加或修改以下参数:

openssl.cafile = "/etc/ssl/certs/ca-certificates.crt"
curl.cainfo = "/etc/ssl/certs/ca-certificates.crt"

修改后重启PHP-FPM或CLI服务(根据应用运行环境调整)。

3. 配置系统代理环境变量

因为网络走Zscaler代理,需设置全局代理变量让PHP自动识别:

# 临时生效(当前终端)
export http_proxy=http://zscalerIP:port
export https_proxy=http://zscalerIP:port
export no_proxy=localhost,127.0.0.1,内部域名 # 按需添加无需代理的地址

# 永久生效(所有用户)
echo -e "http_proxy=http://zscalerIP:port\nhttps_proxy=http://zscalerIP:port\nno_proxy=localhost,127.0.0.1" | sudo tee /etc/environment
# 重启系统或重新登录后生效

如果是PHP-FPM运行的应用,需在FPM池配置文件(如/etc/php/8.2/fpm/pool.d/www.conf)中添加环境变量:

env[http_proxy] = "http://zscalerIP:port"
env[https_proxy] = "http://zscalerIP:port"
env[no_proxy] = "localhost,127.0.0.1"

修改后重启PHP-FPM:

sudo systemctl restart php8.2-fpm

4. 验证配置

用PHP CLI测试file_get_contents:

<?php
$context = stream_context_create([
    'ssl' => [
        'verify_peer' => true,
        'verify_peer_name' => true,
    ]
]);
echo file_get_contents('https://kimai.org', false, $context);
?>

能正常返回内容则说明配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 09:27:10