gpt4 book ai didi

ssl - 如何使用 Embarcadero FireDAC 在 AWS RDS 上托管的 MariaDB 上设置 SSL

转载 作者:行者123 更新时间:2023-12-04 22:41:28 24 4
gpt4 key购买 nike

我正在尝试通过 SSL 连接到托管在 AWS RDS 上的 MariaDB 实例

查看文档:http://docwiki.embarcadero.com/RADStudio/Rio/en/Connect_to_MySQL_Server_(FireDAC)

似乎我需要设置这 4 个参数:

UseSSL=True
SSL_ca=ca-cert.pem
SSL_cert=client-cert.pem
SSL_key=client-key.pem

但亚马逊只给了我一个 rds-combined-ca-bundle.pem

我对 TLS/SSL 了解不多。我需要生成那些 .pem 文件吗?
如果是,如何?

我也尝试这样做:
            db_params->Add("DriverID=MySQL");
db_params->Add("Server=my.rds.url.com");
db_params->Add("Port=9999");
db_params->Add("Database=my_database");
db_params->Add("User_Name=my_user");
db_params->Add("Password=my_password");
db_params->Add("UseSSL=True");
db_params->Add("SSL_ca=absolute\\path\\to\\rds-combined-ca-bundle.pem");

但这引发了异常
[FireDAC][Phys][MySQL] SSL connection error

没有用户和密码同样的事情......

提前致谢!

最佳答案

聚会迟到了,但其他人可能需要这个。
1.服务器
首先,您必须确保您的用户在身份验证时使用 SSL/TLS 加密。在 MySQL 控制台中,运行以下 SQL 语句:

SHOW GRANTS FOR 'my_user';
+---------------------------------------------------------------------------------------------+
| Grants for my_user@% |
+---------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, ... ON *.* TO `my_user`@`%` IDENTIFIED BY PASSWORD '*...' REQUIRE SSL |
+---------------------------------------------------------------------------------------------+
如果结果不包含 REQUIRE SSL ,您需要在您的用户上启用 SSL/TLS:
ALTER USER 'my_user' REQUIRE SSL;
FLUSH PRIVILEGES;
运行 SHOW GRANTS再次声明以确认您的用户现在正在使用 SSL/TLS。
当然,您必须在 admin/root 下运行所有​​这些,否则您将无法授予权限。
2.证书
然后,您必须下载 正确的证书 ,具体取决于您的 RDS 实例所在的位置(例如美国东部(俄亥俄)-> us-east-2-bundle.pem )。将该 .pem 保存在您选择的路径中。我将我的保存在我的可执行文件的相对路径中(例如'./Cert')。
您可以从 https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html 下载证书.
3. 代码
您基本上是正确的,但为了保持一致性,我将从头开始设置连接上的所有内容。这是帕斯卡代码,但你会明白的。
DBConnection.LoginPrompt := False;
DBConnection.ConnectedStoredUsage := [auRunTime];
DBConnection.ConnectionName := 'my_db_connection';
DBConnection.ResourceOptions.AutoConnect := False;
DBConnection.Params.DriverID := 'MySQL';
DBConnection.Params.Database := 'my_database';
DBConnection.Params.UserName := 'my_user';
DBConnection.Params.Password := 'my_password';
DBConnection.Params.Add('Server=my.rds.url.com');
DBConnection.Params.Add('Port=9999');
DBConnection.Params.Add('LoginTimeout=15');
DBConnection.Params.Add('UseSSL=True');
DBConnection.Params.Add('SSL_capath=./Cert');
DBConnection.Params.Add('SSL_ca=./Cert/us-east-2-bundle.pem');
DBConnection.Open;

关于ssl - 如何使用 Embarcadero FireDAC 在 AWS RDS 上托管的 MariaDB 上设置 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56299582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com