Symfony 1.4通过SSL连接到mysql

时间:2017-06-12 15:13:18

标签: php mysql ssl doctrine symfony-1.4

我需要更改旧的Symfony 1.4应用程序,以便它能够通过ssl-connection连接到mysql。

我为Symfony> = 2找到了很多关于此的信息。但不幸的是,不是因为这个尘土飞扬的人。

出于验证目的,我已经通过编辑

使其工作

./应用/前端/ LIB /供应商/ symfony的/ LIB /插件/ sfDoctrinePlugin / LIB /供应商/教义/ Connection.php

$this->dbh = new PDO($this->options['dsn'], $this->options['username'],
(!$this->options['password'] ? '':$this->options['password']), array(PDO::ATTR_PERSISTENT => true));

$this->dbh = new PDO($this->options['dsn'], $this->options['username'],
(!$this->options['password'] ? '':$this->options['password']),  
array(PDO::ATTR_PERSISTENT => true,                           
PDO::MYSQL_ATTR_SSL_KEY  => '/etc/my.cnf.d/ssl/client-key.pem',        
PDO::MYSQL_ATTR_SSL_CERT => '/etc/my.cnf.d/ssl/client-cert.pem',        
PDO::MYSQL_ATTR_SSL_CA   => '/etc/my.cnf.d/ssl/ca-cert.pem'));

但我想知道这个丑陋的黑客是否真的是唯一的解决方案?

2 个答案:

答案 0 :(得分:0)

我花了一段时间才发现这个连接类已被覆盖( apps / frontend / lib ...)。

所以我只需要使这些变量可配置。 databases.yml 配置中有一个名为 attributes doctrine :: param :: attributes )的选项。如果传递非字符串键,则可以使用 getAttribute 获取它们。

所以至少它是有效的(它位于 connect -method的 try 区域内)。

all:
  doctrine:
    class: sfDoctrineDatabase
    param:
      dsn:      mysql:host=localhost;dbname=db
      username: user
      password: pass
      encoding: utf8
      attributes:
        #PDO::MYSQL_ATTR_SSL_KEY
        1010: /etc/my.cnf.d/ssl/client-key.pem
        #PDO::MYSQL_ATTR_SSL_CERT
        1011: /etc/my.cnf.d/ssl/client-cert.pem
        #PDO::MYSQL_ATTR_SSL_CA
        1012: /etc/my.cnf.d/ssl/ca-cert.pem

databases.yml 中,您必须输入以下内容(注释有助于理解这些数字)

override func viewDidLoad()

答案 1 :(得分:0)

我们发现属性数组不起作用。我们必须添加一个事件侦听器来侦听“doctrine.configure_connection”事件并直接在连接上设置属性。

class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
       //existing code
       
       $this->dispatcher->connect('doctrine.configure_connection', array(
        'ProjectConfiguration','addConnectionSSL'
       ));  
  }

   static public function addConnectionSSL(sfEvent $event){
     $connection = $event->getParameters()['connection']; 
     /* @var $connection Doctrine_Manager */
     $other = $connection->getOption('other');
     if(!is_array($other)) $other=array();
     $other[PDO::MYSQL_ATTR_SSL_CA] = "PATH_TO_CERT_FILE"; //Set this to actual path. You can also set other properties in the same way.
     $connection->setOption('other',$other);
  }
}