我很难找到关于如何用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
发布于 2014-01-27 23:09:42
您应该能够添加一个额外的参数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',
)
);
https://stackoverflow.com/questions/21393320
复制相似问题