如何在服务器/ini级别禁用PHP对自签名证书的SSL验证?
解决Docker PHP-FPM容器本地SSL请求证书验证问题
问题根源
官方cacert.pem仅包含公开可信的CA证书,而你用mkcert生成的是本地自签根CA签发的证书,该本地CA不在官方证书列表中,因此无论PHP的cURL还是命令行curl都会验证失败,和Apache的证书本身无冲突。
方案一:导入mkcert本地根CA(推荐,贴近生产验证逻辑)
mkcert会在本地生成根CA证书,只需将其导入PHP-FPM容器的信任链即可:
查找本地根CA位置
在本地主机执行命令获取根CA目录:mkcert -CAROOT目录内的
rootCA.pem就是需要的根证书。修改docker-compose.yml
将本地根CA挂载到容器的系统证书目录:fpm: build: ./docker/php-fpm links: - "db" volumes: - ./docker/php-fpm/php.ini:/usr/local/etc/php/php.ini # 挂载mkcert根CA到容器证书目录,后缀改为.crt符合系统要求 - $(mkcert -CAROOT)/rootCA.pem:/usr/local/share/ca-certificates/rootCA.crt更新Dockerfile配置信任链
编辑./docker/php-fpm/Dockerfile,添加以下步骤让系统和PHP信任该根CA:# 安装证书管理工具(基础镜像未预装时添加) RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* # 更新系统证书信任链 RUN update-ca-certificates # 配置PHP使用系统统一的可信证书池 RUN echo "curl.cainfo = /etc/ssl/certs/ca-certificates.crt" >> /usr/local/etc/php/php.ini RUN echo "openssl.cafile = /etc/ssl/certs/ca-certificates.crt" >> /usr/local/etc/php/php.ini配置完成后,PHP的cURL会自动信任mkcert签发的本地证书,逻辑和生产环境一致。
方案二:全局禁用SSL验证(仅开发环境使用)
若不想导入本地CA,可直接在服务器级别配置跳过验证:
修改php.ini添加全局选项
在你的php.ini中追加以下配置:; 全局禁用SSL主机与证书验证(仅限开发环境) curl.default_ssl_verifyhost = 0 curl.default_ssl_verifypeer = 0注:该选项仅支持PHP 7.1+,会自动应用到所有cURL请求,无需修改业务代码。
命令行curl适配
若需容器内命令行curl默认跳过验证,可创建~/.curlrc文件并添加:--insecure
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

