2017-12-06 4 views
0

Amazon RDS上のMariaDBへのRuby Datamapper接続をSSLで確立するにはどうすればよいですか?Amazon RDSのMariaDBへのRuby Datamapper接続

は、ここに私がやったことだ:でテストするとき

非SSL接続は動作します:MySQL datamapper wikiによると

uri = 'mysql://user:[email protected]:port/db_name' 
connection = DataObjects::Connection.new(uri) 
=> #<DataObjects::Mysql::Connection:0x000056179a3a5921 

connection.secure? 
=> false 

、SSL接続には、以下のオプションが必要です::ssl_ca, :client_key, and :client_cert。これは、次のコードにつながる

:ファイルだけがRDS combind CA bundleで取得しかし

uri = 'mysql://user:[email protected]: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 

、私は全くCLIENT_CERTを持っていないRDS docs

から参照さ。 CLIのmysqlクライアントで接続

は、SSLで動作します:docに

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

を行います。

ただし、設定にuri stringを使用しているように見えません。理由は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' 
    } 
) 
0

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

テストのみca_certが必要であったように、それはまた

  • を語りますRDSに接続します。 :ssl => {:ca_cert => 'pem_file'}

ので、必要なだけ1つのパラメータがありますのみca_certパスを追加してみてください、テストに

+0

感謝。このウィキのセクションでは、このオプションについて明らかです。 残念ながら、 'ssl [ca_cert] = path_to_cert'というURIを使ってもうまくいきません。 ':ssl => {:ca_cert => '/path/to/rds-combined-ca-bundle.pem'}'オプションで 'DataMapper.setup'を使用すると、それは動作します – stmllr

+0

しばらくデバッグした後理由は 'Addressable :: Uri'の限界だという結論に達しました。 1レベル以上のハッシュを表現することを目的としたクエリ文字列は扱えないようです。私はそれを両方向で連続して使用してテストしました。1.ハッシュからクエリ文字列を作成します。 2.結果を使用してハッシュを再作成します。結果は '{" ssl "=> {:ca_cert =>"/path/to/cert "}の代わりに' {"ssl" => "{:ca_cert => \"/path/to/cert \ "} "}}' – stmllr