繁体   English   中英

如何在PHP中使用Doctrine2设置SSL加密的MySQL连接(不是Symfony,而不是Doctrine1)

[英]How to setup an SSL encrypted MySQL connection with Doctrine2 in PHP (not Symfony, not Doctrine1)

我很难找到如何使用Doctrine2到MySQL建立SSL加密连接的文档/示例。 我没有使用Symfony,所以寻找纯PHP路径。

我坚持的基本上是如何传达MYSQL_CLIENT_SSL(或MYSQLI_CLIENT_SSL)标志,以及ca证书的路径。 我可以忍受不验证证书,但我不能忍受不加密此任务的连接。

在命令行上,这将完成类似于此:

mysql --ssl-verify-server-cert --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h host [etc]

在使用mysql扩展的纯php中,我认为它看起来像:

$conn = mysql_connect($host, $user, $pass, false, MYSQL_CLIENT_SSL);

使用mysqli(我认为)它会是这样的:

$db = mysqli_init(); 
$db->ssl_set(null, null, $cert, null, null); 
$db->real_connect($host, $user, $pass, $dbname);

问题是,我如何使用Doctrine2做到这一点? 它甚至可能吗? 如何修改Doctrine2的初始化来执行此操作?

$DOCTRINE2_DB = array(
  'driver'      => 'pdo_mysql',
  'host'        => $host,
  'user'        => $user,
  'password'    => $pass,
  'dbname'      => $dbname,
  'unix_socket' => $sockpath,
);
$DOCTRINE2_EM = \Doctrine\ORM\EntityManager::create($DOCTRINE2_DB, $DOCTRINE2_CONFIG);
$EM =& $DOCTRINE2_EM; // for brevity & sanity

您应该能够添加其他参数driverOptions并为PDO设置适当的SSL配置

http://es1.php.net/manual/es/ref.pdo-mysql.php#pdo-mysql.constants

$DOCTRINE2_DB = array(
    'driver'      => 'pdo_mysql',
    'host'        => $host,
    'user'        => $user,
    'password'    => $pass,
    'dbname'      => $dbname,
    'unix_socket' => $sockpath,
    'driverOptions' => array(
        PDO::MYSQL_ATTR_SSL_CA => '...',
        PDO::MYSQL_ATTR_SSL_CERT => '...',
        PDO::MYSQL_ATTR_SSL_KEY => '...'
    )
);

我无法测试它,但在这里查看代码我认为它应该工作

[编辑ASKER:]以下是它对我有用的方式:

$DOCTRINE2_DB = array(
    'driver'      => 'pdo_mysql',
    'host'        => $host,
    'user'        => $user,
    'password'    => $pass,
    'dbname'      => $dbname,
    'unix_socket' => $sockpath,
    'driverOptions' => array(
        PDO::MYSQL_ATTR_SSL_CA => '/file/path/to/ca_cert.pem',
    )
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM