保护Git仓库敏感信息
代码中无可避免有一些敏感信息,包含但不限于,数据库信息,密钥,账号信息等等。通常我们会把这些信息放在配置文件,这些信息若泄露会造成安全问题。
以前我们做法,是把配置文件通过.gitignore
排除配置文件,但是这些配置文件通常经常变动,没有一个地方统一维护,靠线下互相传,效率低下不说,也没法维护。
那能不能既方便又安全管理敏感信息?答案当然是有,不然就没今天这篇文章
下面就介绍如何利用git-crypt达到想要的效果
安装
-
Mac OS X
brew install git-crypt brew install gpg
-
Linux
make && make install PREFIX=/usr/local
-
Windows
- 下载git-crypt.exe
- 放在Path目录/添加Path目录
此方法为未尝试
使用
方法一(不依赖GPG)
-
初始化仓库
git-crypt init
-
创建
.gitattributes
文件并编辑指定的加密文件touch .gitattributes vi .gitattributes
格式如下
appsettings.json filter=git-crypt diff=git-crypt *.key filter=git-crypt diff=git-crypt config/**.json filter=git-crypt diff=git-crypt
-
上传代码
git add . && git commit -m 'git crypt' git push
-
导出密钥
git-crypt export-key /Users/wilsonpan/wilson.pan/keys/git-crypt-key
-
解密(第一次克隆之后)
git-crypt unlock /Users/wilsonpan/wilson.pan/keys/git-crypt-key
方法二(使用GPG)
-
初始化仓库
git-crypt init
-
创建
.gitattributes
文件并编辑指定的加密文件touch .gitattributes vi .gitattributes
格式如下
appsettings.json filter=git-crypt diff=git-crypt *.key filter=git-crypt diff=git-crypt config/**.json filter=git-crypt diff=git-crypt
-
生成密钥
gpg --gen-key # 按提示输入相关信息, name, email
-
配置git-crypt
git-crypt add-gpg-user <USER_ID> # <USER_ID>填入上面输入的名称/key,不然会报错
-
上传代码
git add . && git commit -m 'git crypt' git push
-
导出GPG密钥
gpg --output git-crypt.pgp --armor --export-secret-key <USER_ID> # 步骤二生成
-
导入GPG密钥(团队成员)
gpg --import git-crypt.pgp
-
解密
git-crypt unlock
注意:需要加密的文件需要在放在版本控制之前放在.gitattributes
两个方法都是使用公钥私钥非对称加密,只要私钥不泄露,安全性都是一样,但是方式二可以设置密码保护私钥,防篡改,方式二比方式一安全性又高一点
方式二需要用到GPG,步骤也多一点,安全就是要牺牲一点便利性。
当上面加密步骤操作完,本地操作是无感知,服务器上文件是加密的二进制文件,其他成员克隆/更新需要使用git-crypt unlock
解密,只需要操作一次,以后都是正常提交推送即可
服务器上看是这样
本地日志是不受影响