nitrokey:arch:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
nitrokey:arch:start [16.12.2024 20:35. ] – [erster Test] djangonitrokey:arch:start [14.04.2025 17:55. ] (aktuell) – [Unterzeichnung von Commits] django
Zeile 548: Zeile 548:
 === Öffentlichen Schlüssel ausgeben === === Öffentlichen Schlüssel ausgeben ===
 Damit wir später unseren öffentlichen Schlüssel auch weitergeben oder zu einem [[https://keys.openpgp.org/|Keyserver]] hoch laden, exportieren wir diesen in eine Datei. Damit wir später unseren öffentlichen Schlüssel auch weitergeben oder zu einem [[https://keys.openpgp.org/|Keyserver]] hoch laden, exportieren wir diesen in eine Datei.
-  $ gpg --export --armor django@nausch.org > ~/.gnupg/secmail@nausch.org.pubkey+  $ gpg --export --armor django@nausch.org > ~/.gnupg/django@nausch.org.pubkey
  
 Diese Datei enthält unseren Schlüssel in ASCII-lesbarer Form. Diese Datei enthält unseren Schlüssel in ASCII-lesbarer Form.
-  $ cat ~/.gnupg/secmail@nausch.org.pubkey+  $ cat ~/.gnupg/django@nausch.org.pubkey
 <file key secmail@nausch.org.pubkey>-----BEGIN PGP PUBLIC KEY BLOCK----- <file key secmail@nausch.org.pubkey>-----BEGIN PGP PUBLIC KEY BLOCK-----
  
Zeile 900: Zeile 900:
 {{ :nitrokey:arch:thunderbird_007.png?nolink&874 |Bild: Menüfenster der Thunderbird individuellen Einstellungen}} {{ :nitrokey:arch:thunderbird_007.png?nolink&874 |Bild: Menüfenster der Thunderbird individuellen Einstellungen}}
  
-==== Nitrokey Start und Secure Shell  ==== +==== Nitrokey Start und Secure Shell ==== 
  
 <WRAP center round important 90%> <WRAP center round important 90%>
Zeile 1078: Zeile 1078:
  
 Anschliessend lassen sich Verbindungen zu unseren Remote-Systemen erst wieder aufbauen, wenn der GPG-Agent geladen und die Karte nach Eingabe der PIN entsperrt wurde! Anschliessend lassen sich Verbindungen zu unseren Remote-Systemen erst wieder aufbauen, wenn der GPG-Agent geladen und die Karte nach Eingabe der PIN entsperrt wurde!
 +
 +==== Nitrokey Start und Git/Gitlab ====
 +
 +<WRAP center round important 80%>
 +Git ist an sich kryptographisch sicher, so dass Änderungen sicher nachprüfbar nachverfolgt werden können. Was damit aber noch nicht sichergestellt werden kann, stammt die Änderung auch wirklich von der Person, der wir vertrauen! Git unterstützt hier ein paar Möglichkeiten die Arbeiten an einem Repository zu unterschreiben und auch zu überprüfen.
 +</WRAP>
 +
 +=== GPG Key-ID ermitteln ===
 +Zunächst holen wir uns die Key-ID unseres Users.
 +   $ gpg2 -K
 +<code>/home/django/.gnupg/pubring.kbx
 +-------------------------------
 +sec>  ed25519 2024-01-03 [SC]
 +      2C082445CDFB72DECD650350610ED9AEE553353F
 +      Card serial no. = FFFE 43243711
 +uid           [ultimate] Django (Bastard Operator from Hell [BOfH]) <django@nausch.org>
 +ssb>  ed25519 2024-01-03 [A]
 +ssb>  cv25519 2024-01-03 [E]</code>
 +
 +Die Key-ID unseres Adminusers **''<django@nausch.org>''** lautet also **''610ED9AEE553353F''** (die letzten 16 Stellen reichen hierfür aus).
 +
 +=== Git konfigurieren ===
 +
 +Nun können wir  Git konfigurieren, damit bei einem Commit Änderungen signiert werden können. Hierzu setzen wir die globale Git Option **''user.signingkey''** - wir setzen diese Option nun auf den zuvor ermittelten Key-ID Wert **''610ED9AEE553353F''**
 +   $ git config --global user.signingkey 610ED9AEE553353F!
 +
 +Am besten aktivieren wir zusätzlich auch noch die Option, dass automatisch __alle__ Commits automatisch signiert werden.
 +   $ git config --local commit.gpgsign true
 +
 +
 +=== Unterzeichnung von Commits ===
 +Wir sind nun in der Lage einzelne Commits zu unterschreiben, wie in dem nachfolgendem Beispiel. **''git commit -S -m %%"<-%%commit-message%%->"%%''**. Die Option **''-S''** zum Signieren wird jedoch __nur__ benötigt, wenn wir nicht wie zuvor beschrieben, das automatische Signieren der Commits __nicht__ aktiviert wurde!
 +<html><pre class="code">
 +<font style="color: rgb(25, 100, 5)">✔ </font><font style="color: rgb(196, 160, 0)">~/devel/ansible </font>[<font style="color: rgb(163, 75, 177)">AIDE-19.0 </font>L|<font style="color: rgb(204, 0, 0)">● 6</font>
 +20:13 $ git commit -S -m "AIDE 19.0 - auf konfigurierbaren Timer umgestellt"
 +[AIDE-19.0 4c03596] AIDE 19.0 - auf konfigurierbaren Timer umgestellt
 + 6 files changed, 11 insertions(+), 3 deletions(-)
 +</pre>
 +</html>
 +
 +=== Unterschrift von Commits anzeigen ===
 +Zum Anzeigen der Signaturen verwenden wir die Option **''%%--%%show-signature''** beim Befehlsaufruf **''git log''**.
 +<html><pre class="code">
 +<font style="color: rgb(25, 100, 5)">✔ </font><font style="color: rgb(196, 160, 0)">~/devel/ansible </font>[<font style="color: rgb(163, 75, 177)">AIDE-19.0 </font>L|<font style="color: rgb(25, 100, 5)">✔</font>
 +21:01 $ git log --show-signature -1
 +<font style="color: rgb(196, 160, 0)">commit 4c035960c07062227aa9e2a4832053e557085484 </font></font><font style="color: rgb(6, 152, 153)">HEAD </font>-> <font style="color: rgb(78, 154, 6">AIDE-19.0</font>, <font style="color: rgb(204, 0, 0)">origin/AIDE-19.0</font>)
 +<font style="color: rgb(6, 152, 153)">gpg: Signature made Sun 13 Apr 2025 08:14:51 PM CEST
 +gpg:                using EDDSA key 2C082445CDFB72DECD650350610ED9AEE553353F
 +gpg: Good signature from "Django (Bastard Operator from Hell [BOfH]) <django@nausch.org>" [ultimate]</font>
 +Author: django <django@nausch.org>
 +Date:   Sun Apr 13 20:14:51 2025 +0200
 +
 +    AIDE 19.0 - auf konfigurierbaren Timer umgestellt
 +</pre>
 +</html>
 +
 +Optional kann man mit der Option **''%G''** beim Aufruf von **''git log''** die Signaturen aller commits prüfen.
 +<html><pre class="code">
 +<font style="color: rgb(25, 100, 5)">✔ </font><font style="color: rgb(196, 160, 0)">~/devel/ansible </font>[<font style="color: rgb(163, 75, 177)">AIDE-19.0 </font>L|<font style="color: rgb(25, 100, 5)">✔</font>
 +21:18 $ git log --pretty="format:%h %G? %aN  %s"
 +4c03596 G django  AIDE 19.0 - auf konfigurierbaren Timer umgestellt
 +8f04a39 N Django BOfH  Merge branch 'HIDS0325Logging' into 'main'
 +cdff19c N django  Logging nur noch 1x im syslog
 +</pre>
 +</html>
 +
 +Hier sehen wir, dass __**nur**__ der Commit mit der ID **''4c03596''** signiert wurde (gekennzeichnet mit einem **''G''**), die anderen beiden jedoch nicht!
 +
 +=== PGP-Public-Key und GitLab ===
 +Damit die signierten Commits nun auch in Gitlab überprüft werden können, ist es nötig dass der öffentliche Schlüssel beim Gitlab-Konto hinterlegt wird. Hierzu speichern wir den PGP-Public-Key beim Menüpunkt  **GPG Keys** bei den **User Settings** ab.
 +
 +{{ :nitrokey:arch:git_signing_key.png?nolink&900 |Bild: Bildschirmhardcopy Gitlab User Einstellungen - PGP Schlüssel}}
 +
 +Bei der Anzeige der Commits in der GitLab Web-UI wird nun mit der Anzeige **Verfied Commit** entsprechend angezeigt, wenn der Commit entsprechend signiert wurde. Somit können wir zweifelsfrei feststellen, dass zum einen der Commit nicht verändert wurde und dass zum anderen der Urheber eben jener verifizierter Admin war|ist.
 +
 +{{ :nitrokey:arch:git_signed_commit.png?nolink&900 |Bild: Bildschirmhardcopy Gitlab Sigend Commit}} 
 +
 +=== Zusammenfassung ===
 +
 +<WRAP center round tip 80%>
 +Ja, Commits oder auch Tags mit einer PGP-Signatur zu versehen, ist sicherlich eine gute und valide Idee. Allerdings nutzt dies wenig wenn nicht alle Beteiligten verstanden und verinnerlicht haben, warum dies in den Standardworkflows zu integrieren und umzusetzen ist. Hierzu ist es wichtig dass zum einen **alle Team-Mitglieder** über einen aktuellen und benutzbaren PGP-Schlüssel verfügen und ihre lokale Git-Umgebung entsprechend konfiguriert haben, dass eben **alle** Commits entsprechend automatisch signiert werden.
 +</WRAP>
 + 
 +
  
  • nitrokey/arch/start.1734381323.txt.gz
  • Zuletzt geändert: 16.12.2024 20:35.
  • von django