security-txt.de

AnleitungStand Lesezeit 8 Min.

security.txt signieren mit GnuPG

Die Anleitung zeigt die Befehle für Schlüssel und Signatur in Kurzform. Diese Seite erklärt sie ausführlich für alle, die GnuPG selten oder noch nie benutzt haben: was die Befehle tun, wie Sie die Schlüssel sicher aufbewahren und was die Fehlermeldungen beim Prüfen bedeuten.

GnuPG installieren

GnuPG (kurz gpg) ist die verbreitete freie Umsetzung von OpenPGP. Für die Befehle auf dieser Seite brauchen Sie Version 2.2 oder neuer.

  • Linux: meist vorinstalliert, sonst sudo apt install gnupg (Debian, Ubuntu) oder sudo dnf install gnupg2 (Fedora, RHEL).
  • macOS: brew install gnupg mit Homebrew oder die GPG Suite.
  • Windows: Gpg4win von gpg4win.de. Es bringt die grafische Oberfläche Kleopatra mit und das Kommandozeilenprogramm gpg, das Sie in PowerShell oder der Eingabeaufforderung aufrufen.

Prüfen Sie danach die Version:

gpg --version

Die erste Zeile muss gpg (GnuPG) 2.2 oder höher zeigen. Meldet sich Version 1.4, ist auf dem System zusätzlich die alte Fassung installiert; rufen Sie dann gpg2 statt gpg auf.

Unter Windows PowerShell schreibt die Umleitung mit > Dateien in UTF-16 und macht .asc-Dateien damit unbrauchbar. Nutzen Sie deshalb immer --output datei, wie in allen Befehlen auf dieser Seite.

Haupt- und Unterschlüssel

Ein OpenPGP-Schlüssel ist eigentlich ein Bündel: ein Hauptschlüssel und beliebig viele Unterschlüssel. Der Hauptschlüssel trägt die Identität (Name und Mailadresse) und bestimmt den Fingerabdruck. Unterschlüssel hängen daran und übernehmen einzelne Aufgaben. Welche, zeigen die Buchstaben in eckigen Klammern:

KürzelBedeutungWofür in der security.txt
[S]Sign, signierendie Datei signieren
[C]Certify, beglaubigenUnterschlüssel und Laufzeiten ändern; hat immer der Hauptschlüssel
[E]Encrypt, verschlüsselnMeldungen an psirt@ und csirt@ verschlüsselt empfangen

So sieht der PSIRT-Schlüssel aus der Anleitung in gpg --list-keys aus:

pub   nistp256 2026-10-12 [SC] [expires: 2028-10-11]
      E2FF9EC5A4DF56E538D887930993B9F74AFE756D
uid           [ultimate] Beispiel GmbH PSIRT <psirt@beispiel.de>
sub   nistp256 2026-10-12 [E] [expires: 2028-10-11]

pub ist der Hauptschlüssel, sub der Unterschlüssel zum Verschlüsseln. Der Signaturschlüssel für die security.txt braucht keinen Unterschlüssel: Sein Hauptschlüssel kann bereits signieren und zeigt nur [SC].

Warum getrennte Schlüssel? Die TR empfiehlt einen eigenen Schlüssel nur für die Signatur der security.txt (4.2.10 b). Das hat einen praktischen Grund: Den Schlüssel zum Entschlüsseln brauchen alle, die Meldungen lesen, den Signaturschlüssel nur die eine oder zwei Personen, die die Datei veröffentlichen. Je weniger Menschen und Rechner einen Schlüssel haben, desto kleiner das Risiko, dass jemand damit eine gefälschte security.txt signiert.

Schlüssel anlegen, Befehl für Befehl

gpg --quick-generate-key "Beispiel GmbH security.txt <security@beispiel.de>" nistp256 sign 2y
  • Name und Adresse in Anführungszeichen: die Identität. Ein Rollenname wie "Beispiel GmbH security.txt" ist besser als ein Personenname, weil der Schlüssel bleibt, wenn Personen wechseln.
  • nistp256: das Verfahren, hier ECDSA mit der Kurve NIST P-256. Alternativ brainpoolP256r1. Lassen Sie die Angabe nicht weg: Ohne sie wählt GnuPG Ed25519, das die TR nicht zulässt (4.2.10 d).
  • sign: nur signieren, keine Verschlüsselung.
  • 2y: zwei Jahre Laufzeit. Erlaubt sind nach der TR höchstens fünf (4.2.10 e). Kürzer ist besser, weil ein verlorener Schlüssel dann früher von selbst ungültig wird; verlängern lässt er sich jederzeit.

GnuPG fragt nach einer Passphrase. Vergeben Sie eine lange und legen Sie sie im Passwortmanager des Teams ab (siehe Sicher aufbewahren). Den öffentlichen Schlüssel exportieren Sie so:

gpg --armor --export --output security-txt-signatur.asc security@beispiel.de

--armor erzeugt Text statt Binärdaten, so wie die TR die .asc-Datei verlangt (4.5.3 c). Diese Datei ist öffentlich und gehört auf die Webseite. Den geheimen Schlüssel exportieren Sie nie auf die Webseite.

Den Fingerabdruck lesen und veröffentlichen

gpg --fingerprint security@beispiel.de
pub   nistp256 2026-10-12 [SC] [expires: 2028-10-11]
      E4C8 1F53 AF10 FCDC D272  C43A A918 CA58 5C9D 57C2

Der Fingerabdruck ist die zweite Zeile: 40 Zeichen aus 0 bis 9 und A bis F, zur besseren Lesbarkeit in zehn Vierergruppen. Er ist eine Prüfsumme über den öffentlichen Schlüssel. Wer den Schlüssel herunterlädt, vergleicht den Fingerabdruck mit dem, den Sie veröffentlicht haben. Stimmen beide überein, ist es Ihr Schlüssel und kein untergeschobener.

  • Immer vollständig angeben. Die kurzen Schlüsselkennungen aus den letzten 8 oder 16 Zeichen (hier 5C9D57C2) lassen sich gezielt nachbauen und reichen nicht.
  • Als Text, nicht als Bild, damit man ihn kopieren und vergleichen kann.
  • An einem anderen Ort als den Schlüssel selbst. Nach der TR auf der Meldeseite (4.5.3 d für den Signaturschlüssel, 4.3.2 b für die Postfachschlüssel). Wer Ihre Webseite übernimmt, kann zwar beides tauschen; ein Fingerabdruck zusätzlich in der Mailsignatur oder bei Governikus beglaubigt (siehe Anleitung) erschwert das.

Sicher aufbewahren und Widerruf vorbereiten

Die TR regelt nicht, wie Sie die geheimen Schlüssel aufbewahren. Bewährt haben sich vier Dinge:

  • Passphrase behalten. Ohne Passphrase lässt sich der Schlüssel nicht benutzen, ein gestohlener Rechner oder eine kopierte Sicherung allein reicht dann nicht. Die security.txt wird höchstens einige Male im Jahr signiert; dafür lohnt kein Schlüssel ohne Passphrase. Wer das Signieren automatisiert, legt die Passphrase im Geheimnisspeicher der Build-Umgebung ab, nicht in einem Skript.
  • Signieren auf dem Arbeitsrechner, nicht auf dem Webserver. Hochgeladen wird nur die fertig signierte Datei. Auf dem Webserver hat der geheime Schlüssel nichts zu suchen.
  • Eine Sicherungskopie offline. Geht der Rechner kaputt, ist der Schlüssel sonst weg.
  • Klare Zuständigkeit. Halten Sie fest, wer im Team welchen Schlüssel hat. Den Schlüssel zum Entschlüsseln brauchen alle, die das Postfach bearbeiten; den Signaturschlüssel nur, wer die Datei veröffentlicht. Scheidet jemand aus, gehört das auf die Checkliste.

Die Sicherungskopie erstellen Sie so und legen sie auf einen USB-Stick im Tresor oder in den Passwortmanager:

gpg --armor --export-secret-keys --output geheim-security-txt.asc security@beispiel.de

Die Datei ist mit der Passphrase geschützt, gehört aber trotzdem nicht in ein Ticket, eine Mail oder ein Git-Repository. Zurückspielen geht mit gpg --import geheim-security-txt.asc.

Mindestens so wichtig ist das Widerrufszertifikat. Damit erklären Sie einen Schlüssel für ungültig, auch wenn Sie ihn selbst nicht mehr haben. GnuPG legt beim Erzeugen automatisch eines an, im Ordner openpgp-revocs.d Ihres GnuPG-Verzeichnisses (unter Linux und macOS ~/.gnupg, unter Windows %APPDATA%\gnupg), benannt nach dem Fingerabdruck. Kopieren Sie diese Datei zur Sicherungskopie, aber getrennt vom geheimen Schlüssel. Ein eigenes Zertifikat mit Angabe eines Grundes erzeugt:

gpg --output widerruf-security-txt.asc --gen-revoke security@beispiel.de

Wer das Widerrufszertifikat hat, kann Ihren Schlüssel unbrauchbar machen, auch ohne Passphrase. Bewahren Sie es also ebenso sorgfältig auf.

Signieren und Signatur prüfen

Signiert wird wie in der Anleitung beschrieben mit gpg --clearsign. Prüfen Sie die Datei danach so, wie es auch Meldende tun: öffentlichen Schlüssel holen, Fingerabdruck vergleichen, Signatur prüfen.

curl -sO https://www.beispiel.de/.well-known/security-txt-signatur.asc
gpg --import security-txt-signatur.asc
curl -s https://www.beispiel.de/.well-known/security.txt | gpg --verify

Bei einer gültigen Signatur sieht das so aus:

gpg:                using ECDSA key E4C81F53AF10FCDCD272C43AA918CA585C9D57C2
gpg: Good signature from "Beispiel GmbH security.txt <security@beispiel.de>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: E4C8 1F53 AF10 FCDC D272  C43A A918 CA58 5C9D 57C2

Die Warnung erschreckt viele, ist aber normal: GnuPG weiß nur, dass die Signatur zum Schlüssel passt, nicht, ob der Schlüssel wirklich Ihnen gehört. Genau das klärt der Vergleich der letzten Zeile mit dem veröffentlichten Fingerabdruck. Auf deutschen Systemen erscheinen die Meldungen übersetzt.

MeldungUrsacheWas tun
Good signature (Korrekte Signatur)Signatur passt zur Datei.Fingerabdruck vergleichen, fertig.
This key is not certified with a trusted signature (trägt keine vertrauenswürdige Signatur)Der Schlüssel ist importiert, aber nicht von Ihnen beglaubigt.Normal. Fingerabdruck vergleichen.
BAD signature (FALSCHE Signatur)Die Datei wurde nach dem Signieren verändert, oft durch Bearbeiten, ein BOM oder eine Zeichensatz-Umwandlung beim Hochladen.Datei neu signieren und binär hochladen.
Can't check signature: No public key (Kein öffentlicher Schlüssel)Der öffentliche Schlüssel ist nicht im Schlüsselbund..asc-Datei importieren, siehe oben.
Note: This key has expired! (Schlüssel ist verfallen)Die Laufzeit des Schlüssels ist vorbei.Laufzeit verlängern, .asc neu exportieren und hochladen.
This key has been revoked by its owner (vom Besitzer widerrufen)Der Schlüssel wurde widerrufen.Mit neuem Schlüssel signieren, siehe unten.
no valid OpenPGP data found (Keine gültigen OpenPGP-Daten)Die Datei ist nicht signiert, oder statt der Datei kam eine HTML-Seite zurück.Abruf mit curl -s ansehen.
signing failed: Unusable secret key (Unbrauchbarer geheimer Schlüssel)Beim Signieren: Der eigene Schlüssel ist abgelaufen oder widerrufen.Laufzeit verlängern oder neuen Schlüssel anlegen.
signing failed: No secret key (Kein geheimer Schlüssel)Der geheime Schlüssel liegt nicht auf diesem Rechner oder --local-user nennt eine andere Adresse.Sicherungskopie importieren oder Adresse prüfen.
signing failed: Inappropriate ioctl for deviceGnuPG kann die Passphrase nicht abfragen, typisch in einer SSH-Sitzung.Vorher export GPG_TTY=$(tty) ausführen.

Wenn der Schlüssel abläuft, verloren geht oder in falsche Hände gerät

  • Abgelaufen: kein Drama. Die Laufzeit lässt sich auch nachträglich verlängern, der Fingerabdruck bleibt gleich: gpg --quick-set-expire <Fingerabdruck> 2y, für Unterschlüssel zusätzlich mit '*' am Ende. Danach die .asc neu exportieren und hochladen. Besser vorher, siehe Pflegen.
  • Verloren (Rechner defekt, keine Sicherung): Ein neuer Schlüssel muss her. Neue .asc-Datei hochladen, neuen Fingerabdruck auf der Meldeseite eintragen, security.txt neu signieren. Den alten Schlüssel mit dem Widerrufszertifikat für ungültig erklären, damit niemand ihm mehr vertraut. Ohne Zertifikat bleibt er bis zum Ende seiner Laufzeit gültig, ein weiterer Grund für kurze Laufzeiten.
  • In falschen Händen (Rechner gestohlen, Person mit Zugriff im Streit gegangen): Sofort widerrufen, denn wer den Schlüssel hat, kann eine security.txt mit eigenen Kontaktadressen gültig signieren. Danach wie bei Verlust.

Zum Widerrufen importieren Sie das Zertifikat und exportieren den öffentlichen Schlüssel neu. Bei der automatisch angelegten Datei aus openpgp-revocs.d müssen Sie vorher den Doppelpunkt vor -----BEGIN PGP PUBLIC KEY BLOCK----- löschen; er steht dort als Schutz gegen versehentliches Importieren.

gpg --import widerruf-security-txt.asc
gpg --armor --export --output security-txt-signatur.asc <Fingerabdruck>

Unter der bekannten Adresse liegt danach der neue Schlüssel. Den widerrufenen veröffentlichen Sie zusätzlich, etwa als security-txt-signatur-alt.asc oder über keys.openpgp.org (siehe unten). Wer ihn importiert, sieht beim Prüfen von Signaturen dieses Schlüssels die Warnung "revoked by its owner".

Optional: keys.openpgp.org und WKD

Für die security.txt reicht die .asc-Datei auf der eigenen Webseite. Zwei Wege machen den Schlüssel zusätzlich für Mailprogramme auffindbar:

  • keys.openpgp.org: ein Schlüsselverzeichnis, das Mailadressen erst nach einer Bestätigung per Mail veröffentlicht. Hochladen über die Webseite oder mit gpg --export psirt@beispiel.de | curl -T - https://keys.openpgp.org; die Antwort enthält den Link zur Bestätigung. Sinnvoll vor allem für die Postfachschlüssel, an die Meldende verschlüsselt schreiben.
  • Web Key Directory (WKD): Der Schlüssel liegt unter einer festen Adresse auf Ihrer eigenen Domain, und Programme wie Thunderbird oder gpg --locate-keys psirt@beispiel.de finden ihn allein über die Mailadresse. Die Einrichtung beschreibt das GnuPG-Wiki.

Quellen