如何验证 PDO 中的连接是不是受 SSL 保护?

Posted

技术标签:

【中文标题】如何验证 PDO 中的连接是不是受 SSL 保护?【英文标题】:How to verify that the connection in PDO is secured with SSL?如何验证 PDO 中的连接是否受 SSL 保护? 【发布时间】:2019-07-03 20:59:52 【问题描述】:

您好, 我最近安装了一个与我的数据库关联的 SSL 证书,以保护我的数据库和我的 Web 服务器之间的数据传输。有关信息,我在我的 Web 服务器上使用 mysqlServer(如 BDD)和 PDO 来发出请求。

我按照这些命令在 MysqlServer 上安装了 SSL 证书:

sudo mysql_ssl_rsa_setup --uid=mysql

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

现在,当我想从我的网络服务器通过 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 连接仍然是安全的。 你能帮我澄清一下吗?

谢谢你;)

【问题讨论】:

可能不使用PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT =&gt; false 感谢您的回答。但我按照教程说:“PDO 选项 MYSQL_ATTR_SSL_VERIFY_SERVER_CERT 对于禁用服务器证书检查很重要。如果省略,您将收到错误:SQLSTATE[HY000][2002]。”。 你在说this site?看起来只有在 Windows Server 上运行 MySQL 时才需要它,这是你在做什么吗? 不,我的服务器在 Linux 上。简而言之,我在数据库服务器配置中启用了此设置:require_secure_transport = ON。那么,无论如何,如果连接正常,就意味着连接一定是加密的?谢谢你。 【参考方案1】:

显然在最新版本的 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,
];
...

【讨论】:

以上是关于如何验证 PDO 中的连接是不是受 SSL 保护?的主要内容,如果未能解决你的问题,请参考以下文章

36. ClustrixDB 使用ClustrixDB加密连接

PDO - 连接 - 如何保护

一般的SSL证书二级域名可以使用吗?

IIS 是不是进行 SSL 证书检查,还是我必须对其进行验证?

如何仅为 ASP.NET 5 (ASP.NET Core) 中的受保护操作添加令牌验证

PHPUnit测试使用pdo的受保护静态方法