設定ファイルを暗号化するSecureConfってライブラリを作った

手軽に設定ファイルをRSAで暗号化するライブラリ。
平文をそのまま保存しないという大義名分をミニマムに果たせる。
IDとかパスワードとかをうっかり平文のままコミットしてしまうのを防ぐ為に。
 

作るきっかけ、困ってた事

誰かが発行してくれるTokenを使ってなんやかんやするサービスだったら、設定ファイルを別に作ってgitignoreに追加しておけばいいかなと思う。
けど、普段使ってるID/Passを使ってWebベースで外部サービスにログインしてクロールしたり自動化したりゴニョゴニョしたりする場合、設定ファイルを別に作ったとしても平文では入れておきたくない。
かと言ってわざわざRSAのキーペア作って暗号化とかするのも面倒だし、うっかりキーペアをgit addしたりしてしまう人なので作業用ディレクトリに置く事自体がアレだったりする。
要はキーを生成・管理したくないけど、暗号化して平文をうっかりコミットしてしまうのは防ぎたい。
 

作ったもの

キーを生成・管理したくないからデフォルトでは ~/.ssh/id_rsa を使って暗号化する。
Yamlとかの設定ファイルをHashとして扱うライブラリで、要素名が「enc:」から始まれば暗号化をする。
値は、Marshalでシリアライズ出来るものであればなんでも扱える。
 

sample
path = File.expand_path("config.yml", File.dirname(__FILE__))
config = SecureConf::Config.new(path)

config["enc:id"] = "yoshida-eth0"
config["enc:pass"] = "himitsu"
config["last_access"] = Time.now.to_s
config.save

p config["enc:id"]
p config["enc:pass"]
p config["last_access"]

 

生成されるYamlファイル
---
enc:id: a9NhqDVi6JkjDQ89AisLzX153HoLU0zx/dbBb3XWE0uXXRcdwGKnFNQi7iXy3k5zM3DBWU/B4sJ2OWRLjNahKNzYUuQcfuSpRx4iStSzTFw6riLIsSokctT80GWYt8cUxcHQeApaKjI7Dwd+1zRUr2Txs+gYOIcItPPZ3oIeHItuQRnMN1wca7wxRW9unvmnXgui6WIoBJ+mH39deBM80UP57ssLBr7mYdd5xL8v9U3Xgs4802mvEDOuyLeP0sRx/okv4S0zhpzyUfYWRxtetP8WmDa6OyB/IkxLVIF+mLlmlPV800JZovbNExRCB5ibwRV/f+Y0Daa3WWIUjt3p/A==
enc:pass: 08sO8IsLuDmR6S+BEk4MzVk6OFRRhZ9A1BJT8U60Y9I/WBMZYfwKfI5lUzrSR3YjTO2raK/kQHpq4oYwSXkTBVeGf3shhzCqzPDjILkYfy2S+hq35gbOnc4v2eu2oo0g5uTMGq/coZ9mIhyUUPaf2dE0aseEIM3AfUKbDLAsrEWFaNVQVgQnmj9q4PKBBYX21UMDwfZ8jezdeOEJanbN81U6wYFCydbkJMUTPCLL5XvhtNpF3nYCc2dgUpjC5dFOGeYUAb9vnHX6/1LDSHHFQtg/bjG9OqpmDPOa4+hZa8xfefSxDJ7+fEhbWW0RlxbbnaFhHjBhs1pS4oz+m3mT/w==
last_access: '2016-11-05 22:19:58 +0900'

 

インストール

$ gem install secure_conf

 

あとがき

デフォルトでの使い方だと複数台で使う事を考えてない個人用途だけど、ちゃんと使いたければ色々出来るからソース読んでください。
 

URL

secure_conf | RubyGems.org | your community gem host
https://rubygems.org/gems/secure_conf
 
yoshida-eth0/ruby-secure_conf
https://github.com/yoshida-eth0/ruby-secure_conf