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



我很难找到如何将SSL加密的Doctrine2连接到MySQL的文档/示例。我不使用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 = DoctrineORMEntityManager::create($DOCTRINE2_DB, $DOCTRINE2_CONFIG);
$EM =& $DOCTRINE2_EM; // for brevity & sanity

您应该能够添加其他参数驱动程序,并为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',
    )
);

相关内容

  • 没有找到相关文章

最新更新