如何使用 Embarcadero FireDAC 在 AWS RDS 上托管的 MariaDB 上设置 SSL
How to setup SSL on MariaDB hosted on AWS RDS with Embarcadero FireDAC
我正在尝试通过 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。代码
您基本上是正确的,但为了保持一致性,我将从头开始设置连接上的所有内容。这是 Pascal 代码,但您会明白这一点。
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 连接到托管在 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。代码
您基本上是正确的,但为了保持一致性,我将从头开始设置连接上的所有内容。这是 Pascal 代码,但您会明白这一点。
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;