在服务器运维和 Web 开发领域,CentOS 7 曾凭借其卓越的稳定性和长期支持,成为众多企业和开发者的首选操作系统,随着时间的推移,其默认的软件版本逐渐显得陈旧,尤其是在 PHP 及其关键扩展(如 OpenSSL)的管理和使用上,常常会遇到各种挑战,PHP-OpenSSL 扩展是实现 HTTPS 安全通信、数据加密解密、数字证书处理等安全功能的核心,深入理解在 CentOS 7 环境下如何检查、安装、配置及排查 PHP-OpenSSL 扩展,对于保障 Web 应用安全至关重要。
检查当前 PHP 与 OpenSSL 状态
在进行任何操作之前,首先需要明确当前系统的状态,这包括 PHP 的版本、是否已安装 OpenSSL 扩展,以及该扩展所依赖的底层 OpenSSL 库的版本。
检查 PHP 版本
通过终端执行以下命令,可以轻松查看当前系统默认的 PHP 版本,CentOS 7 默认仓库提供的是 PHP 5.4 版本,这个版本早已停止官方支持,存在严重的安全隐患。
php -v
检查 PHP-OpenSSL 扩展是否已安装
确认 PHP 版本后,下一步是检查 OpenSSL 扩展是否被加载,有两种常用方法:
命令行检查: 使用
php -m
命令列出所有已编译的模块,并通过grep
过滤出openssl
。php -m | grep openssl
如果输出包含
openssl
字样,则说明扩展已安装。创建一个包含 <?php phpinfo(); ?>
的 PHP 文件,通过 Web 服务器访问,在页面中搜索 “OpenSSL”,可以查看到更详细的配置信息,如 OpenSSL 头部版本(Header version)和库版本(Library version),这对于诊断兼容性问题非常有帮助。
安装 PHP-OpenSSL 扩展
根据检查结果,如果发现 OpenSSL 扩展未被安装,就需要进行安装操作,这里需要区分两种情况:为系统默认的 PHP 5.4 安装,以及为使用 SCL(Software Collections)安装的更高版本 PHP 安装。
为系统默认 PHP 5.4 安装
对于仍在使用默认 PHP 5.4 的环境(极不推荐),安装过程非常简单。
sudo yum install php-openssl
安装完成后,必须重启 Web 服务器(如 Apache 或 Nginx)或 PHP-FPM 服务以使更改生效。
# 对于 Apache sudo systemctl restart httpd # 对于 Nginx (使用 PHP-FPM) sudo systemctl restart php-fpm
为现代 PHP 版本(如 PHP 7.4)安装
由于 CentOS 7 默认仓库不提供现代 PHP 版本,社区广泛采用 Remi’s Repository 来解决此问题,SCL 允许你在同一系统中安装和使用多个版本的软件,而不会与系统默认版本冲突。
以下是在 CentOS 7 上使用 Remi 仓库安装 PHP 7.4 及其 OpenSSL 扩展的典型步骤:
安装 EPEL 和 Remi 仓库:
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
启用 Remi 的 PHP 7.4 模块:
sudo yum-config-manager --enable remi-php74
安装 PHP 7.4 及 OpenSSL 扩展:
注意,SCL 中的软件包通常带有特定前缀,如rh-php74
。sudo yum install -y rh-php74 rh-php74-php-fpm rh-php74-php-mysqlnd rh-php74-php-openssl
在这个命令中,
rh-php74-php-openssl
PHP 7.4 对应的 OpenSSL 扩展包。启动并启用 PHP-FPM 服务:
sudo systemctl start rh-php74-php-fpm sudo systemctl enable rh-php74-php-fpm
配置 Web 服务器:
需要配置 Nginx 或 Apache,使其将通过 SCL 安装的 PHP-FPM 作为后端处理器,这通常涉及修改 FastCGI 传递的地址或 socket 路径。
特性 | 系统默认 PHP 5.4 | SCL (Remi) PHP 7.4 |
---|---|---|
安装命令 | yum install php-openssl | yum install rh-php74-php-openssl |
服务名称 | php-fpm | rh-php74-php-fpm |
配置文件路径 | /etc/php.ini | /etc/opt/rh/rh-php74/php.ini |
安全性 | 低,已 EOL | 高,持续更新 |
推荐度 | 极不推荐 | 强烈推荐 |
常见问题与配置优化
配置 CA 证书路径
在处理 HTTPS 请求时,PHP 需要验证对端服务器的 SSL 证书,如果无法找到正确的证书颁发机构(CA)证书,可能会出现类似 SSL certificate problem: unable to get local issuer certificate
的错误。
解决方法是在 php.ini
文件中明确指定 CA 证书文件的路径,在 CentOS 7 中,系统的 CA 证书包通常位于 /etc/pki/tls/certs/ca-bundle.crt
。
打开 php.ini
文件(路径根据你的 PHP 版本而定),添加或修改以下两行:
openssl.cafile=/etc/pki/tls/certs/ca-bundle.crt ;openssl.capath=/etc/pki/tls/certs
保存后,重启相关服务即可。
OpenSSL 版本过低
即使安装了新版的 PHP-OpenSSL 扩展,其功能仍然受限于系统底层的 OpenSSL 库版本,CentOS 7 的默认 OpenSSL 库版本较低,可能不支持 TLS 1.3 等新协议,虽然升级系统底层的 OpenSSL 风险较高,但使用 SCL 中的 PHP 版本通常能获得一个相对更新的环境,因为它们可能被编译为链接到兼容的或自带的更新版库,确保整个系统(sudo yum update
)和 SCL 软件包都保持最新是最佳实践。
相关问答FAQs
我已经安装了 PHP-OpenSSL 扩展,但 PHP 应用仍然提示 OpenSSL 相关函数未定义,这是为什么?
解答: 这个问题通常由以下几个原因造成,最常见的原因是安装扩展后没有重启 Web 服务器(Apache/Nginx)或 PHP-FPM 服务,导致新的配置未被加载,如果你的环境中存在多个 PHP 版本(例如系统默认的 PHP 5.4 和通过 SCL 安装的 PHP 7.4),你可能在命令行检查的是一个版本,而 Web 服务器实际使用的是另一个版本,请确保你为 Web 服务器所使用的 PHP 版本安装了对应的 OpenSSL 扩展,检查 phpinfo()
输出,确认 Loaded Configuration File
指向的是你正在编辑的 php.ini
文件路径,避免修改了错误的配置文件。
如何在不影响系统稳定性的前提下,将 CentOS 7 上的 PHP 从 5.4 升级到 7.x 并确保 OpenSSL 扩展正常工作?
解答: 最佳方案是使用 Software Collections (SCL),具体来说就是 Remi 仓库,这种方法的核心优势在于它将新版本的 PHP 安装在独立的目录(如 /opt/rh/
)下,与系统自带的软件完全隔离,不会破坏系统的依赖关系,具体步骤如下:1. 安装并启用 EPEL 和 Remi 仓库;2. 使用 yum-config-manager
启用你想要的 PHP 版本仓库(如 remi-php74
);3. 使用 yum
安装 rh-php74
、rh-php74-php-fpm
和 rh-php74-php-openssl
等软件包;4. 启动 rh-php74-php-fpm
服务,并修改你的 Nginx 或 Apache 配置,将其指向新 PHP-FPM 服务的 socket 或端口,这样,你就成功地在 CentOS 7 上部署了一个现代、安全的 PHP 环境,OpenSSL 扩展也已一并正确安装和配置。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复