Ubuntu 22.04 全新安装后PHP及HTTPS下载SSL证书验证失败问题求助
Ubuntu 22.04 全新安装后PHP及HTTPS下载SSL证书验证失败问题求助
嗨,Steve,我看你刚上手Ubuntu 22.04,之前有RHEL的使用经验,现在遇到了PHP用HTTPS下载时SSL证书验证失败的问题——这种发行版之间的小差异确实容易让人懵,我来给你一步步梳理解决办法:
一、先确保系统根证书包完整并更新
Ubuntu和RHEL的证书管理机制略有不同,你之前直接把证书放到/etc/ssl/certs/的方式在Ubuntu里不会生效,因为这个目录的证书是由系统工具自动维护的。先做以下操作:
- 安装(或重新安装)系统根证书包:
sudo apt install --reinstall ca-certificates - 更新系统证书缓存:
这个命令会把系统信任的根证书打包到sudo update-ca-certificates/etc/ssl/certs/ca-certificates.crt这个文件里,这是Ubuntu系统默认的全局证书bundle。
二、正确导入自定义/私有CA证书(如果目标网站用的是非公信任证书)
如果你要访问的网站用的是自签证书或者私有CA颁发的证书,需要按以下步骤导入:
- 将下载的证书文件(后缀改为
.crt,比如my-custom-cert.crt)放到/usr/local/share/ca-certificates/目录下,这个目录是专门存放用户自定义证书的地方; - 再次运行更新命令:
运行后会看到类似“1 added”的提示,说明证书已经被成功加入到全局证书bundle中。sudo update-ca-certificates
三、检查PHP CLI的OpenSSL配置
PHP的CLI版本可能使用单独的配置文件,需要确保它指向了正确的证书路径:
- 先找到你的PHP CLI对应的
php.ini文件,比如Ubuntu 22.04默认PHP 8.1的路径是/etc/php/8.1/cli/php.ini,也可以用这个命令确认具体路径:php -i | grep "Loaded Configuration File" - 打开这个
php.ini文件,找到以下两个配置项,确保它们的值设置正确:openssl.cafile = /etc/ssl/certs/ca-certificates.crt openssl.capath = /etc/ssl/certs - 保存文件后,不需要重启任何服务,直接重新运行你的PHP下载命令即可。
四、验证证书是否生效
可以先用curl命令测试系统层面的证书信任情况:
curl https://somesite.com/file.txt
如果curl能成功下载文件,说明系统证书配置没问题,那问题大概率出在PHP的配置上;如果curl也报错,那回到前面的步骤检查系统证书的安装和更新是否正确。
备注:内容来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

