我们通过创建证书、更新 my.cnf、创建具有正确权限的用户并需要 ssl、重新启动服务来设置带有 SSL 的 mysql,并通过远程连接验证它在服务器端和客户端(通过 mysql 命令行)是否正常工作。我还验证了 PDO 在完全相同的设置下正常工作,但在 mysql 中的用户帐户上禁用“需要 ssl”,因为它只是默默地失败并使用非 ssl 连接。
但是,当使用 PHP 应用程序进行连接时,它无法使用 PDO 强制 ssl 来工作,但可以使用 mysqli 和强制 ssl 来工作。我认为他们使用相同的驱动程序并且都应该工作正常。我收到的错误消息是“无法连接到数据库 [SQLSTATE[28000] [1045] 用户访问被拒绝”,但用户存在并且此连接适用于 mysqli(强制 ssl),并且仅当我删除“时,该连接才适用于 PDO”需要 mysql 中用户的 ssl'。
php 5.5.9
CentOS 版本 6.5(最终版)
pdo_mysql 5.5.31
如果我可以提供任何其他信息,请告诉我。以下是连接示例,
//mysqli
$conn=mysqli_init();
mysqli_ssl_set($conn, $clientkey, $clientcert, $sharedca, NULL, NULL);
if (!mysqli_real_connect($conn, $host, $user, $pass, $db))
{
die("Failed connecting to ssl mysql via mysqli");
}
$res = mysqli_query($conn, "SHOW STATUS like 'Ssl_cipher'");
print_r(mysqli_fetch_row($res));
mysqli_close($conn);
//pdo
$options = array_merge($options, array(
PDO::MYSQL_ATTR_SSL_KEY => $sslkey,
PDO::MYSQL_ATTR_SSL_CERT => $sslcert,
PDO::MYSQL_ATTR_SSL_CA => $sslca,
));
try
{
$pdo = new PDO("mysql:dbname={$db};host={$host}", $user, $pass, $options);
}
catch( PDOException $e )
{
die("Failed connecting");
}
关于如何使用 SSL 与 PDO 正确连接,我需要了解什么吗?或者我是否被迫切换到 mysqli,因为 PDO 对 SSL 的支持可能有问题?