Symfony条令不能通过SSL传输到MariaDB



我尝试了几天,但尝试通过SSL 将我的Symfony 6.1.4应用程序客户端连接到MariaDB 10.9时得到了0个结果

请注意,我可以使用SSL和用户app_ssl连接MySQL Workbench,所以我认为我的证书很好。有趣的是,Sequel Pro也不想使用相同的证书进行连接。我不知道为什么;它给出了和symfony相同的错误。

我检查了我的用户app_ssl是否拥有我的数据库mr_dev的所有权限。我也可以在工作台上确认这一点。这是用户脚本

GRANT ALL ON mr_dev.* TO 'app_ssl'@'%' IDENTIFIED BY 'pass' REQUIRE SSL;
GRANT USAGE ON *.* TO `app_ssl`@`%`;
GRANT ALL PRIVILEGES ON `mr_dev`.* TO `app_ssl`@`%`;
FLUSH PRIVILEGES;

根据语法,我有两种错误类型:

PDO:MYSQL_ATTR_SSL_KEY : '%DATABASE_PUB_KEY%'

给出

SQLSTATE[HY000] [1045] Access denied for user 'app_ssl'@'192.168.0.3' (using password: YES)

码头日志是

2022-09-13 14:28:30 6 [Warning] Access denied for user 'app_ssl'@'192.168.16.3' (using password: YES)

!php/const PDO::MYSQL_ATTR_SSL_KEY : '%DATABASE_PUB_KEY%'

给出

SQLSTATE[HY000] [2002] (trying to connect via (null))

docker log

2022-09-13 14:26:34 3 [Warning] Aborted connection 3 to db: 'unconnected' user: 'unauthenticated' host: '192.168.16.3' (This connection closed normally without authentication)

这是我当前的doctrine.yaml文件;请不要评论我尝试的所有语法

doctrine:
dbal:
server_version:    'mariadb-10.9.2'
dbname:            'mr_dev'
host:              'database'
port:              '3306'
user:              'app_ssl'
password:          'password'
driver:            'pdo_mysql'
charset:            UTF8
options:
# !php/const PDO::MYSQL_ATTR_SSL_KEY : '%kernel.project_dir%/client-key.pem'
# !php/const PDO::MYSQL_ATTR_SSL_CERT : '%kernel.project_dir%/client-cert.pem'
# !php/const PDO::MYSQL_ATTR_SSL_CA : '%kernel.project_dir%/ca-cert.pem'
# !php/const PDO::MYSQL_ATTR_SSL_KEY : '%env(DATABASE_PUB_KEY)%'
# !php/const PDO::MYSQL_ATTR_SSL_CERT : '%env(DATABASE_PRIV_KEY)%'
# !php/const PDO::MYSQL_ATTR_SSL_CA : '%env(DATABASE_CA_CERT)%'
# PDO:MYSQL_ATTR_SSL_KEY : '%kernel.project_dir%/client-key.pem'
# PDO:MYSQL_ATTR_SSL_CERT : '%kernel.project_dir%/client-cert.pem'
# PDO:MYSQL_ATTR_SSL_CA : '%kernel.project_dir%/ca-cert.pem'
# PDO:MYSQL_ATTR_SSL_KEY : '%env(DATABASE_PUB_KEY)%'
# PDO:MYSQL_ATTR_SSL_CERT : '%env(DATABASE_PRIV_KEY)%'
# PDO:MYSQL_ATTR_SSL_CA : '%env(DATABASE_CA_CERT)%'
!php/const PDO::MYSQL_ATTR_SSL_KEY : '%DATABASE_PUB_KEY%'
!php/const PDO::MYSQL_ATTR_SSL_CERT : '%DATABASE_PRIV_KEY%'
!php/const PDO::MYSQL_ATTR_SSL_CA : '%DATABASE_CA_CERT%'
# PDO:MYSQL_ATTR_SSL_KEY : '%DATABASE_PUB_KEY%'
# PDO:MYSQL_ATTR_SSL_CERT : '%DATABASE_PRIV_KEY%'
# PDO:MYSQL_ATTR_SSL_CA : '%DATABASE_CA_CERT%'

我当前的%DATABASE_PUB_KEY%services.yaml中被引用,就像这个一样

parameters:
DATABASE_PUB_KEY: '%kernel.project_dir%/client-key.pem'
DATABASE_PRIV_KEY: '%kernel.project_dir%/client-cert.pem'
DATABASE_CA_CERT: '%kernel.project_dir%/ca-cert.pem'

当我用php bin/console debug:container --parameters --env=dev转储我的env时,我得到了正确的路径,如下所示:

/Users/u/documents/projects/mr/app/ca-cert.pem

所以我知道路径是正确的,symfony应该找到文件

我不知道该怎么做才能进一步调试它。到目前为止,我已经尝试了所有我能找到的东西

我必须添加一个新参数才能使其工作。不是解决问题的根源,而是目前的解决方法。如果有人能提供一个真正的解决方案。这是我的坏办法:

!php/const PDO::MYSQL_ATTR_SSL_KEY: '%DATABASE_PUB_KEY%'
!php/const PDO::MYSQL_ATTR_SSL_CERT: '%DATABASE_PRIV_KEY%'
!php/const PDO::MYSQL_ATTR_SSL_CA: '%DATABASE_CA_CERT%'
!php/const PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT: false

最新更新