我很难找到如何将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',
)
);