我们通过创建证书、更新my.cnf、创建具有正确权限的用户并要求使用ssl、重启服务来设置mysql,并通过远程连接验证了它在服务器端和客户端(通过mysql命令行)的工作。我还验证了PDO在完全相同的设置下工作正常,但在mysql中禁用了用户帐户上的"require ssl“,因为它只是静默地失败,并使用非ssl连接。
但是,当使用PHP应用程序进行连接时,它不能使用PDO强制ssl,但可以使用mysqli和强制ssl进行连接。我认为他们使用相同的驱动程序,两者都应该工作得很好。我得到的错误信息是‘连接到数据库失败[用户的SQLSTATE28000访问被拒绝’,但用户存在,此连接使用mysqli (force ssl)工作,只有当我在mysql中删除用户的'require ssl‘时,此连接才适用于PDO。
pdo_mysql 5.5.9 CentOS release 6.5 (最终版) php 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的支持可能有问题?
发布于 2018-01-29 16:27:00
实际问题是服务器证书CN验证(不匹配),但报告的错误是PDOException: SQLSTATE[HY000] [2002]
在PHP中记录了大量的错误,比如:71845、71003和Github PR
解决方案是在这些PHP版本5.6.22 (不确定)、7.0.18 (已验证)和7.1.15 (不确定)之后提供的这个未记录的属性
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT
可能值:true,false默认值:true
因此,您的代码应该如下所示
$pdo = new PDO('mysql:host=XXXXXX;dbname=XXXXXX', 'XXXXXX', 'XXXXXX', array(
PDO::MYSQL_ATTR_SSL_KEY =>'/path/to/client-key.pem',
PDO::MYSQL_ATTR_SSL_CERT =>'/path/to/client-cert.pem',
PDO::MYSQL_ATTR_SSL_CA =>'/path/to/server-ca.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false
));
发布于 2016-01-25 13:58:34
下面的代码将解决您的问题
new PDO('mysql:host='.HOST.';dbname='.DBNAME.';charset=utf8', USER, PASSWORD,
array(
PDO::MYSQL_ATTR_SSL_KEY =>'/mysqlsslcertificate1/client-key.pem',
PDO::MYSQL_ATTR_SSL_CERT=>'/mysqlsslcertificate1/client-cert.pem',
PDO::MYSQL_ATTR_SSL_CA =>'/mysqlsslcertificate1/ca-cert.pem'
)
);https://stackoverflow.com/questions/23342604
复制相似问题