我们通过创建证书,更新my.cnf,创建具有正确权限的用户并需要ssl,重新启动服务并验证它是否有效服务器端和客户端(通过mysql命令行)通过远程连接。我也验证了PDO能够在完全相同的设置下正常工作,但在mysql中禁用用户帐户中的“require ssl”,因为它只是静默地失败并使用非ssl连接。无法使用ssl连接PDO,但使用ssl连接到mysqli
但是,使用PHP应用程序进行连接时,使用PDO强制ssl无法正常工作,但使用强制ssl使用mysqli可以正常工作。我认为他们使用相同的驱动程序,两者都应该正常工作。我得到的错误消息是'失败连接到数据库[SQLSTATE [2800] [1045]拒绝访问用户',但用户存在,并且此连接与mysqli(force ssl)一起使用,只有当我删除'在mysql中需要用户的ssl'。
PHP 5.5.9 CentOS版本6.5(最终) PDO_MYSQL 31年5月5日
让我知道如果我可以提供任何其他信息。下面是连接示例,
//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的支持可能有问题?
谢谢。
检查这个,它可能会帮助http://stackoverflow.com/questions/9738712/connect-to-remote-mysql-server-with-ssl-from-php –
已经引用这个帖子,这些例子说明我是如何已经连接起来,没有概念证明,只是从文档中提取可能。我想在它下面没有正确连接通过ssl所有这就是为什么我被阻止,也许我会看看源代码,并尝试像Xdebug如果可能的话。 – user3581488
我知道这是旧的,但..我坚持与完全相同的问题!命令行+ mysqli工作得很好,但PDO返回“访问被拒绝”。请告诉我,你找到了一个解决方案,你记得它...... – Delphine