是否可以告诉 php 读取特定的 openssl.cnf 文件而不是默认文件?
# php --info | grep "Openssl"
Openssl default config => /usr/lib/ssl/openssl.cnf
使用 PHP-FPM,因此每个池选项都可以使用php_admin_value[]
或者,如果可能的话,通过将配置文件放置在用户的主目录中来为每个用户(linux)提供配置文件?
尝试按照 ENV 变量https://www.php.net/manual/en/openssl.installation.php但只有全局(/usr/lib/ssl/openssl.cnf)编辑有效。
答案1
编辑:我意识到这可能并不能真正回答整个问题,因为这个解决方案是一个全局的解决方法,而不是每个 fpm 池的解决方法。
在我的场景中,我只是希望 PHP 使用不同的方法,openssl.cnf
因为它需要一些不适合操作系统的典型更改。
PHP 和 OpenSSL 确实很麻烦。您必须将环境变量传递给 fpm-php 可执行文件才能使其正常工作,这说起来容易做起来难……
作为 POC:这将起作用:OPENSSL_CONF=/my/location/openssl.cnf /usr/sbin/php-fpm8.1
问题是让它与 systemV 或 systemD 一起工作。如果文件不存在,
systemV 将查找/etc/default/$NAME
(在此示例中),您可以创建它并添加:/etc/default/php-fpm8.1
OPENSSL_CONF=/my/location/openssl.cnf
理论上/etc/init.d/php8.1-fpm restart
现在应该传递环境变量。
但在 Debian 上,这不起作用。我也对 systemD 进行了更改。(创建覆盖)。
sudo systemctl edit php8.1-fpm
并将全部内容更改为以下内容:
[Service]
EnvironmentFile=/etc/default/php-fpm8.1
这将创建一个覆盖文件,sudo systemctl restart php8.1-fpm
现在将获取系统环境变量并显示新的Openssl default config
。
希望这会有所帮助,并且这些信息对其他人也有帮助。
我还没有在基于 RHEL 的 Linux 上测试过这一点,但我希望 systemD 覆盖能够解决问题。
请注意:PHP(cli)不受影响,为了使其工作,您只需OPENSSL_CONF
在执行之前设置变量。
OPENSSL_CONF=/my/location/openssl.cnf php8.1 -i | grep Openssl
Openssl default config => /my/location/openssl.cnf