You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在服务器/ini级别禁用PHP对自签名证书的SSL验证?

解决Docker PHP-FPM容器本地SSL请求证书验证问题

问题根源

官方cacert.pem仅包含公开可信的CA证书,而你用mkcert生成的是本地自签根CA签发的证书,该本地CA不在官方证书列表中,因此无论PHP的cURL还是命令行curl都会验证失败,和Apache的证书本身无冲突。

方案一:导入mkcert本地根CA(推荐,贴近生产验证逻辑)

mkcert会在本地生成根CA证书,只需将其导入PHP-FPM容器的信任链即可:

  1. 查找本地根CA位置
    在本地主机执行命令获取根CA目录:

    mkcert -CAROOT
    

    目录内的rootCA.pem就是需要的根证书。

  2. 修改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
    
  3. 更新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,可直接在服务器级别配置跳过验证:

  1. 修改php.ini添加全局选项
    在你的php.ini中追加以下配置:

    ; 全局禁用SSL主机与证书验证(仅限开发环境)
    curl.default_ssl_verifyhost = 0
    curl.default_ssl_verifypeer = 0
    

    注:该选项仅支持PHP 7.1+,会自动应用到所有cURL请求,无需修改业务代码。

  2. 命令行curl适配
    若需容器内命令行curl默认跳过验证,可创建~/.curlrc文件并添加:

    --insecure
    

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 17:05:31