Hyperf 配置 MySQL SSL 连接需服务端支持且证书路径正确——先执行 SHOW VARIABLES LIKE 'have_ssl' 确认 YES,再在 database.php 中成套配置 PDO::MYSQL_ATTR_SSL_CA/CERT/KEY 及 PDO::MYSQL_ATTR_SSL_MODE_REQUIRED;禁用时须彻底移除所有 SSL 键并设为 DISABLED。

Hyperf 配置 MySQL SSL 连接,核心是让 PDO 正确加载证书并启用加密握手——但必须注意:这仅在服务端明确支持且已配置有效证书时才应启用;开发环境通常无需开启,强行启用反而会因路径错误或证书不匹配导致 SSL connection error: unknown error number。
确认 MySQL 服务端已启用 SSL
SSL 连接的前提是服务端支持。登录 MySQL 执行:
-
SHOW VARIABLES LIKE 'have_ssl';—— 返回YES才表示编译支持 -
SHOW VARIABLES LIKE 'ssl_mode';—— 查看默认模式(如PREFERRED或REQUIRED) -
SHOW STATUS LIKE 'Ssl_cipher';—— 非空说明当前连接已走 SSL(可用于验证)
准备客户端证书文件
Hyperf 不自动管理证书,需手动提供三类文件(路径必须绝对且可读):
-
CA 证书:
PDO::MYSQL_ATTR_SSL_CA→ 用于验证服务端身份(必需) -
客户端证书:
PDO::MYSQL_ATTR_SSL_CERT→ 若服务端要求双向认证(可选) -
客户端私钥:
PDO::MYSQL_ATTR_SSL_KEY→ 对应证书的私钥(可选)
常见路径示例:/etc/mysql/ssl/ca.pem、/etc/mysql/ssl/client-cert.pem、/etc/mysql/ssl/client-key.pem。PHP 进程用户(如 www-data)需有读取权限。
在 database.php 中正确配置 SSL 参数
修改 config/autoload/databases.php 中对应数据库的 options 数组,**不能只加 CA 就完事**,必须成套设置或全部禁用:
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- 启用 SSL(服务端强制要求时):
'options' => [<br> PDO::MYSQL_ATTR_SSL_CA => '/etc/mysql/ssl/ca.pem',<br> PDO::MYSQL_ATTR_SSL_CERT => '/etc/mysql/ssl/client-cert.pem',<br> PDO::MYSQL_ATTR_SSL_KEY => '/etc/mysql/ssl/client-key.pem',<br> PDO::MYSQL_ATTR_SSL_MODE => PDO::MYSQL_ATTR_SSL_MODE_REQUIRED,<br>],
- 禁用 SSL(开发/测试常用):
务必移除所有 PDO::MYSQL_ATTR_SSL_* 键,并显式设为禁用模式:
'options' => [<br> PDO::MYSQL_ATTR_SSL_MODE => PDO::MYSQL_ATTR_SSL_MODE_DISABLED,<br> // 其他 SSL 相关键(如 _SSL_CA、_SSL_CERT 等)必须完全删除<br>],
验证是否生效
启动服务后,在任意协程上下文中执行查询,再查当前连接状态:
DB::select('SHOW STATUS LIKE "Ssl_cipher"');- 返回结果中
Ssl_cipher字段非空,即表示连接已使用 SSL 加密 - 若仍报错,优先检查证书路径是否存在、权限是否正确、服务端是否真启用了 SSL(而非仅编译支持)

















