如何通过SSL验证PDO中的连接是否安全?

时间:2019-07-03 20:59:52

标签: php mysql sql ssl pdo

你好, 我最近安装了与数据库关联的SSL证书,以保护数据库与Web服务器之间的数据传输安全。有关信息,我在Web服务器上使用MysqlServer(如BDD)和PDO进行请求。

我按照以下命令在MysqlServer上安装SSL证书:

sudo mysql_ssl_rsa_setup --uid=mysql

我还启用了此选项以保护所有交换(require_secure_transport = ON)。 因此,该安装在Mysql服务器端运行良好。

现在,当我想从Web服务器通过PDO连接到我的数据库时,可以使用以下方法:

<?php

//Connexion à la base de données.
 $options = array(
 PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
 PDO::MYSQL_ATTR_SSL_CA => "-----BEGIN CERTIFICATE-----
 BLABLABLA
 -----END CERTIFICATE-----
",
 PDO::MYSQL_ATTR_SSL_CERT => "-----BEGIN CERTIFICATE-----
 BLABLABLA
 -----END CERTIFICATE-----
 ",
 PDO::MYSQL_ATTR_SSL_KEY => "-----BEGIN RSA PRIVATE KEY-----
 BLABLABLA
 -----END RSA PRIVATE KEY-----
 ",
 PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,);
 try
 {   
     $bdd = new PDO('mysql:host=***;dbname=***;charset=utf8', '***', '***', $options);
 }
 catch(Exception $e)
 {
     echo "Problème de connexion à la base de données. Réessayez !";
     exit();
 }
 ?>

这里也一切正常,但是我想确保连接已加密。 因此,从PDO,我执行了以下命令:SHOW SESSION STATUS LIKE“ Ssl_cipher”; 我得到的是:DHE-RSA-AES256-SHA。所以一切都很好。但是,一旦我更改了证书(例如删除一些字母和数字),连接就始终是“安全的”。当我指出证书的位置不正确时,也是如此。因此,我的印象是,即使没有证书,PDO连接仍然是安全的。 你能为我澄清一下吗?

感谢您;)

1 个答案:

答案 0 :(得分:0)

显然,在最新版本的Mysql中,传输中的数据加密无需证书(在客户端)。无论如何,都不需要用PDO指定它们。为什么? Mysql的行为类似于HTTPS站点(登录到站点时,您的计算机上不需要已经存在证书)。所以我们可以做这样的事情:

$options = [
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
    PDO::MYSQL_ATTR_SSL_CA => true,
    PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
];
...