如何使用SSL在Amazon RDS上建立与MariaDB的ruby Datamapper连接?
这就是我的所作所为:
使用以下方法进行测试时,非SSL连接有效:
uri = 'mysql://user:pass@host:port/db_name'
connection = DataObjects::Connection.new(uri)
=> #<DataObjects::Mysql::Connection:0x000056179a3a5921
connection.secure?
=> false
根据MySQL datamapper wiki,ssl连接需要以下选项::ssl_ca, :client_key, and :client_cert
。
这将产生以下代码:
uri = 'mysql://user:pass@host:port/db_name?'
ssl_opts = 'ssl[ssl_ca]=file&ssl[client_key]=file&ssl[client_cert]=file'
connection = DataObjects::Connection.new(uri + ssl_opts)
connection.secure?
=> false
然而,唯一获得的文件是RDS combind CA bundle,来自RDS docs
我根本没有client_cert。
在cli上与mysql客户端连接使用SSL:
mysql --ssl -h host -u user -p pass db_name
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 1638
Server version: 10.1.26-MariaDB MariaDB Server
答案 0 :(得分:0)
在doc
中https://github.com/datamapper/do/wiki/MySQL
它也说
因此,请尝试仅添加ca_cert路径并进行测试
答案 1 :(得分:0)
只需要一个参数::ssl => {:ca_cert => 'pem_file'}
。
然而,看起来使用uri字符串进行配置不起作用。原因是Addressable :: Uri的限制。它无法处理旨在表示多于1级哈希的查询字符串。
好消息是它使用DataMapper.setup
配置哈希:
DataMapper.setup(:default,
:adapter => 'mysql',
:user => 'user',
:database => 'db_name',
:host => 'host',
:password => 'pass',
:ssl => {
:ca_cert => '/path/to/rds-combined-ca-bundle.pem'
}
)