使用PHP mysqli通过SSL连接Mysql

时间:2015-07-11 13:14:58

标签: php mysql ssl mysqli

我正在尝试为两台VPS服务器设置PHP mysqli与MariaDB数据库的连接,并且由于它是通过公共网络而需要加密通信。

目前我可以通过命令行mysql客户端正常连接客户端服务器到数据库服务器,我已通过tcpdump检查连接是否已加密。但由于某种原因,我无法弄清楚PHP部分。这是相对基本的nginx + php5-fpm + mariadb设置但是mysql正在使用非默认端口。 Debian Jessie,Php5 5.6.7,Mariadb 10.0.16,nginx 1.6.2

这是测试脚本:

PIPPO PLUTO FOO

主要错误我没有ssl_set:

   <?php
        $DB_NAME = '';
        $DB_HOST = '111.111.111.111';
        $DB_USER = 'username';
        $DB_PASS = 'password';

$mysqli = mysqli_init();
if (!$mysqli) {
    die('mysqli_init failed');
}
//have tried witha and without the following with multiple variations
$mysqli->ssl_set(NULL, NULL, NULL,'/etc/mysql/ssl/',NULL);
if (!$mysqli->real_connect($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME, 11111, NULL,MYSQLI_CLIENT_SSL )) {
    die('Connect Error (' . mysqli_connect_errno() . ') '
            . mysqli_connect_error());
}
        $query = "SHOW STATUS LIKE 'ssl_cipher'";
        $result = $mysqli->query($query) or die($mysqli->error.__LINE__);
        if($result->num_rows > 0) {
                while($row = $result->fetch_assoc()) {
                        print_r($row);
                }
        }
        else {
                echo 'NO RESULTS';
        }
        mysqli_close($mysqli);
?>

任何想法都将不胜感激。这真的让我伤心。

1 个答案:

答案 0 :(得分:1)

这是什么

  

SSL3_GET_SERVER_CERTIFICATE:证书验证失败

我的猜测是你没有设置正确的CA.某些数据库系统(如Amazon Web Services RDS)具有自己的CA文件。您正在使用capath参数,因此请确保PEM文件位于该路径中。如果是,我接下来要做的就是切换到the third argument of ssl_set并直接指定PEM文件

$mysqli->ssl_set(NULL, NULL, '/path/to/ca.pem', NULL, NULL);