Как защитить свои закрытые ключи при использовании github, heroku и локальной разработке? - PullRequest
8 голосов
/ 17 сентября 2010

В настоящее время я помещаю ключи, которые я использую для доступа к другим API и т.п., в файл environment.rb.Таким образом, он доступен как при локальном запуске, так и на heroku.

Однако я хотел бы начать делать мой код общедоступным через github, чтобы я мог получить некоторую помощь.

Какие шаги мне нужно сделать, чтобы это произошло, особенно для того, чтобы я мог тестировать локально и тестировать на heroku.

Кажется, что на heroku есть способ добавить ключи из командной строки, поэтомуим не нужно находиться в приложении ruby-on-rails.Но как насчет местного развития?

Ответы [ 3 ]

16 голосов
/ 17 сентября 2010

Вы можете использовать переменные окружения ( config vars на heroku), чтобы хранить ваши ключи API и не проверять их в исходном коде.

Для проекта , который я являюсьработая, я использую форк twitter-auth и изменил его, чтобы прочитать секретный ключ и ключ клиента из переменных env:

http://github.com/dpmcnevin/twitter-auth/blob/ace5d60a8ed8121cca4c97ef30a0cd025b99bfe1/lib/twitter_auth.rb#L68

OAuth::Consumer.new(
  ENV['oauth_consumer_key'] || config['oauth_consumer_key'],          
  ENV['oauth_consumer_secret'] || config['oauth_consumer_secret'],
  options 
)

Затем я установил ключи в моем .rvmrc в каталоге проекта для локального использования:

export oauth_consumer_key=xxxxxxxxxxxx
export oauth_consumer_secret=xxxxxxxxxxxxxxxxxxx
rvm ree@redactify

И, наконец, установил переменные окружения на heroku:

$ heroku config:add oauth_consumer_key=xxxxxxxxxxxxx
$ heroku config:add oauth_consumer_secret=xxxxxxxxxxxxx
$ heroku config
DATABASE_URL          => postgres://.....
RACK_ENV              => production
oauth_consumer_key    => xxxxxxxxxxxxxxxx
oauth_consumer_secret => xxxxxxxxxxxxxxxxxxx

Затем просто сделалубедитесь, что ваш .rvmrc находится в .gitignore, и тогда вы можете перейти на github, не открывая никаких ключей API.

4 голосов
/ 17 сентября 2010

Переместите их в инициализатор и добавьте файл в .gitignore

EDIT:

В конфиге есть каталог, называемый инициализаторами. Здесь вы размещаете код, который должен запускаться один раз при запуске приложения. Раньше для этих настроек использовался environment.rb, но инициализаторы помогают лучше организовать работу. Я хотел бы создать файл в каталоге инициализаторов с именем «load_keys.rb» или что-то в этом роде. В этом файле вы поместите точный код, который был в вашем файле environment.rb, который вам не нужен в github.

1 голос
/ 17 сентября 2010
  1. Поместите свои закрытые ключи в ~ / .ssh как обычно.
  2. Зашифруйте ваши личные ключи парольной фразой.
  3. Установить брелок .
  4. Добавьте eval $(keychain private-key-file1 private-key-file2 private-key-file3; source ~/.keychain/${HOSTNAME}-sh) в ваш ~ / .bashrc, ~ / .profile, ~ / .bash_profile или что там у вас. (См. Справочную страницу цепочки для ключей для csh, tcsh, zsh или чего-либо еще)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...