您完全正確地想要加密您的敏感設置文件,同時仍然在版本控制中維護該文件。正如你所提到的,最好的解決方案是,當你推送它們時,Git會透明地加密某些敏感文件,以便在本地(即在任何擁有你的證書的機器上)使用設置文件,但Git或Dropbox或任何人將文件存儲在VC下不能以純文本形式讀取信息。按期間
教程上的透明加密/解密/拉
這個要點https://gist.github.com/873637顯示瞭如何使用Git的污跡/清潔過濾器驅動程序使用OpenSSL透明地加密文件推的教程。你只需要做一些初始設置。
摘要它是如何工作
你基本上可以創建一個包含3個的bash腳本.gitencrypt
文件夾,
這是使用Git的解密,加密,並支持git的差異
clean_filter_openssl
smudge_filter_openssl
diff_filter_openssl
。主密碼和salt(固定!)在這些腳本內部定義,並且您必須確保.gitencrypt從不被實際推送。 例clean_filter_openssl
腳本:
#!/bin/bash
SALT_FIXED=<your-salt> # 24 or less hex characters
PASS_FIXED=<your-passphrase>
openssl enc -base64 -aes-256-ecb -S $SALT_FIXED -k $PASS_FIXED
類似爲smudge_filter_open_ssl
和diff_filter_oepnssl
。參見Gist。
您的敏感信息回購應該有一個.gitattribute文件(未加密幷包含在回購中)引用。gitencrypt目錄(其中包含Git透明地加密/解密項目所需的所有內容)以及本地計算機上存在的目錄。
.gitattribute
內容:
* filter=openssl diff=openssl
[merge]
renormalize = true
最後,您還需要將以下內容添加到您的.git/config
文件
[filter "openssl"]
smudge = ~/.gitencrypt/smudge_filter_openssl
clean = ~/.gitencrypt/clean_filter_openssl
[diff "openssl"]
textconv = ~/.gitencrypt/diff_filter_openssl
現在,當你把包含您的敏感信息發送到遠程倉庫存儲庫,這些文件將被透明加密。當您從具有.gitencrypt目錄的本地機器(包含您的密碼短語)中取出時,這些文件將被透明地解密。
注意
我要指出,本教程不描述了一種只加密您的敏感設置文件。這將透明地加密推送到遠程VC主機的整個存儲庫,並對整個存儲庫進行解密,以便在本地完全解密。爲了實現你想要的行爲,你可以將一個或多個項目的敏感文件放在一個sensitive_settings_repo中。如果您確實需要將敏感文件放在同一個存儲庫中,則可以調查此透明加密技術如何與Git子模塊http://git-scm.com/book/en/Git-Tools-Submodules一起使用。
如果攻擊者可以訪問許多加密的Repos /文件,則使用固定密碼短語理論上可能導致強力漏洞。國際海事組織,這個可能性非常低。正如本教程底部提到的一樣,不使用固定密碼短語會導致不同機器上的本地版本的回購站點總是顯示使用'git status'發生的更改。
實際上拿出一些錢保持整個回購私人。 – 2012-07-20 08:22:13
@JohnMee我實際上已經爲私人存儲庫付錢了,但問題依然存在 - 你不應該在你的存儲庫中保存敏感信息。 – 2012-07-20 08:25:10
我認爲滿足答案的很大一部分原因很難得到,即連接到數據庫的老式明文密碼是一個不那麼敵對的時代的遺蹟。正確的答案就像「你的代碼不需要祕密」,但你訪問的系統並沒有給你太多的選擇。 – msw 2012-07-26 11:54:34