LoginSignup
4
4

More than 5 years have passed since last update.

パスワードなどを暗号化してcommitする

Last updated at Posted at 2013-07-02

背景

railsなどの開発をしていると、SNS連携したりDBに接続したりするときに、パスワードやSecretKeyなどのような「公開してはいけない情報」を扱うことがあります。これを普通に git などに Commitしてしまうと不都合があるわけで、通常はそういうファイルを .gitignore などで除外しておきます。

しかし、ライトなプロジェクトをJenkinsなどでDeployしているときは、一緒にCommitしてしまっておくほうが便利なわけで、なかなかジレンマがあるところです。

そこで、パスワードなどを暗号化した上でCommitして、Deploy時に復号化するような仕組みをちょっと作りました。

仕組みの概要

  • パスワードは secrets.json というファイルにJSON形式で記述して、アプリケーションはこれを読むようにする
  • .gitignore に secrets.json を追加しておき、commit しないようにする
  • bin/crypt で暗号化して、bin/decrypt で復号化する
bin/crypt
#!/bin/sh

cd $(dirname $0)
cd ..

PTN='secrets.json'

bash -c "echo -n 'Master Password: '"
read -s password1
echo
bash -c "echo -n 'Master Password confirmation: '"
read -s password2
echo

if [[ $password1 != $password2 ]]; then
    echo "passwords are not matching!"
    exit 1
elif [[ $password1 == "" ]]; then
    echo "Empty Password!"
    exit 1
fi

password=$password1

for filename in `find . -name "$PTN"`
do
    out=${filename}.crypted
    openssl enc -e -aes-256-cbc -in $filename -out $out -k "$password"
    echo crypt to $out
done
bin/decrypt
#!/bin/sh

set -e -a

cd $(dirname $0)
cd ..

PTN='secrets.json.crypted'

bash -c "echo -n 'Master Password: '"
read -s password
echo


for filename in `find . -name "$PTN"`
do
    out=${filename/.crypted/}
    openssl enc -d -aes-256-cbc -in $filename -out $out -k "$password"
    echo decrypt to $out
done

使い方

暗号化するとき

パスワードを secrets.json に書いて、bin/crypt を実行。パスワードを聞かれるので入力する。

% bin/crypt
Master Password: 
Master Password confirmation: 
crypt to ./config/secrets/development/secrets.json.crypted
crypt to ./config/secrets/production/secrets.json.crypted
crypt to ./config/secrets/test/secrets.json.crypted

secrets.json.crypted というファイルが作られるので、これをCommitする。

復号化するとき

% echo <PASSWORD> | bin/decrypt
もしくは単に
% bin/decrypt
として、
Master Password: 
decrypt to ./config/secrets/development/secrets.json
decrypt to ./config/secrets/production/secrets.json
decrypt to ./config/secrets/test/secrets.json

となり、secrets.json が復元されます。

JenkinsなどでDeployするときは、前者の方法が便利です。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4