Вы совершенно правы, желая зашифровать ваш конфиденциальный файл настроек, сохраняя его при управлении версиями. Как вы упомянули, лучшим решением было бы то, в котором Git будет прозрачно шифровать определенные конфиденциальные файлы, когда вы нажимаете их, чтобы локально (т.е. на любом компьютере, на котором есть ваш сертификат) вы могли использовать файл настроек, но Git или Dropbox или кто-либо еще Хранение ваших файлов в VC не позволяет читать информацию в открытом виде.
Учебник по прозрачному шифрованию / дешифрованию во время Push / Pull
Этот гист https://gist.github.com/873637 показывает учебное пособие о том, как использовать Git-драйвер smudge / clean filter с openssl для прозрачного шифрования отправленных файлов. Вам просто нужно сделать некоторые первоначальные настройки.
Краткое описание того, как это работает
В основном вы будете создавать .gitencrypt
папку, содержащую 3 скрипта bash,
clean_filter_openssl
smudge_filter_openssl
diff_filter_openssl
которые используются Git для дешифрования, шифрования и поддержки Git diff. Главная фраза-пароль и соль (исправлено!) Определены в этих сценариях, и вы ДОЛЖНЫ гарантировать, что .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
. Смотри Гист.
В вашем репо с конфиденциальной информацией должен быть файл .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, и расшифрует весь репозиторий, чтобы он полностью расшифровывался локально. Чтобы добиться желаемого поведения, вы можете поместить конфиденциальные файлы для одного или нескольких проектов в одно Sens_settings_repo. Вы можете исследовать, как этот метод прозрачного шифрования работает с подмодулями Git http://git-scm.com/book/en/Git-Tools-Submodules, если вам действительно нужно, чтобы чувствительные файлы находились в одном и том же хранилище.
Использование фиксированной парольной фразы теоретически может привести к уязвимостям грубой силы, если злоумышленники получат доступ ко многим зашифрованным репозиториям / файлам. ИМО, вероятность этого очень низкая. Как отмечается в нижней части этого урока, отказ от использования фиксированной парольной фразы приведет к тому, что локальные версии репо на разных машинах всегда будут показывать, что изменения произошли с «git status».