我们刚从 php 5.4 升级到 php 5.6 ,一切正常,我们的MySQL连接使用MySQLi和SSL。
我们的联系如下:
mysqli_real_connect($db, $host, $username, $password, $database, $port, $socket, MYSQLI_CLIENT_SSL);
mysqli_set_charset($db, "utf8");
Howerver,现在当我们尝试使用php 5.6通过SSL连接到MySQL时,我们得到了:
警告:mysqli_real_connect():SSL操作失败,代码为1。 OpenSSL错误消息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败 第29行/MySQLConnection.php
警告:mysqli_real_connect():无法使用SSL连接到MySQL 在第29行的/MySQLConnection.php
警告:mysqli_real_connect():[2002](试图通过连接 第29行/MySQLConnection.php中的tcp://mysql1.ourdomain.com:3306)
警告:mysqli_real_connect():( HY000 / 2002):在/MySQLConnection.php中 第29行
我尝试过设置:
mysqli_options($db, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, false);
但这没有用。
我补充说:
$mysql_certs_path = "/full/path/to/certs/mysql";
mysqli_ssl_set($db, $mysql_certs_path . "/client-key.pem", $mysql_certs_path . "/client-cert.pem", $mysql_certs_path . "/ca-cert.pem", null, null);
仍然得到:
警告:mysqli_real_connect():SSL操作失败,代码为1。 OpenSSL错误消息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败 第31行的/MySQLConnection.php
Warning: mysqli_real_connect(): Cannot connect to MySQL by using SSL in /MySQLConnection.php on line 31
答案 0 :(得分:0)
@jww,我写了一篇文章,分享@Justin面临的问题。根据{{3}},Google Cloud SQL颁发的证书的CN具有以下格式:
CN=project-name:instance-id
答案 1 :(得分:0)
我遇到类似的事情。当我将PHP升级到5.6时,它起作用了。但是当我进入时:
sudo apt-get install php5-mysqlnd
在Ubuntu 15.04上,SSL到AWS RDS停止工作,即使它与libmysql驱动程序一起使用。运行:
sudo apt-get install php5-mysql
安装旧驱动程序,它又开始工作了。我可以理解,它未能通过对等名称验证来连接到RDS。我不知道如何解决这个问题,并且因为它使用PHP流进行连接,所以设置似乎并不重要。
这是一个已知的错误:
https://bugs.php.net/bug.php?id=68344
所以我写了这个方法,从这里修改:How to know if MySQLnd is the active driver?
public function getMySQLIType()
{
$mysqlType = [
'mysql' => false,
'mysqli' => false,
'mysqlnd' => false,
];
if (function_exists('mysql_connect')) {
$mysqlType['mysql'] = true;
}
if (function_exists('mysqli_connect')) {
$mysqlType['mysqli'] = true;
}
if (function_exists('mysqli_get_client_stats')) {
$mysqlType['mysqlnd'] = true;
}
return $mysqlType;
}
如果数组为mysqlnd返回true,则禁用SSL。如果返回false,则启用它。到目前为止,它的确有效。是的,这是一个黑客修复,但我不知道如何合法地解决这个问题。