我正在尝试通过 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/