Bestanden in git versleutelen met git-crypt

Op deze pagina:

Bestanden met gevoelige informatie, zoals wachtwoorden, kan je beter helemaal niet opslaan in git maar opslaan in environment-variabelen. Als het toch nodig is, dan kan je ze eerst versleutelen voordat je ze opslaat. Het gereedschap hiervoor is git-crypt. Dit moet je eerst installeren, als het nog niet aanwezig is op je systeem, dan krijg je dit:

git-crypt niet aanwezig

Het installeren van git-crypt:

git-crypt installeren

Met git-crypt kan je bestanden bij het uitvoeren van van git opdrachten automatisch met GPG sleutels versleutelen en ontsleutelen. Als git-crypt goed is ingesteld, dan worden de bestanden versleuteld bij push opdrachten en ontsleuteld bij pull opdrachten. Op de remote server (bijvoorbeeld Github) staan de bestanden dan versleuteld.

Behalve git-crypt, moet ook gnupg geinstalleerd zijn op je systeem.

Het activeren van git-crypt

Het activeren van git-crypt kan met:


git-crypt init

Aangeven welke bestanden via git-crypt versleuteld moeten worden doe je in het bestand .gitattributes wat je eerst moet aanmaken.

Een voorbeeld van de inhoud van het .gitattributes bestand:


server-inlog.txt filter=git-crypt diff=git-crypt
*.geheim filter=git-crypt diff=git-crypt
geheime-map/** filter=git-crypt diff=git-crypt
.gitattributes !filter !diff

In het bovenstaande voorbeeld zal volgens de eerste regel het bestand server-inlog versleuteld worden.

Volgens de tweede regel zullen alle bestanden die eindigen op .geheim versleuteld worden.

De derde regel geeft aan dat allle bestanden in geheime-map versleuteld moeten worden.

De laatste regel geeft aan dat het bestand .gitattributes juist NIET versleuteld moet worden.

Het testen of het bestand .gitattributes goed is kan met:


git-crypt status -e

Als er geen melding komt, dan is het goed, als er wel een melding komt, dan zal de melding aanwijzingen bevatten voor wat er fout is.

Nu zullen alle nieuwe en gewijzigde bestanden die versleuteld moeten worden versleuteld worden als er een push opdracht gegeven wordt. De versies van de bestanden die al ge-pusht waren voordat git-crypt werd ingesteld blijven echter onversleuteld.

Anderen toegang geven tot de versleutelde bestanden

Als je niet alleen zelf de bestanden gebruikt, maar andere deze ook moeten kunen gebruiken, dan moet je ze toegang geven tot deze versleutelde bestanden.

Daar zijn twee methoden voor:

  1. Het delen van de sleutel met ze (symmetrische sleutel).
  2. Het toevoegen van hun GPG sleutel aan de goedgekeurde sleutels.

Symmetrische sleutel

Een symmetrische sleutel kan je exporteren en (op een veilige manier) doorsturen naar degene die toegang tot je versleutelde git bestanden moet hebben.


git-crypt export-key pad/waar/de/sleutel/opgeslagen/moet/worden

De ander kan nu de sleutel gaan gebruiken met:


git-crypt unlock pad/naar/de/sleutel

De bestanden in de repository zullen nu ontsleuteld zijn en alle nieuwe opgehaalde veranderingen ook.

GPG sleutel

Als je GPG sleutels werkt, dan moet degene die toegang wil tot de versleutelde git bestanden eerst zelf een GPG sleutel aanmaken:


gpg --gen-key
gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Note: Use "gpg --full-generate-key" for a full featured key generation dialog.

GnuPG moet een gebruikers-ID bouwen ter identificatie van uw sleutel.

Werkelijke naam: Victor Voorbeeld
E-mailadres: victor@voorbeeld.nl
U heeft de volgende GEBRUIKERS-ID gekozen:
    "Victor Voorbeeld <samp>victor@voorbeeld.nl</samp>"           

Change (N)ame, (E)mail, or (O)kay/(Q)uit? o
We moeten een hele hoop willekeurige bytes genereren. U doet er goed aan om
een andere activiteit te ondernemen (tikken op het toetsenbord, de muis
bewegen, de schijven gebruiken) tijdens het genereren van het priemgetal.
Dit geeft het programma dat het willekeurig getal genereert, meer kans om
voldoende entropie te verzamelen.                 
gpg: sleutel 45AB1A2AC729D3F5 gemarkeerd als uiterst betrouwbaar
gpg: revocation certificate stored as '/home/victor/.gnupg/openpgp-revocs.d/DE46095EEE733CF006291A2445AB1A2AC729D3F5.rev'              │
publieke en geheime sleutel zijn aangemaakt en ondertekend.
                                                                       
pub   rsa3072 2020-09-26 [SC] [vervaldatum: 2022-09-26] DE46095EEE733CF006291A2445AB1A2AC729D3F5                                                                     

uid   Victor Voorbeeld <victor@voorbeeld.nl>
sub   rsa3072 2020-09-26 [E] [vervaldatum: 2022-09-26]

Nu kan de ander zijn sleutels opvragen en de ID kopiëren:


gpg --list-keys

De sleutel ID is de reeks van schijnbaar willekeurige karakters achter de vervaldatum.

Deze sleutel moet worden geexporteerd en aan jou worden doorgegeven:


gpg --export --armor sleutel-ID

Jij moet die GPG sleutel opslaan op je harde schijf en dan importeren:


gpg --import /pad/naar/sleutelbestand

Na de import moet je deze nog toevoegen als vertrouwd in git-crypt in de repository:


git-crypt add-gpg-user --trusted email-van-de-ander

Bij email-van-de-ander moet je het emailadres invullen dat de ander gebruikt heeft om de seutel aan te maken. Als je deze niet (precies) weet, kan je daar achter komen door de sleutels op te vragen:


gpg --list-keys

Nadat je de veranderingen hebt ge-commit naar de repository, zal de ander de bestanden kunnen ontsleutelen in zijn of haar werkmap met:


git-crypt unlock

Meer info

Meer informatie is te vinden op git-crypt - transparent file encryption in Git.

Op Github is git-crypt te vinden via git-crypt op github.

 

Verwante artikelen