Hai esattamente ragione a voler crittografare il file delle impostazioni sensibili mantenendo comunque il file nel controllo della versione. Come accennato, la soluzione migliore sarebbe quella in cui Git crittograferà in modo trasparente determinati file sensibili quando li si spinge in modo che localmente (cioè su qualsiasi macchina che abbia il proprio certificato) sia possibile utilizzare il file delle impostazioni, ma Git o Dropbox o chiunque sia la memorizzazione dei file in VC non ha la possibilità di leggere le informazioni in testo normale.
Tutorial sulla crittografia / decrittografia trasparente durante Push / Pull
Questa sintesi https://gist.github.com/873637 mostra un tutorial su come utilizzare il driver di filtro sfumatura / pulizia di Git con openssl per crittografare in modo trasparente i file push. Hai solo bisogno di fare un po 'di configurazione iniziale.
Riepilogo di come funziona
Fondamentalmente creerai una .gitencrypt
cartella contenente 3 script bash,
clean_filter_openssl
smudge_filter_openssl
diff_filter_openssl
che vengono utilizzati da Git per la decrittografia, la crittografia e il supporto di Git diff. Una passphrase master e salt (risolta!) Sono definiti all'interno di questi script e DEVI assicurarti che .gitencrypt non venga mai effettivamente spinto. clean_filter_openssl
Script di esempio :
#!/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
Simile per smudge_filter_open_ssl
e diff_filter_oepnssl
. Vedi Gist.
Il tuo repository con informazioni riservate dovrebbe avere un file .gitattribute (non crittografato e incluso nel repository) che fa riferimento alla directory .gitencrypt (che contiene tutto ciò di cui Git ha bisogno per crittografare / decrittografare il progetto in modo trasparente) e che è presente sul tuo computer locale.
.gitattribute
Contenuti:
* filter=openssl diff=openssl
[merge]
renormalize = true
Infine, dovrai anche aggiungere il seguente contenuto al tuo .git/config
file
[filter "openssl"]
smudge = ~/.gitencrypt/smudge_filter_openssl
clean = ~/.gitencrypt/clean_filter_openssl
[diff "openssl"]
textconv = ~/.gitencrypt/diff_filter_openssl
Ora, quando si sposta il repository contenente le informazioni sensibili in un repository remoto, i file verranno crittografati in modo trasparente. Quando si estrae da un computer locale che ha la directory .gitencrypt (contenente la passphrase), i file verranno decodificati in modo trasparente.
Appunti
Dovrei notare che questo tutorial non descrive un modo per crittografare solo il tuo file di impostazioni sensibili. Ciò crittograferà in modo trasparente l'intero repository che viene inviato all'host VC remoto e decrittograferà l'intero repository in modo che venga completamente decrittografato localmente. Per ottenere il comportamento desiderato, è possibile posizionare i file sensibili per uno o più progetti in uno sensitive_settings_repo. È possibile esaminare il modo in cui questa tecnica di crittografia trasparente funziona con i sottomoduli Git http://git-scm.com/book/en/Git-Tools-Submodules se è davvero necessario che i file sensibili si trovino nello stesso repository.
L'uso di una passphrase fissa potrebbe teoricamente portare a vulnerabilità a forza bruta se gli aggressori avessero accesso a molti repository / file crittografati. IMO, la probabilità di ciò è molto bassa. Come indicato nella parte inferiore di questo tutorial, il mancato utilizzo di una passphrase fissa comporterà versioni locali di un repository su macchine diverse, dimostrando sempre che si sono verificate modifiche con "stato git".