GnuPG Anleitung - Seite 4

Installation von GnuPG

In der Regel wurde GnuPG2 bereits im Rahmen der Installation der Linux-Distribution mit installiert. Wer davon unabhängig die aktuellste GnuPG2 Version installieren will, kann der Anleitung folgen.

Vorarbeiten

Installation benötigter Entwicklungs-Bibliotheken:

sudo aptitude install libgnutlsNN-dev libldap2-dev libncursesN-dev libbz2-dev libreadlineN-dev sqlite3-dev

Installation aller GnuPG Komponenten

Zuerst Download aller Quellcode Archivdateien und ihrer GnuPG Signaturdateien per FTP:

  • GnuPG
  • Libgpg-error
  • Libgcrypt
  • Libksba
  • Libassuan
  • Pinentry

Falls der Distributions-Schlüssel von Werner Koch noch nicht im Schlüsselring vorhanden ist, den aktuellen Schlüssel suchen und importieren:

gpg --search-keys 0x249B39D24F25E3B6

Für jede Quellcode Archivdatei:

gpg --verify name-version.tar.bz2.sig name-version.tar.bz2
tar -xjf name-version.tar.bz2
cd name-version

Kompilierung

Die configure Aufrufe sind so gewählt, dass alle GnuPG und dirmngr Anwendungen in /usr/local/bin/ installiert werden und nicht auch in /usr/local/libexec/ und /usr/local/sbin/.

1. libgpg-error

./configure --prefix=/usr/local --enable-ld-version-script --with-pic
 
make
sudo make install

2. libassuan

./configure --prefix=/usr/local --with-libgpg-error-prefix=/usr/local
 
make
sudo make install

3. npth

./configure --prefix=/usr/local --with-pic
 
make
sudo make install

4. libgcrypt

./configure --prefix=/usr/local --enable-ld-version-script --enable-noexecstack --disable-hmac-binary-check --with-libgpg-error-prefix=/usr/local --with-pth-prefix=/usr/local --with-pic
 
ggf. plus CPU-spezifisch:
--disable-padlock-support
--disable-aesni-support
--disable-pclmul-support
--disable-drng-support
--disable-avx-support
--disable-avx2-support
--disable-neon-support
--disable-arm-crypto-support
 
make
sudo make install

5. libksba

./configure --prefix=/usr/local --enable-ld-version-script --with-libgpg-error-prefix=/usr/local
 
make
sudo make install

6. pinentry

./configure --prefix=/usr/local --[dis|en]able-pinentry-[emacs|gnome3|gtk2|qt|tty] --[dis|en]able-inside-emacs --with-libgpg-error-prefix=/usr/local --with-libassuan-prefix=/usr/local
 
make
sudo make install

Wer z. B. unter KDE neben der Curses nur die QT-Version von pinentry installieren will, setzt --disable-pinentry-gtk2 --disable-pinentry-gnome3 --enable-pinentry-qt.

7a. gnupg

./configure --prefix=/usr/local --exec-prefix=/usr/local --sbindir=/usr/local/bin --libexecdir=/usr/local/bin --disable-g13 --disable-selinux-support --disable-ntbtls --disable-gpg-idea --with-agent-pgm=/usr/local/bin/gpg-agent --with-pinentry-pgm=/usr/local/bin/pinentry --with-scdaemon-pgm=/usr/local/bin/scdaemon --with-dirmngr-pgm=/usr/local/bin/dirmngr --with-protect-tool-pgm=/usr/local/bin/gpg-protect-tool --with-dirmngr-ldap-pgm=/usr/local/bin/dirmngr_ldap --with-libgpg-error-prefix=/usr/local --with-libgcrypt-prefix=/usr/local --with-libassuan-prefix=/usr/local --with-ksba-prefix=/usr/local --with-npth-prefix=/usr/local
 
make
sudo make install

7b. GnuPG aus dem GnuPG GIT Repository klonen, kompilieren und installieren:

git clone git://git.gnupg.org/gnupg.git
cd gnupg
./autogen.sh --force
./configure --enable-maintainer-mode --prefix=/usr/local --exec-prefix=/usr/local --sbindir=/usr/local/bin --libexecdir=/usr/local/bin --disable-g13 --disable-selinux-support --disable-ntbtls --disable-gpg-idea --with-agent-pgm=/usr/local/bin/gpg-agent --with-pinentry-pgm=/usr/local/bin/pinentry --with-scdaemon-pgm=/usr/local/bin/scdaemon --with-dirmngr-pgm=/usr/local/bin/dirmngr --with-protect-tool-pgm=/usr/local/bin/gpg-protect-tool --with-dirmngr-ldap-pgm=/usr/local/bin/dirmngr_ldap --with-libgpg-error-prefix=/usr/local --with-libgcrypt-prefix=/usr/local --with-libassuan-prefix=/usr/local --with-ksba-prefix=/usr/local --with-npth-prefix=/usr/local
 
make
sudo make install

Nacharbeiten

Um bei Aufruf von gpg, gpgv usw. trotz einem bereits installierten GnuPG 2 und 1 aus dem Repository immer die GnuPG 2.1 Versionen zu verwenden, kann man enstprechende Aliase anlegen:

.bash_aliases
alias dirmngr='/usr/local/bin/dirmngr'
alias dirmngr-client='/usr/local/bin/dirmngr-client'
alias gpg='/usr/local/bin/gpg'
alias gpg2='/usr/local/bin/gpg'
alias gpg-agent='/usr/local/bin/gpg-agent'
alias gpgconf='/usr/local/bin/gpgconf'
alias gpg-connect-agent='/usr/local/bin/gpg-connect-agent'
alias gpg-preset-passphrase='/usr/local/bin/gpg-preset-passphrase'
alias gpgv='/usr/local/bin/gpgv'
alias gpgv2='/usr/local/bin/gpgv'
alias scdaemon='/usr/local/bin/scdaemon'

Für die pinentry Anwendung legt man noch einen Symlink an:

sudo ln -s /usr/local/bin/pinentry-version /usr/local/bin/pinentry

In Shellskripten wird der absolute Pfad zu gpg gesetzt:

#!/bin/sh
 
gpg="/usr/local/bin/gpg"
 
$gpg --optionen

gpg-agent und dirmngr

Aufgaben

Wofür der gpg-agent nötig ist und wie man ihn einrichtet, erfährt man hier. Der dirmngr Daemon ist ein Zertifikats-Manager, der vor allem die Verwaltung und Prüfung von TLS bzw. S/MIME Zertifikaten, CRL-Listen und OSCP-Antworten übernimmt. Die Funktion ist auch von Bedeutung, wenn man mit OpenPGP Schlüsselservern TLS-verschlüsselt per HKPS-Protokoll kommuniziert. Darüber hinaus wurden ab GnuPG 2.1 alle einzelnen Schlüsselserver-Hilfsprogramme (wie z. B. gpg2keys_hkp) entfernt und die Aufgaben aller Hilfsprogramme dem dirmngr übertragen. D. h., alle Aktionen (z. B. Schlüsselsuche) und Datenverbindungen mit Schlüsselservern werden vom dirmngr gemanaged. Die zentrale Rolle des dirmngr bzw. generelle Verwendung des dirmngr für den Datenverkehr mit Schlüsselservern soll die Kommunikation mit Schlüsselserver-Pools wie dem SKS verbessern und vereinfachen. Für die Suche und Aktualisierung öffentlicher Schlüssel mit --search-keys bzw. --refresh-keys per Schlüsselserver ist GnuPG >= 2.1.1 nötig.

Konfiguration

gpg-agent
~/.gnupg/gpg-agent.conf (Benutzer)
max-cache-ttl 3600
default-cache-ttl 1800
verbose
debug-level expert
extra-socket none
log-file /pfad/gpg-agent.log
no-allow-external-cache
pinentry-program /usr/local/bin/pinentry
scdaemon-program /usr/local/bin/scdaemon
keep-tty
~/.gnupg/gpg-agent.conf (root)
max-cache-ttl 900
default-cache-ttl 900
verbose
debug-level expert
extra-socket none
log-file /pfad/gpg-agent.log
no-allow-external-cache
pinentry-program /usr/local/bin/pinentry-curses
scdaemon-program /usr/local/bin/scdaemon

Anmerkung: Hier sind über das Alternativen-System (s. o.) /usr/local/bin/pinentry und /usr/local/bin/pinentry-x11 Symlinks auf /usr/local/bin/pinentry-qt.

dirmngr

Für den Betrieb des dirmngr ist es sinnvoll, im ~/.gnupg Verzeichnis einige Verzeichnisse und Dateien anzulegen, die der dirmngr erwartet und ihn über seine Konfigurationsdatei dirmngr.conf einzurichten.

mkdir ~/.gnug/{crls.d,extra-certs,trusted-certs}
touch ~/.gnupg/ldapservers.conf
touch ~/.gnupg/dirmngr.conf
vi ~/.gnupg/dirmngr.conf
~/.gnupg/dirmngr.conf
verbose
log-file /pfad/dirmngr.log
debug-level expert
gnutls-debug expert
disable-ldap
disable-http
ignore-ldap-dp
nameserver IP-Adresse
use-tor
keyserver hkp://jirk5u4osbsr34t5.onion
keyserver hkps://hkps.pool.sks-keyservers.net
hkp-cacert /usr/local/share/gnupg/sks-keyservers.netCA.pem
Erläuterung

Die keyserver Option gibt Protokoll und Adresse des Schlüsselservers an. Als Protokoll kann je nach Schlüsselserver hkp und hkps (HTTP/HTTPS Horowitz Schlüsselserver Protocol), ldap oder mailto verwendet werden. Auf der Statusseite und in der Übersicht zu Schlüsselserver-Pools kann man sich informieren, welche SKS Schlüsselserver und Schlüsselserver-Pools verfügbar sind.

Ab GnuPG 2.1.10 kann mit installiertem Tor ein Schlüsselserver, der als versteckter Tor Onion Service eingerichtet ist (an der .onion TLD erkennbar), direkt mit use-tor im „Tor-Modus“ ohne torsocks verwendet werden. Läuft Tor nicht, wird der zweite Keyserver verwendet. Mit der nameserver Option kann die IP-Adresse eines bestimmten DNS-Servers oder Tor (mit DNSPort 53) angegeben werden, den GnuPG im Tor-Modus über Tor zur Namensauflösung des Schlüsselserver Domainnamens verwenden soll. Andernfalls wird der öffentliche DNS-Server von Google mit der IP-Adresse 8.8.8.8 über Tor angefragt.

Abhängig vom System der Namensauflösung und Internetnutzung (z. B. lokale DNS- und HTTP-Proxys, DNS-Resolver, anonymisiert oder nicht usw.) kann es notwendig sein, eine andere Konfiguration zu wählen und folgende Optionen zu nutzen:

no-use-tor
standard-resolver
http-proxy host.domain.tld:port

Mit no-use-tor wird der Tor-Modus deaktiviert, standard-resolver erzwingt die Verwendung des Codes des DNS-Resolvers, der Standard des Systems ist und mit http-proxy kann man einen HTTP-Proxy angeben, über den Verbidnungen mit HKPS Schlüsselservern weitergeleitet werden.

Die hkp-cacert Option gibt den Pfad zum Root-CA Zertifikat des SKS HKPS Schlüsselserver-Pools an, mit dem die (korrekten) Zertifikate der SKS-Schlüsselserver (korrekt) signiert sein müssen und überprüft werden. Da nur HKPS Schlüsselserver verwendet werden, benötigt man auch keine LDAP-Unterstützung (disable-ldap). Im Tor-Modus ist die Angabe nicht nötig, da HKP statt HKPS und das Zertifikat des Schlüsselserver Tor-Dienstes verwendet werden.

Bis alles läuft, sorgen die verbose, log-file und debug Optionen dafür, über die erstellte Logdatei nachverfolgen zu können, ob Probleme auftreten und die Kommunikation mit den Schlüsselservern funktioniert.

Starten

Die gpg-agent und dirmngr Daemons werden i. d. R. eh automatisch gestartet, sobald der Benutzer Aktionen mit GnuPG ausführt, die Dienste der beiden Daemons erfordern. Wer die beiden Daemons generell nach der grafischen An- und Abmeldung automatisch starten lassen will, kann das Skript als root in /etc/X11/Xsession.d/ speichern.

/etc/X11/Xsession.d/90gpg-agent
GNUPGHOME="$HOME/.gnupg"
SOCKETDIR="/run/usr/$(id -u)/gnupg"
DIRMNGR=/usr/local/bin/dirmngr
GPGAGENT=/usr/local/bin/gpg-agent
DSOCK_FILE="$SOCKETDIR/S.dirmngr"
GSOCK_FILE="$SOCKETDIR/S.gpg-agent"
 
if test -x $DIRMNGR; then
   if [ ! -S "$DSOCK_FILE" ]; then
       $DIRMNGR --daemon --homedir $GNUPGHOME --sh
   fi
fi
 
if test -x $GPGAGENT; then
   if [ ! -S "$GSOCK_FILE" ]; then
       $GPGAGENT --daemon --sh
   fi
fi

Wer die beiden Daemons per systemd starten lassen will, speichert die Unit-Dateien unter /etc/systemd/user/:

sudo cp /pfad/gnupg-version/doc/examples/systemd-user/*.s* /etc/systemd/user/
sudo chmod 644 /etc/systemd/user/*.s*

Danach werden die Units aktiviert:

sudo systemctl daemon-reload
systemctl --user enable dirmngr.service
systemctl --user enable gpg-agent.service

Danach kann man den dirmngr und gpg-agent mit den folgenden Kommandos managen:

systemctl --user [reload|restart|start|status|stop] [dirmngr|gpg-agent]

Unterschiede GnuPG 2.0 <-> 2.X

GnuPG 2.0 Option GnuPG 2.1 Option Erläuterung
secret-keyring Private Schlüssel werden vom gpg-agent gemanaged und verschlüsselt in einzelnen hexadezimal(keygrip).key Dateien im ~/.gnupg/private-keys-v1.d/ Verzeichnis gespeichert. Für private Schlüssel, die auf OpenPGP Smartcards gespeichert sind, enthalten die *.key Dateien nur Verweise auf die privaten Schlüssel auf der Smartcard. Nach erstmaliger Anlage der Dateien kann die secring.gpg Schlüsselringdatei gelöscht werden.
[primary-]keyring ~/.gnupg/pubring.gpg [primary-]keyring ~/.gnupg/pubring.kbx GnuPG 2.1 verwendet wie gpgsm das Keybox Dateiformat für den öffentlichen Schlüsselring. Zur Konvertierung ändert man zuerst die Schlüsselring-Option in der gpg.conf und gibt dann in der Konsole ein:

cd ~/.gnupg
gpg2 --export-ownertrust > otrust.lst
mv pubring.gpg pubring.backup
gpg2 --import pubring.backup
gpg2 --import-ownertrust otrust.lst
keyserver-options ca-cert-file hkp-cacert (dirmngr) Der Pfad zu Root-CA Zertifikaten für HKPS Schlüsselserver und -pools wird nicht mehr in den Schlüsselserver-Optionen in der gpg.conf angegeben, sondern ein- oder mehrmalig mit der hkp-cacert Option in der dirmngr.conf.
list-options show-uid-validity Mit GnuPG 2.1 wird der Vertrauensgrad vor der Benutzer-ID immer angezeigt.
trust-model tofu+pgp
tofu-default-policy unknown
Ab GnuPG 2.1.10 kann neben (oder statt) dem PGP Web of Trust Schema auch das TOFU (Trust On First Use) Schema (siehe TOFU Design und TOFU for GnuPG) eingesetzt werden. Mit den Optionen wird weiterhin das PGP Web of Trust verwendet, zusätzlich der TOFU Algorithmus zur Erkennung von Konflikten bei einer Benutzer-ID und mehreren Schlüsseln, aber durch TOFU keine positiven Werte zur Gültigkeit von Schlüsseln vergeben. Die TOFU Daten werden in einer ~/.gnupg/tofu.db SQLite 3 Datenbank gespeichert.
GnuPG 2.0 Kommando GnuPG 2.1 Kommando Erläuterung
--gen-key --expert --full-gen-key --expert Das Kommando zur Schlüsselerzeugung mit allen Auswahlmöglichkeiten.
--gen-revoke --gen-revoke Das Kommando zum Erstellen eines Widerrufszertifikats für den Geamtschlüssel bleibt gleich, ab GnuPG 2.1 wird aber für jedes neu erstellte Schlüsselpaar automatisch ein Wiederrufszertifikat in der schlüssel-id.rev Datei im ~/.gnupg/openpgp-revocs.d/ Verzeichnis erstellt. Die Datei wird im Textformat gespeichert, um das Widerrrufszertifikat ausdrucken zu können und enthält Anweisungen, um das enthaltende Widerrufszertifikat zu importieren.

Repository-Pakete

Unter Linux wird GnuPG zwar bei jeder Distribution automatisch bei der Installation der Distribution mitinstalliert, aber nicht unbedingt GnuPG 2 und auch nicht GnuPG 2.1.X, sondern GnuPG 1. Da eine Vielzahl von Paketen das gnupg und gpgv Paket für GnuPG 1 als Abhängigkeit aufführen, kann GnuPG 1 nicht einfach deinstalliert werden.

sudo aptitude install gnupg2
sudo aptitude install gpgv2
sudo aptitude install gpa
sudo aptitude install pinentry-curses pinentry-[gtk2|qt4]

installiert unter Ubuntu nachträglich GnuPG 2, den GPA und die pinentry Anwendungen zur Eingabe von Passphrases in der Konsole und über grafische GTK2 oder QT4 Dialogfenster. Statt des GPA kann man auch Seahorse oder Kgpg als grafische GnuPG Oberflächen verwenden.

Über das Alternativen-System wird anschließend das System auf GnuPG 2 eingestellt:

sudo mv /usr/bin/gpg /usr/bin/gpg1
sudo mv /usr/bin/gpgv /usr/bin/gpgv1
sudo mv /usr/share/man/man1/gpgv.1.gz /usr/share/man/man1/gpgv1.1.gz
sudo mv /usr/share/man/man1/gpg.1.gz /usr/share/man/man1/gpg1.1.gz
 
sudo update-alternatives --install /usr/bin/gpg gpg /usr/bin/gpg2 100 \
--slave /usr/bin/gpgv gpgv /usr/bin/gpgv2 \
--slave /usr/share/man/man1/gnupg.1.gz gnupg.1.gz /usr/share/man/man1/gpg2.1.gz \
--slave /usr/share/man/man1/gpg.1.gz gpg.1.gz /usr/share/man/man1/gpg2.1.gz \
--slave /usr/share/man/man1/gpgv.1.gz gpgv.1.gz /usr/share/man/man1/gpgv2.1.gz
 
sudo update-alternatives --install /usr/bin/gpg gpg /usr/bin/gpg1 90 \
--slave /usr/bin/gpgv gpgv /usr/bin/gpgv1 \
--slave /usr/share/man/man1/gnupg.1.gz gnupg.1.gz /usr/share/man/man7/gnupg.7.gz \
--slave /usr/share/man/man1/gpg.1.gz gpg.1.gz /usr/share/man/man1/gpg1.1.gz \
--slave /usr/share/man/man1/gpgv.1.gz gpgv.1.gz /usr/share/man/man1/gpgv1.1.gz

Nach einer Aktualisierung von GnuPG 1 oder einem Systemupgrade muss der Vorgang wiederholt werden.

Will man zukünftig das System auf GnuPG 1 oder GnuPG 2 umstellen, gibt man den folgenden Befehl ein und wählt anschließend die entsprechende Nummer:

sudo update-alternatives --config gpg
 
Es gibt 2 Auswahlmöglichkeiten für die Alternative gpg
(welche /usr/bin/gpg bereitstellen).
 
  Auswahl      Pfad            Priorität Status
------------------------------------------------------------
* 0            /usr/bin/gpg2    100       Auto-Modus
  1            /usr/bin/gpg1    90        manueller Modus
  2            /usr/bin/gpg2    100       manueller Modus
 
Drücken Sie die Eingabetaste, um die aktuelle Wahl[*] beizubehalten,
oder geben Sie die Auswahlnummer ein:

Alternativ und einfacher werden nur die GnuPG 1 Binärdateien umbenannt und dann Symlinks auf die GnuPG 2 Binärdateien gesetzt:

sudo mv /usr/bin/gpg /usr/bin/gpg1
sudo mv /usr/bin/gpgv /usr/bin/gpgv1
sudo ln -s /usr/bin/gpg2 /usr/bin/gpg
sudo ln -s /usr/bin/gpgv2 /usr/bin/gpgv

Laut Informationen der man pages zu GnuPG und dem GPG-Agent wird zusätzlich die .bashrc für jeden Benutzer angepasst:

GNUPGHOME="$HOME/.gnupg"
export GNUPGHOME
GPG_TTY="$(tty)"
export GPG_TTY

In der Anleitung wird davon ausgegangen, dass root unter /root/.gnupg sein eigenes GnuPG Heimatverzeichnis mit eigenen Schlüsselringdatein, GnuPG und GPG-Agent Konfigurationen erhält, um dann als Benutzer mit „sudo -H“ GnuPG Operationen auszuführen.

Grafische GnuPG Oberflächen

Neben dem GPA gibt es weitere grafische Oberflächen (GUIs) für GnuPG.

Verweise auf aktuelle Seite