Укажите SSL для соединения с внешней базой данных Myok Heroku - PullRequest
6 голосов
/ 16 марта 2012

Я запускаю приложение Rails 3.2 в стеке Cedar в Heroku.

Я использую Amazon RDS для своей базы данных MySQL, и у меня есть правильная настройка DATABASE_URL в конфигурационных файлах Heroku.

Как заставить Heroku использовать SSL при подключении к Amazon RDS?

Обычно это указывается как значение в database.yml, но поскольку Heroku генерирует для нас database.yml, я не уверен, как управлять этим параметром.

Спасибо!

Ответы [ 2 ]

14 голосов
/ 07 ноября 2013

Вы можете указать некоторые параметры SSL mysql2 через DATABASE_URL config. Они будут добавлены как элементы к динамическому database.yml, который генерируется во время процесса сборки Heroku, и поэтому они будут переданы при создании соединений mysql2.

Единственный параметр, который нужно передать для работы, это sslca (не путать с sslcapath).

1. Загрузите сертификат Amazon RDS CA и поставьте его в комплекте с приложением.

(Изменить) Amazon будет вращать этот сертификат в марте 2015 года. Вам потребуется новый файл с этой страницы вместо этого.

curl https://s3.amazonaws.com/rds-downloads/mysql-ssl-ca-cert.pem > ./config/amazon-rds-ca-cert.pem

2. Добавьте файл в git и снова разверните в Heroku.

3. Измените DATABASE_URL на sslca:

heroku config:add DATABASE_URL="mysql2://username:password@hostname/dbname?sslca=config/amazon-rds-ca-cert.pem -a <app_id>

Относительный путь там важен - см. Ниже.

Вот и все! Теперь, когда у вас работает SSL, вы можете установить, чтобы все соединения с этим пользователем разрешали только SSL:

GRANT USAGE ON dbname.* TO 'username'@'%' REQUIRE SSL;

Поиск и устранение неисправностей

Обязательно укажите относительный путь к sslca! В противном случае rake assets:precompile может сломаться с ошибкой SSL. Если вы получили сообщение об ошибке типа:

SSL connection error: ASN: bad other signature confirmation

или даже просто:

SSL connection error

... тогда, вероятно, что-то не так с тем, как ссылка на файл сертификата CA.

1 голос
/ 21 марта 2012

Посмотрев на введенный database.yml (см. Нижнюю часть http://neilmiddleton.com/sharing-databases-between-heroku-applications/), вы можете передать дополнительную конфигурацию как часть URL базы данных в качестве параметров запроса.

Теоретически это должно позволить вамнастройте, как хотите, хотя я не пробовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...