如何验证 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 => 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加密连接
IIS 是不是进行 SSL 证书检查,还是我必须对其进行验证?