登录
首页 >  文章 >  php教程

PHP配置SSL数据库连接教程

时间:2026-03-22 22:00:43 436浏览 收藏

本文详细讲解了在 PHP 中安全连接 MySQL 数据库的 SSL 配置全流程:从确认服务端已启用并正确配置 SSL 证书,到分别使用 PDO(推荐)和 MySQLi 扩展在客户端设置加密连接参数,涵盖开发测试的简易加密模式与生产环境必需的证书严格校验方案,并指出路径权限、域名匹配、PHP 环境依赖及云数据库适配等关键注意事项——帮你避开常见坑点,真正实现数据传输全程加密,守护应用安全底线。

PHP 使用 SSL 连接数据库配置方法

PHP 连接 MySQL 数据库时启用 SSL,核心是配置 PDO 或 MySQLi 的连接参数,确保客户端与服务器之间传输加密。不是所有 MySQL 服务端默认开启 SSL,需先确认服务端已配置证书,再在 PHP 客户端正确传入证书路径或启用验证模式。

确认 MySQL 服务端已启用 SSL

登录 MySQL 执行以下命令检查:

  • SHOW VARIABLES LIKE 'have_ssl'; —— 返回 YES 表示编译支持 SSL
  • SHOW VARIABLES LIKE 'ssl_mode'; —— 查看当前默认模式(如 PREFERRED、REQUIRED)
  • SHOW STATUS LIKE 'Ssl_cipher'; —— 若有值(如 TLS_AES_256_GCM_SHA384),说明当前连接已走 SSL

若服务端未配置,需在 my.cnf 中添加类似以下内容并重启 MySQL:

[mysqld]
ssl-ca=/path/to/ca.pem
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem

PDO 方式启用 SSL 连接(推荐)

通过 PDO::ATTR_SSL_* 选项控制 SSL 行为,支持证书校验或仅加密传输:

  • 不验证证书(仅加密,开发/测试常用):
    $options = [PDO::MYSQL_ATTR_SSL_MODE => PDO::MYSQL_ATTR_SSL_MODE_REQUIRED];
  • 严格验证 CA 和域名(生产环境推荐):
    $options = [
      PDO::MYSQL_ATTR_SSL_MODE => PDO::MYSQL_ATTR_SSL_MODE_VERIFY_IDENTITY,
      PDO::MYSQL_ATTR_SSL_CA => '/path/to/ca.pem',
      PDO::MYSQL_ATTR_SSL_CERT => '/path/to/client-cert.pem',
      PDO::MYSQL_ATTR_SSL_KEY => '/path/to/client-key.pem'
    ];

完整连接示例:

$dsn = "mysql:host=localhost;dbname=testdb;charset=utf8mb4";
$pdo = new PDO($dsn, $user, $pass, $options);

MySQLi 方式启用 SSL 连接

MySQLi 支持面向对象和过程两种写法,SSL 配置需在连接后调用 mysqli_ssl_set()(必须在 connect() 之前调用):

  • 对象方式:
    $mysqli = new mysqli();
    $mysqli->ssl_set('/path/to/client-key.pem', '/path/to/client-cert.pem', '/path/to/ca.pem', NULL, NULL);
    $mysqli->real_connect('localhost', $user, $pass, 'testdb');
  • 过程方式:
    $mysqli = mysqli_init();
    mysqli_ssl_set($mysqli, '/path/to/client-key.pem', '/path/to/client-cert.pem', '/path/to/ca.pem', NULL, NULL);
    mysqli_real_connect($mysqli, 'localhost', $user, $pass, 'testdb');

连接成功后可用 mysqli_get_ssl_cipher($mysqli) 检查是否启用 SSL 加密。

常见问题与注意事项

  • 证书路径必须为 PHP 进程可读的绝对路径,相对路径易失败
  • 使用 VERIFY_IDENTITY 时,MySQL 服务器证书 CN 或 Subject Alternative Name 必须匹配连接时使用的 host 名(不能用 IP)
  • PHP 编译需启用 --with-mysql-sock 和 OpenSSL 支持;运行 php -m | grep openssl 确认 openssl 模块已加载
  • 云数据库(如阿里云 RDS、AWS RDS)通常提供下载 CA 证书,但不提供 client-cert/client-key,此时只需配置 CA 路径 + REQUIRED 模式即可

配置本身不复杂,关键在服务端支持、证书路径准确、以及验证模式与实际部署场景匹配。

终于介绍完啦!小伙伴们,这篇关于《PHP配置SSL数据库连接教程》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>