你好我最近安装了一个与我的数据库相关联的SSL证书,以确保我的数据库和我的Web服务器之间的数据传输。作为参考,我使用MysqlServer(如BDD)和PDO在我的Web服务器上进行请求。
我按照这些命令在MysqlServer安装了一个SSL证书。
sudo mysql_ssl_rsa_setup --uid=mysql
我还启用了这个选项来保证所有交换的安全(require_secure_transport = ON).所以在Mysql服务器端安装工作非常顺利。
现在,当我想通过PDO从我的Web服务器连接到我的数据库时,我使用这个。
<?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的连接也是安全的。
谢谢你;)
显然,在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,
];
...