如何在Symfony/Doctrine上使用SSL连接MySQL

7
我将尝试连接启用了SSL的MySQL数据库。我使用Symfony2框架和Doctrine。
在普通的PHP中,我可以通过以下方式实现:
$link = mysql_connect("127.0.0.1:3306","test","testpass",true,MYSQL_CLIENT_SSL);

有人知道我如何在symfony/doctrine中做到这一点吗? config.yml中的正确Doctrine配置是什么?

更新:

也许我的问题"What is the correct doctrine configuration in config.yml?"是错误的。 那我该如何开始处理呢?应该从哪里开始?

谢谢

2个回答

15

在漫长的搜索过程中,在doctrine聊天室的人们的帮助下,我找到了答案。

以下是适用于PHP > 5.3.7的dbal配置。 它使用了三个PDO常量,这些常量在PHP 5.3.7之前不可用。

标准PDO连接如下:

$conn = new PDO("mysql:host=localhost;port=3307;database=dbname", "user1", "password1",
    array(
        1010 => '/path/to/certs/priv_key.pem',
        1011 => '/path/to/certs/pub_cert.pem',
        1012 => '/path/to/certs/ca_cert.pem',
    )
);
如果尝试上述代码时出现错误,可能是您的PHP版本<5.3.7,则不太可能使用带有SSL的PDO。现在解决config.yml中的DBAL配置问题。
doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                driver:   %database_driver%
                host:     %database_host%
                port:     %database_port%
                dbname:   %database_name%
                password: %database_password%
                charset:  UTF8
                mapping_types:
                    enum: string
                options:
                    1010 : %priv_key% 
                    1011 : %pub_cert% 
                    1012 : %ca_cert%

            default2: # second connection ...

    orm:
        # orm configuration here ....

希望这能帮助任何尝试使用SSL连接的人。事实上,如果可能的话,建议所有数据库连接都使用SSL进行连接。


回答正确!但是,我不知道应该把所有这些*.pem文件放在哪里,路径应该是什么样子的。 - Delphine

8

我想指出以下SSL属性常量在PHP 5.4.16中的整数值如下:

PDO:MYSQL_ATTR_SSL_KEY: 1007
PDO:MYSQL_ATTR_SSL_CERT: 1008
PDO:MYSQL_ATTR_SSL_CA: 1009

它们可能因版本而异,所以最好在将其插入到DBAL配置之前检查这些值。


非常感谢 @samuraii 的帮助。谢谢! - gnowlak
常量的更多信息在文档中有描述 http://php.net/manual/zh/ref.pdo-mysql.php#pdo-mysql.constants - Dimitry K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接