返回

Debian上OpenSSL、Zscaler和PHP相关TLS/SSL问题指南

php

Debian 上 OpenSSL、Zscaler 和 PHP 问题疑难解答

在 Debian 系统上,配置了 Zscaler 代理服务器进行 TLS/SSL 检查,这可能会导致应用程序出现故障。在本指南中,我们将探讨导致此问题的根本原因并逐步指导您解决这些问题。

问题说明

当从命令行使用 curl、wget 或 OpenSSL 进行测试时,您可能会收到以下错误消息:

Verify return code: 20 (unable to get local issuer certificate)

然而,当使用 -CAfile 参数指定 CA 证书时,测试可以成功。此外,使用 Symfony PHP 框架的应用程序调用 get_file_contents() 函数时会超时。

原因分析

命令行 OpenSSL 使用 CA 证书 :默认情况下,命令行 OpenSSL 工具不会使用系统证书存储中的 CA 证书进行验证。因此,需要使用 -CAfile 参数指定 CA 证书。

get_file_contents() 超时get_file_contents() 函数使用系统证书存储中的 CA 证书进行验证,但由于 Zscaler 代理服务器的 TLS/SSL 检查,无法获取到本地颁发者证书,导致验证失败并超时。

解决步骤

1. 添加 CA 证书到系统证书存储

如果 CA 证书尚未安装到系统证书存储,请将其导入:

sudo cp /etc/ssl/certs/zScalerRootCA.crt /usr/local/share/ca-certificates/zscaler.crt
sudo update-ca-certificates

2. 更新 PHP CA 证书库

更新 PHP CA 证书库,以便应用程序可以访问系统证书存储中的 CA 证书:

sudo apt-get install ca-certificates

3. 配置 PHP 忽略代理

在 PHP 配置文件中(通常为 /etc/php/7.4/cli/php.ini),添加以下行以忽略 Zscaler 代理服务器:

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

4. 重启 Apache 或 Nginx

重启 Web 服务器以使 PHP 配置生效:

sudo systemctl restart apache2

sudo systemctl restart nginx

5. 验证

使用以下命令验证问题是否已解决:

  • 命令行 OpenSSL 测试:
openssl s_client -connect kimai.org:443 -proxy zscalerIP:port

输出应显示“Verify return code: 0 (ok)”。

  • PHP get_file_contents() 函数测试:
php -r 'echo file_get_contents("https://kimai.org");'

输出应返回 Kimai 网站的 HTML。

常见问题解答

1. 我仍然遇到问题,该怎么办?

检查防火墙或安全组设置,确保允许必要的端口通信。您还可以使用 wireshark 或 tcpdump 等网络分析工具来查看网络流量,并排除其他潜在问题。

2. 为什么需要指定 CA 证书?

默认情况下,OpenSSL 工具不信任自签名证书或根证书颁发机构 (CA) 未颁发的证书。因此,需要手动指定 CA 证书以建立信任链。

3. 如何在 PHP 中忽略 Zscaler 代理?

通过在 PHP 配置文件中设置 curl.cainfoopenssl.cafile 参数,可以配置 PHP 忽略 Zscaler 代理。

4. 为什么 PHP 的 get_file_contents() 函数会超时?

由于 Zscaler 代理服务器的 TLS/SSL 检查,get_file_contents() 函数在验证证书时会超时。更新 PHP CA 证书库并忽略代理可以解决此问题。

5. 如何重启 Apache 或 Nginx?

您可以使用 systemctl 命令重新启动 Apache 或 Nginx。对于 Apache,使用 sudo systemctl restart apache2,对于 Nginx,使用 sudo systemctl restart nginx

结论

通过遵循本文中概述的步骤,您应该能够解决 Debian 系统上 OpenSSL、Zscaler 和 PHP 相关的 TLS/SSL 问题。这些问题通常是由缺失的 CA 证书或系统证书存储中的 CA 证书不正确配置引起的。通过仔细执行这些步骤,您可以确保您的应用程序能够安全可靠地与受 Zscaler 代理服务器保护的网站通信。