2017-06-12 127 views
1

我需要更改舊的Symfony 1.4應用程序,以便它能夠通過ssl連接連接到mysql。Symfony 1.4通過SSL連接到mysql

我在Symfony> = 2中發現了很多這方面的知識。

爲了驗證目的我已經做它通過編輯

./apps/frontend/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/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')); 

但我不知道,如果這醜陋的黑客實際上是唯一的解決辦法?

回答

0

我花了一段時間纔看到此連接類已被覆蓋(apps/frontend/lib ...)。

所以我只需要使這些變量可配置。在databases.yml中有一個選項配置稱爲屬性doctrine :: param :: attributes)。如果您傳遞非字符串密鑰,您可以使用getAttribute獲取它們。

所以至少它的工作原理是(它在的嘗試面積的連接-方法)。

$sslOptionKeys = array(PDO::MYSQL_ATTR_SSL_KEY, PDO::MYSQL_ATTR_SSL_CERT, PDO::MYSQL_ATTR_SSL_CA); 

foreach($sslOptionKeys as $sslOptionKey) { 
    if(array_key_exists($sslOptionKey, $this->pendingAttributes)) { 
     $pdoOptions[$sslOptionKey] = $this->getAttribute($sslOptionKey); 
    } 
} 

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

databases.yml裏您必須鍵入以下(註釋有助於理解這些數字)

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