Symfony:如何在Doctrine DBAL配置(YAML)中设置SSL参数?

Iva*_*ele 4 pdo yaml symfony doctrine-orm dbal

我想将我的SSL证书和密钥文件添加到Doctrine DBAL配置中,但我不知道如何实现这一点.

在PHP中,我只需要编写类似于:

$databaseHandler = new \PDO(
    'mysql:host=my_host;dbname=my_db',
    'username',
    'password',
    array(
        \PDO::MYSQL_ATTR_SSL_KEY   => '.../client-key.pem',
        \PDO::MYSQL_ATTR_SSL_CERT  => '.../client-cert.pem',
        \PDO::MYSQL_ATTR_SSL_CA    => '.../ca-cert.pem'
    )
);
Run Code Online (Sandbox Code Playgroud)

我知道有一个自定义驱动程序选项 driverOptions,我看到了这个答案,但我不确定如何将其转换为YAML.

我觉得我应该写一些接近的东西:

doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
        driverOptions:
            PDO::MYSQL_ATTR_SSL_CA: '.../client-key.pem'
            PDO::MYSQL_ATTR_SSL_CERT: '.../client-cert.pem'
            PDO::MYSQL_ATTR_SSL_CA: '.../ca-cert.pem'
Run Code Online (Sandbox Code Playgroud)

但双冒号不会真的取悦YAML ......

Alv*_*unk 7

我找到了比其他方式更容易的方法.进行以下设置app/config/config.yml:

# Doctrine Configuration
doctrine:
    dbal:
        driver:   pdo_mysql
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
        # Options for SSL connection
        options:
            MYSQL_ATTR_SSL_CA : %ca_cert%
            MYSQL_ATTR_SSL_KEY : %private_key%
            MYSQL_ATTR_SSL_CERT : %public_cert%
Run Code Online (Sandbox Code Playgroud)

然后在你的app/config/parameters.yml文件中:

parameters:
    ...
    # SSL Info
    private_key: /etc/my.cnf.d/certs/client-key.pem
    public_cert: /etc/my.cnf.d/certs/client-cert.pem
    ca_cert: /etc/my.cnf.d/certs/ca-cert.pem
Run Code Online (Sandbox Code Playgroud)

我在Symfony3上对此进行了测试,这非常有用.上面的路径可能会有所不同,特别是证书可能会有所不同,具体取决于您的发行版以及您的设置方式.


小智 5

使用Symfony 3.2及更高版本,这变得容易得多:

doctrine:
    dbal:
        <other configs>
        options:
            !php/const:PDO::MYSQL_ATTR_SSL_CA: %ca_cert%
            !php/const:PDO::MYSQL_ATTR_SSL_KEY: %private_key%
            !php/const:PDO::MYSQL_ATTR_SSL_CERT: %public_cert%
Run Code Online (Sandbox Code Playgroud)