Ви абсолютно праві, що хочете зашифрувати файл чутливих налаштувань, зберігаючи файл у контролі версій. Як ви вже згадували, найкращим рішенням було б таке, в якому Git прозоро зашифрує певні чутливі файли, коли ви натискаєте їх, щоб локально (тобто на будь-якій машині, яка має ваш сертифікат), ви могли використовувати файл налаштувань, але Git або Dropbox або хтось хто зберігання ваших файлів під VC не має можливості читати інформацію в простому тексті.
Підручник з прозорого шифрування / розшифрування під час натискання / перетягування
Цей суть https://gist.github.com/873637 демонструє підручник про те, як використовувати драйвер фільтру Git для розмиття / очищення з openssl для прозорого шифрування відсунутих файлів. Вам просто потрібно зробити кілька початкових налаштувань.
Короткий огляд того, як це працює
Ви в основному будете створювати .gitencrypt
папку, яка містить 3 баш сценарії,
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, і розшифрує все сховище, щоб воно повністю розшифрувалось локально. Щоб досягти потрібної вам поведінки, ви можете розмістити чутливі файли для одного або багатьох проектів в одному чутливому_настрої_репо. Ви можете дослідити, як працює ця прозора техніка шифрування з підмодулями Git http://git-scm.com/book/en/Git-Tools-Submodules, якщо вам дійсно потрібні чутливі файли, які знаходяться в одному сховищі.
Використання фіксованої парольної фрази теоретично може призвести до вразливих ситуацій, якщо зловмисники мали доступ до багатьох зашифрованих репост / файлів. ІМО, ймовірність цього дуже низька. Як зазначається внизу цього підручника, невикористання фіксованої парольної фрази призведе до того, що локальні версії репо на різних машинах завжди показують, що зміни відбулися зі статусом "git".