php连接mysql启用ssl需先确认服务端已配置ssl证书,再通过pdo或mysqli设置ssl参数:pdo推荐使用pdo::mysql_attr_ssl_mode等选项,mysqli需在connect前调用mysqli_ssl_set(),并注意证书路径、验证模式与环境匹配。

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 行为,支持证书校验或仅加密传输:
立即学习“PHP免费学习笔记(深入)”;
SHOPEX简灰服装商城整站源码下载。 安装方法:1.解压上传程序至网站根目录.. 访问:域名/bak.(用户名:admin 密码:123456)2.进入帝国备份王后,配置数据库数据库信息.选择-www.taomoban.net目录.还原数据库.3.修改FTP目录下的config/config.phpphp 数据库连接信息.4.登陆网站后台--清空缓存..5.删除bak文件夹 后台:shopadm
- 不验证证书(仅加密,开发/测试常用):
$options = [PDO::MYSQL_ATTR_SSL_MODE => PDO::MYSQL_ATTR_SSL_MODE_REQUIRED]; - 严格验证 CA 和域名(生产环境推荐):
$options = [<br> PDO::MYSQL_ATTR_SSL_MODE => PDO::MYSQL_ATTR_SSL_MODE_VERIFY_IDENTITY,<br> PDO::MYSQL_ATTR_SSL_CA => '/path/to/ca.pem',<br> PDO::MYSQL_ATTR_SSL_CERT => '/path/to/client-cert.pem',<br> PDO::MYSQL_ATTR_SSL_KEY => '/path/to/client-key.pem'<br>];
完整连接示例:
$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();<br>$mysqli->ssl_set('/path/to/client-key.pem', '/path/to/client-cert.pem', '/path/to/ca.pem', NULL, NULL);<br>$mysqli->real_connect('localhost', $user, $pass, 'testdb'); - 过程方式:
$mysqli = mysqli_init();<br>mysqli_ssl_set($mysqli, '/path/to/client-key.pem', '/path/to/client-cert.pem', '/path/to/ca.pem', NULL, NULL);<br>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 模式即可
配置本身不复杂,关键在服务端支持、证书路径准确、以及验证模式与实际部署场景匹配。










