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
感謝。このウィキのセクションでは、このオプションについて明らかです。 残念ながら、 'ssl [ca_cert] = path_to_cert'というURIを使ってもうまくいきません。 ':ssl => {:ca_cert => '/path/to/rds-combined-ca-bundle.pem'}'オプションで 'DataMapper.setup'を使用すると、それは動作します – stmllr
しばらくデバッグした後理由は 'Addressable :: Uri'の限界だという結論に達しました。 1レベル以上のハッシュを表現することを目的としたクエリ文字列は扱えないようです。私はそれを両方向で連続して使用してテストしました。1.ハッシュからクエリ文字列を作成します。 2.結果を使用してハッシュを再作成します。結果は '{" ssl "=> {:ca_cert =>"/path/to/cert "}の代わりに' {"ssl" => "{:ca_cert => \"/path/to/cert \ "} "}}' – stmllr