Sie sind genau richtig, wenn Sie Ihre vertrauliche Einstellungsdatei verschlüsseln möchten, während die Datei weiterhin in der Versionskontrolle bleibt. Wie Sie bereits erwähnt haben, ist die beste Lösung eine, bei der Git bestimmte vertrauliche Dateien transparent verschlüsselt, wenn Sie sie pushen, sodass Sie lokal (dh auf jedem Computer mit Ihrem Zertifikat) die Einstellungsdatei verwenden können, aber Git oder Dropbox oder wer auch immer Das Speichern Ihrer Dateien unter VC kann die Informationen nicht im Klartext lesen.
Tutorial zur transparenten Verschlüsselung / Entschlüsselung beim Push / Pull
Diese Zusammenfassung https://gist.github.com/873637 zeigt ein Tutorial zur Verwendung des Smudge / Clean-Filtertreibers des Git mit openssl zum transparenten Verschlüsseln von Push-Dateien. Sie müssen nur eine Ersteinrichtung vornehmen.
Zusammenfassung der Funktionsweise
Sie erstellen im Grunde einen .gitencrypt
Ordner mit 3 Bash-Skripten.
clean_filter_openssl
smudge_filter_openssl
diff_filter_openssl
die von Git zur Entschlüsselung, Verschlüsselung und Unterstützung von Git diff verwendet werden. In diesen Skripten ist eine Master-Passphrase und ein Salt (behoben!) Definiert, und Sie MÜSSEN sicherstellen, dass .gitencrypt niemals tatsächlich gepusht wird. Beispielskript 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
Ähnliches gilt für smudge_filter_open_ssl
und diff_filter_oepnssl
. Siehe Gist.
Ihr Repo mit vertraulichen Informationen sollte eine Gitattribute-Datei (unverschlüsselt und im Repo enthalten) enthalten, die auf das .gitencrypt-Verzeichnis verweist (das alles enthält, was Git zum transparenten Ver- / Entschlüsseln des Projekts benötigt) und auf Ihrem lokalen Computer vorhanden ist.
.gitattribute
Inhalt:
* filter=openssl diff=openssl
[merge]
renormalize = true
Schließlich müssen Sie Ihrer .git/config
Datei auch den folgenden Inhalt hinzufügen
[filter "openssl"]
smudge = ~/.gitencrypt/smudge_filter_openssl
clean = ~/.gitencrypt/clean_filter_openssl
[diff "openssl"]
textconv = ~/.gitencrypt/diff_filter_openssl
Wenn Sie nun das Repository mit Ihren vertraulichen Informationen in ein Remote-Repository verschieben, werden die Dateien transparent verschlüsselt. Wenn Sie von einem lokalen Computer mit dem Verzeichnis .gitencrypt (mit Ihrer Passphrase) abrufen, werden die Dateien transparent entschlüsselt.
Anmerkungen
Ich sollte beachten, dass dieses Tutorial keine Möglichkeit beschreibt, nur Ihre vertraulichen Einstellungsdatei zu verschlüsseln. Dadurch wird das gesamte Repository, das auf den Remote-VC-Host übertragen wird, transparent verschlüsselt und das gesamte Repository entschlüsselt, sodass es lokal vollständig entschlüsselt wird. Um das gewünschte Verhalten zu erzielen, können Sie vertrauliche Dateien für ein oder mehrere Projekte in einem sensitive_settings_repo ablegen. Sie können untersuchen, wie diese transparente Verschlüsselungstechnik mit Git-Submodulen funktioniert: http://git-scm.com/book/en/Git-Tools-Submodules, wenn sich die vertraulichen Dateien wirklich im selben Repository befinden müssen.
Die Verwendung einer festen Passphrase könnte theoretisch zu Brute-Force-Sicherheitslücken führen, wenn Angreifer Zugriff auf viele verschlüsselte Repos / Dateien haben. IMO ist die Wahrscheinlichkeit dafür sehr gering. In einem Hinweis am Ende dieses Tutorials wird erwähnt, dass die Verwendung einer festen Passphrase dazu führt, dass lokale Versionen eines Repos auf verschiedenen Computern immer anzeigen, dass Änderungen mit dem Status "Git" aufgetreten sind.