首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在MySQL中使用Doctrine2 (不是Symfony,不是Doctrine1)建立SSL加密的Doctrine2连接

如何在MySQL中使用Doctrine2 (不是Symfony,不是Doctrine1)建立SSL加密的Doctrine2连接
EN

Stack Overflow用户
提问于 2014-01-27 22:47:02
回答 1查看 3.1K关注 0票数 0

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

我要讨论的基本上是如何传递MYSQL_CLIENT_SSL (或MYSQLI_CLIENT_SSL)标志,以及ca证书的路径。我可以在不验证证书的情况下生存,但不能容忍不加密此任务的连接。

在命令行上,这样做类似于这样做:

代码语言:javascript
运行
复制
mysql --ssl-verify-server-cert --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h host [etc]

在使用mysql扩展的纯php中,我认为它应该如下所示:

代码语言:javascript
运行
复制
$conn = mysql_connect($host, $user, $pass, false, MYSQL_CLIENT_SSL);

对于mysqli (我想)是这样的:

代码语言:javascript
运行
复制
$db = mysqli_init(); 
$db->ssl_set(null, null, $cert, null, null); 
$db->real_connect($host, $user, $pass, $dbname);

问题是,我如何在Doctrine2中做到这一点?有可能吗?如何修改Doctrine2的初始化以做到这一点?

代码语言:javascript
运行
复制
$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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-27 23:09:42

您应该能够添加一个额外的参数driverOptions并为PDO设置批准的SSL配置。

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

代码语言:javascript
运行
复制
$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编辑:下面是它对我的工作原理:

代码语言:javascript
运行
复制
$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',
    )
);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21393320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档