Symfony2的学说通过SSL

问题描述:

尝试通过SSL连接到我的MySQL数据库连接到数据库,我已经成功地建立从我的网络服务器通过ssh使用下面的命令行连接:Symfony2的学说通过SSL

mysql -h my.host.here --port=5454 -v --ssl-ca=/etc/apache2/ssl/mysql/ca-cert.pem --ssl-cert=/etc/apache2/ssl/mysql/client-cert.pem --ssl-key=/etc/apache2/ssl/mysql/client-key.pem -u user -p 

然而,试图建立在Symfony2中和学说相同的连接,所有我不断收到是 “SSL错误”

$params = array(
     'driver' => 'pdo_mysql', 
     'user'  => 'user', 
     'password' => 'pass', 
     'host'  => 'my.host.here', 
     'dbname' => 'media', 
     'port'  => '5454', 
    ); 

    if($this->container->hasParameter('media_ca') && $this->container->hasParameter('media_cert') && $this->container->hasParameter('media_key')) { 
     $params['driverOptions'] = array(
      PDO::MYSQL_ATTR_SSL_CA => $this->container->hasParameter('media_ca'), 
      PDO::MYSQL_ATTR_SSL_CERT => $this->container->hasParameter('media_cert'), 
      PDO::MYSQL_ATTR_SSL_KEY => $this->container->hasParameter('media_key'), 
     ); 
    } 

/* Using this instead with only the ca_cert gives me the same error 
    if($this->container->hasParameter('media_ca')) { 
     $params['driverOptions'] = array(
      PDO::MYSQL_ATTR_SSL_CA => $this->container->hasParameter('media_ca'), 
     ); 
    } 
*/ 
    $connectionFactory = $this->container->get('doctrine.dbal.connection_factory'); 
    $conn = $connectionFactory->createConnection($params); 
    return $conn; 

在我的日志:

[2013-10-01 15:23:30] request.CRITICAL:Uncaught PHP异常PDOException:“SQLSTATE [HY000] [2026] SSL连接错误”在/ var/www/mysite/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php第36行{“exception”:“[object](PDOException:SQLSTATE [HY000] [2026]/var/www/mysite/vendor/doctrine/dbal/lib//DBAL/Driver/PDOConnection.php:36)“} []

我已doublechecked该web服务器的用户(WWW的数据)可访问的证书文件,并且路径的那些证书的文件是正确(在symfony2参数中定义)。

我不能想到我的命令行连接和我用doctrine/symfony2指定的连接之间的任何不同。

+0

马蒂亚斯,看看这个答案,它可能是有益http://*.com/questions/ 4499968 /丢失连接到MySQL服务器,当-尝试对连接到远程的MySQL服务器 – medina

您错误地检索参数。您需要getParameter($param)方法而不是hasParameter($param)。这些线路是正确的。

PDO::MYSQL_ATTR_SSL_CA => $this->container->getParameter('media_ca'), 
PDO::MYSQL_ATTR_SSL_CERT => $this->container->getParameter('media_cert'), 
PDO::MYSQL_ATTR_SSL_KEY => $this->container->getParameter('media_key'), 

只是为了记录完整的例子,我是如何结束的解决这个问题:

//Create a connection to another public database. 
private function videoDatabase() { 

    //Create a connection to pub-DB. 

    $params = array(
     'driver' => $this->container->getParameter('media_database_driver'), 
     'user'  => $this->container->getParameter('media_database_user'), 
     'password' => $this->container->getParameter('media_database_password'), 
     'host'  => $this->container->getParameter('media_database_host'), 
     'dbname' => $this->container->getParameter('media_database_name'), 
     'port'  => $this->container->getParameter('media_database_port') 
    ); 

    if($this->container->hasParameter('media_ca') && $this->container->hasParameter('media_cert') && $this->container->hasParameter('media_key')) { 
     $params['driverOptions'] = array(
       PDO::MYSQL_ATTR_SSL_CA => $this->container->getParameter('media_ca'), 
       PDO::MYSQL_ATTR_SSL_CERT => $this->container->getParameter('media_cert'), 
       PDO::MYSQL_ATTR_SSL_KEY => $this->container->getParameter('media_key'), 
     ); 
    } 

    $connectionFactory = $this->container->get('doctrine.dbal.connection_factory'); 
    $conn = $connectionFactory->createConnection($params); 
    return $conn; 

}