You need to enable JavaScript to run this app. Codeigniter 3对接开启require_secure_transport的MySQL连接报错
优惠活动
大模型
产品
解决方案
定价
更多

Codeigniter 3对接开启require_secure_transport的MySQL连接报错

CI 3适配开启require_secure_transport=ON的MySQL加密连接调整方案

核心问题原因

Codeigniter 3.1.11版本的mysqli驱动封装逻辑,和Java JDBC驱动的参数处理逻辑存在差异:

  • Spring Boot使用的JDBC驱动,配置useSSL=true时,会自动为连接启用TLS加密通道,无需额外传入证书路径等参数
  • CI 3的mysqli驱动仅识别数组形式的加密配置,若直接将encrypt设为布尔值TRUE,驱动不会主动调用mysqli扩展的SSL设置接口,连接仍走明文传输,直接触发MySQL侧require_secure_transport=ON规则的拦截报错

具体配置调整方法

直接修改现有数据库连接配置数组中的encrypt项,将原有的'encrypt' => FALSE替换为如下数组配置即可,其余原有配置项保持不变:

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'dbhost',
    'username' => 'dbusername',
    'password' => 'password',
    'database' => 'dbname',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    // 原encrypt配置替换为以下数组内容
    'encrypt' => array(
        'ssl_key'    => '',
        'ssl_cert'   => '',
        'ssl_ca'     => '',
        'ssl_capath' => '',
        'ssl_cipher' => 'AES128-SHA256',
        'ssl_verify' => FALSE,
    ),
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE,
);

配置说明

  • 上述参数对齐Spring Boot侧useSSL=true的行为:仅强制启用TLS加密传输通道,不做服务端证书的强校验
  • 关键逻辑:只要驱动检测到encrypt为数组格式,就会在连接建立前调用mysqli扩展的ssl_set()方法,让连接传输全程走加密通道,满足require_secure_transport=ON的校验要求
  • 前置校验:需要确认当前PHP 7.3.11环境的mysqli扩展已集成openssl支持,可通过查看PHP扩展列表确认openssl已启用
  • 若后续MySQL侧要求强制校验客户端证书,只需要在上述数组中补充对应证书路径参数(ssl_key填客户端私钥路径、ssl_cert填客户端公钥证书路径、ssl_ca填CA根证书路径),并将ssl_verify设为TRUE即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 16:36:06