【问题标题】:Ruby Datamapper connection with SSL to MariaDB on Amazon RDSRuby Datamapper 通过 SSL 连接到 Amazon RDS 上的 MariaDB
【发布时间】:2018-05-20 06:09:51
【问题描述】:

如何使用 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

【问题讨论】:

    标签: ruby ssl amazon-rds ruby-datamapper


    【解决方案1】:

    在文档中

    https://github.com/datamapper/do/wiki/MySQL

    它也说

    • 经测试,仅需要 ca_cert 即可连接到 RDS。

    所以尝试只添加 ca_cert 路径并进行测试

    【讨论】:

    • 谢谢。这个 wiki 部分对选项很明显。不幸的是,使用ssl[ca_cert]=path_to_cert uri 不起作用。但是,如果我将 DataMapper.setup:ssl =&gt; {:ca_cert =&gt; '/path/to/rds-combined-ca-bundle.pem'} 选项一起使用,那么它可以工作
    • 经过一段时间的调试,我得出的结论是,原因是Addressable::Uri的限制。它似乎无法处理旨在表示超过 1 级哈希的查询字符串。我通过在两个方向上连续使用它进行了测试: 1. 从散列创建查询字符串。 2. 使用结果重新创建散列。结果是 {"ssl"=&gt;"{:ca_cert=&gt;\"/path/to/cert\"}"} 而不是 {"ssl"=&gt;{:ca_cert=&gt;"/path/to/cert"}}
    【解决方案2】:

    只需要一个参数::ssl =&gt; {:ca_cert =&gt; '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'
        }
    )
    

    【讨论】:

      猜你喜欢
      • 2015-10-27
      • 1970-01-01
      • 2011-06-09
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 2019-02-24
      相关资源
      最近更新 更多