在 Fedora 上为 PDO-MySQL 设置 SSL

Setup SSL for PDO-MySQL on Fedora

我想在 Fedora 上为 MySQL 设置 SSL。我在 PHP 中使用 PDO 作为 MySQL-连接器。但它不起作用。

PHP-版本 (php -v) 是:

PHP 5.6.6 (cli) (built: Feb 19 2015 13:46:39)

当我检查 php -m 时,我得到一个长列表,包括 openssl、PDO、pdo_mysql、mysql.

/etc/my.cnf 中,我添加了 "ssl" 和三个证书(CA 根、私钥、证书)。我重新启动了 MySQL 和 Apache。

pdo 连接器是这样的:

function getDBConn() {
    return new PDO(
        'mysql:host=localhost; dbname=forum',
        user,
        pass,
        array(
            PDO::MYSQL_ATTR_SSL_KEY => path_to_same_as_in_my.cnf.key,
            PDO::MYSQL_ATTR_SSL_CERT => path_to_same_as_in_my.cnf.crt,
            PDO::MYSQL_ATTR_SSL_CA => path_to_same_as_in_my.cnf.crt
        )

}

但是在连接到数据库的页面上出现以下错误:

Warning: PDO::__construct(): this stream does not support SSL/crypto in /var/www/html/functions.php on line 78
Warning: PDO::__construct(): cannot connect to MySQL by using SSL in /var/www/html/functions.php on line 78
Warning: PDO::__construct(): [2002] (trying to connect via unix:///var/lib/mysql/mysql.sock) in /var/www/html/functions.php on line 78
FATAL ERROR: Uncaught exception 'PDOException' with message 'SQL:STATE[HY000][2002]' in /var/www/html/functions.php:78 Stack trace .....

有人对此有解决方案吗?

对于使用 SSL

的 PDO MySQL,您只需要这个
<?php
$pdo = new PDO('mysql:host=ip;dbname=db', 'user', 'pass', array(
    PDO::MYSQL_ATTR_SSL_KEY    =>'/etc/mysql/ssl/client-key.pem',
    PDO::MYSQL_ATTR_SSL_CERT=>'/etc/mysql/ssl/client-cert.pem',
    PDO::MYSQL_ATTR_SSL_CA    =>'/etc/mysql/ssl/ca-cert.pem'
    )
);
$statement = $pdo->query("SHOW TABLES;");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);
?>

出现错误的另一个最大原因是您可能没有安装 openssl