如何在我的版本控制系统中安全地保存我的密钥和密码?

问题:

我在版本控制系统中保持重要的设置,如开发和生产服务器的主机名和端口。但是我知道bad practicesecrets(如私钥和数据库密码)保留在VCS存储库中。
但密码 – 像任何其他设置 – 似乎应该被版本化。那么什么is保持密码版本控制的正确方法?
我想象它会涉及将secrets保存在自己的“秘密设置”文件中,并且that文件被加密和版本控制。但什么技术?并且如何正确地做到这一点?有没有更好的方法来完成呢?
我一般来问这个问题,但在具体情况下,我想使用gitgithubDjango/Python网站存储密钥和密码
此外,当我用git推/拉时,ideal解决方案会做一些神奇的事情 – 例如,如果加密的密码文件更改,则运行要求输入密码并将其解密的脚本。
 


编辑:为了清楚起见,我am询问在哪里存储production秘密。

回答:

您完全正确地要加密您的敏感设置文件,同时仍然保留文件的版本控制。正如你所提到的,最好的解决方案是将Git透明地加密某些敏感文件,当你推送它们,以便本地(即在任何有你的证书的机器上),你可以使用设置文件,但Git或Dropbox或谁是将文件存储在VC下无法以明文形式读取信息。
 推/拉时透明加密/解密教程
这个要点https://gist.github.com/873637显示了一个关于如何使用Git的smudge / clean过滤器驱动程序和openssl来透明加密推送文件的教程。你只需要做一些初始设置。
 总结如何运作
您将基本上创建一个包含3个bash脚本的.gitencrypt文件夹,

clean_filter_openssl 
smudge_filter_openssl 
diff_filter_openssl 

由Git用于解密,加密和支持Git diff。这些脚本中定义了一个主密码和salt(fixed!),您必须确保.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_ssldiff_filter_oepnssl。见Gist。
您的具有敏感信息的回购应具有.gitattribute文件(未加密并包含在repo中),该文件引用.gitencrypt目录(其中包含Git需要透明加密/解密项目的所有内容)以及本地计算机上存在的所有文件。
 .gitattribute内容:

* filter=openssl diff=openssl
[merge]
    renormalize = true

最后,您还需要将以下内容添加到您的.git/config文件中

[filter "openssl"]
    smudge = ~/.gitencrypt/smudge_filter_openssl
    clean = ~/.gitencrypt/clean_filter_openssl

    textconv = ~/.gitencrypt/diff_filter_openssl

现在,当您将包含敏感信息的存储库推送到远程存储库时,这些文件将被透明地加密。当您从具有.gitencrypt目录(包含您的密码)的本地机器中拉出时,这些文件将被透明地解密。
 笔记
我应该注意,本教程没有描述一种仅加密敏感设置文件的方法。这将透明地加密推送到远程VC主机的整个存储库,并解密整个存储库,以便在本地完全解密。要实现所需的行为,您可以在一个或多个项目中将敏感文件放在一个sensitive_settings_repo中。如果您真的需要敏感文件位于同一个存储库中,则可以调查此透明加密技术如何与Git子模块http://git-scm.com/book/en/Git-Tools-Submodules配合使用。
如果攻击者可以访问许多加密的repos /文件,那么使用固定密码可能理论上会导致暴力漏洞。 IMO,这个概率很低。本教程底部的注释提到,不使用固定的密码将导致不同机器上的本地版本的repo总是显示“git status”发生更改。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How can I save my secret keys and password securely in my version control system?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

4 + 1 =