85.1.44. pepsi-keys¶
manage the end-to-end key store: identities, peer keys and anchors
- Handbuchabschnitt:
1
85.1.44.1.1. Name¶
pepsi-keys - Ende-zu-Ende-Schlüsselmaterial erzeugen, importieren, veröffentlichen und ausmustern.
85.1.44.1.2. Übersicht¶
pepsi-keys [GLOBAL-OPTIONS] identity list [–address ADDRESS] [–json]
pepsi-keys [GLOBAL-OPTIONS] identity show IDENTITY-ID [–json]
pepsi-keys [GLOBAL-OPTIONS] identity generate ADDRESS –protocol PROTOCOL [–name NAME] [–days N] [–no-publish] [–csr] [–shared | –split]
pepsi-keys [GLOBAL-OPTIONS] identity import ADDRESS –protocol PROTOCOL –purpose PURPOSE –public FILE [–private FILE] [–algorithm NAME] [–primary] [–no-publish]
pepsi-keys [GLOBAL-OPTIONS] identity export IDENTITY-ID [–private] [–pem]
pepsi-keys [GLOBAL-OPTIONS] identity csr IDENTITY-ID
pepsi-keys [GLOBAL-OPTIONS] identity revoke IDENTITY-ID [–reason TEXT] [–upload]
pepsi-keys [GLOBAL-OPTIONS] identity forget-private IDENTITY-ID [-y]
pepsi-keys [GLOBAL-OPTIONS] identity set-primary IDENTITY-ID
pepsi-keys [GLOBAL-OPTIONS] identity publish [IDENTITY-ID] [–wkd] [–vks] [–retry [–dry-run]] [-y]
pepsi-keys [GLOBAL-OPTIONS] identity unpublish IDENTITY-ID
pepsi-keys [GLOBAL-OPTIONS] identity delete IDENTITY-ID [-y]
pepsi-keys [GLOBAL-OPTIONS] identity retire
pepsi-keys [GLOBAL-OPTIONS] peer list [–address ADDRESS] [–json]
pepsi-keys [GLOBAL-OPTIONS] peer show ADDRESS [–protocol PROTOCOL] [–json]
pepsi-keys [GLOBAL-OPTIONS] peer unclaimed [–address ADDRESS] [–all-sources] [–json]
pepsi-keys [GLOBAL-OPTIONS] peer import ADDRESS –protocol PROTOCOL –file FILE [–pin]
pepsi-keys [GLOBAL-OPTIONS] peer pin | unpin | remove PEER-KEY-ID
pepsi-keys [GLOBAL-OPTIONS] peer refresh [–address ADDRESS | –expire PEER-KEY-ID] [–expiring-within-days DAYS] [–limit N]
pepsi-keys [GLOBAL-OPTIONS] peer prune [–retain-days DAYS] [–dry-run]
pepsi-keys [GLOBAL-OPTIONS] ca list [–json]
pepsi-keys [GLOBAL-OPTIONS] ca add FILE [–label TEXT]
pepsi-keys [GLOBAL-OPTIONS] ca enable | disable | remove CA-ID
pepsi-keys [GLOBAL-OPTIONS] identity –otp CODE COMMAND …
pepsi-keys [GLOBAL-OPTIONS] otp status [ADDRESS] [–json]
pepsi-keys [GLOBAL-OPTIONS] otp enroll | remove ADDRESS [–otp CODE]
pepsi-keys [GLOBAL-OPTIONS] otp reset ADDRESS
pepsi-keys [GLOBAL-OPTIONS] wrap rotate [–dry-run]
pepsi-keys [GLOBAL-OPTIONS] dns ADDRESS
85.1.44.1.3. Beschreibung¶
pepsi-keys ist das Werkzeug des Operators für Pepsis Ende-zu-Ende-Kryptographie-Schlüsselspeicher — die drei Tabellen, die jeden Schlüssel enthalten, den die OpenPGP- und S/MIME-Verarbeitung braucht:
pepsi.crypto_identityDie Schlüsselpaare der Adressen, die wir bedienen, einschließlich der privaten Hälfte, im Ruhezustand verpackt (
custody = local, ein MTA-Schlüssel). Sie werden verwendet, um ausgehende Mail zu signieren und eingehende Mail zu entschlüsseln. Hier liegen außerdem die eigenen Schlüssel der Benutzer, deren private Hälfte nur in ihrem Mail-Client existiert (custody = client, ein MUA-Schlüssel; siehe MTA keys and MUA keys).pepsi.peer_keyDie öffentlichen Schlüssel und Zertifikate entfernter Korrespondenten, wie auch immer sie erlangt wurden, jeweils mit der Quelle, aus der sie stammen, einem Gültigkeitsurteil und einer Cache-Frist. Wird verwendet, um ausgehende Mail zu verschlüsseln und eingehende Signaturen zu verifizieren.
pepsi.ca_trustDie CA-Zertifikate, die eine eingehende S/MIME-Kette erreichen muss, damit ihre Signatur als vertrauenswürdig gilt.
Das Werkzeug ist keine Stage. Es verwaltet Datensätze direkt, in der Gestalt von pepsi-whitelist(1) und pepsi-settings(1), verbindet sich über den geteilten [pepsi-postgres]-Abschnitt mit derselben Datenbank wie die übrigen Komponenten und liest die CRYPTO_*-Optionen von [pepsi] sowie den in pepsi.conf(5) beschriebenen [pepsi-crypto]-Abschnitt.
Es ist aus zwei Gründen ein eigenständiges Binärprogramm statt Teil der vereinheitlichten pepsi-Ausführungsdatei: Es ist das einzige Programm im Baum, das Schlüsselmaterial erzeugt, und ein Standort kann es setuid installieren (siehe Privilegien).
85.1.44.1.3.1. Fähigkeit, nicht Gestalt¶
Das Material einer Adresse wird als ein Datensatz je Fähigkeit gespeichert, nie als „die Identität“. Der purpose jedes Datensatzes ist sign, encrypt oder both:
eine OpenPGP-Identität ist ein einziger
both-Datensatz — ein übertragbarer Schlüssel, dessen signierfähiger Hauptschlüssel einen Verschlüsselungs-Unterschlüssel trägt, sodass die Trennung intrinsisch ist und nichts kostet;eine S/MIME-Identität besteht normalerweise aus zwei Datensätzen, einem Zertifikat mit
digitalSignatureund einem mitkeyEncipherment/keyAgreement;mit
[pepsi] CRYPTO_SMIME_SHARED_KEY = yesist es stattdessen einboth-Zertifikat, das beide Schlüsselverwendungen trägt (nur RSA).
Diese Option entscheidet nur, wie neu erzeugte Identitäten aussehen. Beide Gestalten werden dauerhaft unterstützt und können für eine Adresse nebeneinander bestehen — ein altes, noch gültiges gemeinsames Zertifikat neben einem frisch ausgestellten geteilten Paar —, sodass jede Abfrage auf eine Fähigkeit passt (sign oder both; encrypt oder both), statt Datensätze zu zählen. Auflistungen und identity show geben genau deshalb den purpose aus.
85.1.44.1.3.2. Die Ausmusterung ist asymmetrisch¶
Pepsi stellt Klartext in das Postfach zu, sodass ein privater Entschlüsselungsschlüssel nur für noch unterwegs befindliche Mail und für das von einem Operator archivierte Chiffrat gebraucht wird — nie, um das eigene Postfach zu lesen. Ein privater Signier-Schlüssel kann nach der Ausmusterung überhaupt nichts Legitimes mehr tun: Alte Mail wird nie neu signiert. Also gilt bei Ablauf oder Widerruf:
die private Hälfte eines
sign-Datensatzes wird zerstört, und nur die öffentliche Hälfte bleibt erhalten, damit alte Signaturen weiterhin verifiziert werden können;die private Hälfte eines
encrypt-Datensatzes wird behalten;ein
both-Datensatz folgt der Entschlüsselungs-Regel — sie zu zerstören nähme die Fähigkeit, damit zu entschlüsseln —, was der Preis des Modus mit gemeinsamem Zertifikat ist: Einen kompromittierten Signierschlüssel dort zu widerrufen beendet zugleich die Fähigkeit, neue verschlüsselte Mail zu empfangen.
private_purged_at hält fest, wann Material verworfen wurde, sodass „bewusst zerstört“ von „nie besessen“ unterscheidbar bleibt; sowohl identity list als auch identity show melden es.
85.1.44.1.3.3. MTA-Schlüssel und MUA-Schlüssel¶
Eine Adresse kann Schlüssel zweier Arten halten. Ein MTA-Schlüssel (custody = local) ist einer, dessen private Hälfte Pepsi hält: pepsi-stage-encrypt(1) signiert damit, pepsi-stage-decrypt(1) öffnet damit Mail, und er wird in Autocrypt:-Headern beworben. Er wird durch identity generate, durch einen Import mit –private oder automatisch bei der ersten Einlieferung eines Benutzers unter [stage-encrypt] ENABLE_PEP erzeugt. Ein MUA-Schlüssel (custody = client) ist der eigene Schlüssel des Benutzers aus seinem Mail-Client: für immer rein öffentlich, nie primär. Pepsi verschlüsselt an ihn und reicht an ihn verschlüsselte Mail ungeöffnet durch, kann mit ihm aber nie signieren oder entschlüsseln. Er entsteht durch einen Import ohne –private, über die Web-Konsole oder die API, durch den E-Mail-Befehl register oder automatisch aus dem Autocrypt:-Header der vom Benutzer selbst eingelieferten Mail.
Das öffentliche Gesicht einer Adresse – das, was das Web Key Directory ausliefert und woran lokale Mail an den Benutzer verschlüsselt wird – ist der neueste aktive MUA-Schlüssel, wenn es einen gibt, sonst der primäre aktive MTA-Schlüssel. Der MTA-Schlüssel wird nicht stillgelegt, wenn ein MUA-Schlüssel hinzukommt; er entschlüsselt weiterhin Mail von Korrespondenten, die ihn noch verwenden. identity show gibt die Verwahrung (custody) aus und ob die Identität das öffentliche Gesicht ist.
85.1.44.1.3.4. Keyserver-Uploads werden je Identität angefordert¶
Jede Identität hält fest, ob ihr Upload zum Keyserver angefordert wurde (crypto_identity.vks_wanted). Automatisch erzeugte Schlüssel und automatisch registrierte MUA-Schlüssel beginnen mit ausgeschaltetem Wert: Autocrypt und das eigene Web Key Directory der Installation sind der Weg, auf dem sie gefunden werden, und ein Upload kann nicht zurückgenommen werden. Von Hand erstellte Schlüssel (identity generate, identity import sowie generate über Web und E-Mail) übernehmen [pepsi-keys] VKS_PUBLISH als Standardwert, und –no-publish lässt ihn ausgeschaltet. Eine ausdrückliche Anforderung – identity publish –vks, Upload to the key server in der Web-Konsole, der E-Mail-Befehl publish – setzt ihn, gleich was VKS_PUBLISH sagt. identity publish –retry lädt genau die Datensätze hoch, bei denen er gesetzt ist, sodass „nicht hochgeladen“ ein festgehaltener Zustand ist, und identity show meldet ihn.
85.1.44.1.3.5. Eigentum¶
Eine Identität ist auf die kleingeschriebene Adresse geschlüsselt. Wenn die Lokalitätsregeln von pepsi-common ([pepsi-crypto] LOCAL_DOMAINS, RECIPIENT_DELIMITER und TARGETS, mit Rückfall auf [pepsi-ingress] ACCEPTED_DOMAINS und den uid-Bereich aus /etc/login.defs) diese Adresse zu einem lokalen Konto auflösen, wird der passwd-Login in crypto_identity.login festgehalten; andernfalls ist die Spalte NULL — eine Rollenadresse, eine gehostete Domain, eine Installation vor einem Exchange.
Diese Spalte ist die Zugriffsregel. Ein unprivilegierter Aufrufer darf nur Identitäten sehen und ändern, deren login sein eigener ist, aufgelöst aus dem passwd-Eintrag der realen uid — nicht $USER, kein Argument, nicht die effektive uid. Eine Identität ohne besitzendes Konto gehört niemandem im Besonderen und ist daher nur für Operatoren: „ohne Eigentümer“ als „gehört allen“ zu behandeln würde jede Rollenadresse für jeden lokalen Benutzer beschreibbar machen.
root sowie die Konten pepsi-crypto, pepsi und pepsi-owner dürfen jede Identität verwalten. Peer-Schlüssel und Vertrauensanker haben keinen Namensraum je Benutzer — sie sind der Schlüssel eines anderen oder installationsweite Richtlinie —, sodass jeder peer- und ca-Unterbefehl, list eingeschlossen, nur für Operatoren ist, ebenso wie wrap rotate und identity retire.
85.1.44.1.3.6. Privilegien¶
Um an einen privaten Schlüssel zu gelangen, braucht es zweierlei, und beides wird getrennt bewacht:
die Datenbankrolle
pepsi-crypto, die einzige, der die Spaltecrypto_identity.private_wrappedgewährt ist (abgesehen vom Schema-Eigentümerpepsi-owner, der sie kraft Eigentümerschaft liest, aber den Schlüsselverschlüsselungsschlüssel nicht lesen kann). Jede gewöhnliche Dienstrolle — einschließlich despepsi-Kontos, als das jeder gewöhnliche Stage-Worker läuft — hält eine Berechtigung auf Spaltenebene, die sie auslässt, sodass eine Kompromittierung anderswo in der Pipeline die öffentliche Hälfte jeder Identität liefert und sonst nichts (siehe pepsi-setup(1));der Schlüsselverschlüsselungsschlüssel (KEK), der nur im Dateisystem lebt, in
secrets.d/pepsi-crypto.secret.
Die Datenbank allein liefert daher nichts als Chiffrat, und der Schlüsselverschlüsselungsschlüssel allein liefert überhaupt nichts.
pepsi-keys nimmt die pepsi-crypto-Identität nur für die Dauer jedes Datenbankaufrufs an. Als root ausgeführt wird es für den Aufruf zu jenem Konto (root hat keine eigene Datenbankrolle) und kehrt danach zurück; als pepsi-crypto oder pepsi-owner ausgeführt verbindet es sich schlicht als es selbst; aus einer setuid-Installation heraus hebt es seine effektiven Ids auf den Eigentümer des Binärprogramms an. Die Peer-Authentifizierung von PostgreSQL richtet sich nach der effektiven uid, nicht nach der gid, sodass ein setgid-Bit die Gruppe gewährte, die das Geheimnis-Fragment bewacht, aber nicht die Datenbankidentität — ein Programm, das diese Rolle sein muss, muss dieses Konto sein.
So wie ausgeliefert trägt das Binärprogramm kein setuid-Bit (Modus 0755): Ein Binärprogramm, das jeden privaten Schlüssel einer Installation öffnen kann, ist eine weit größere Beute als die eine Tabelle von pepsi-whitelist(1), sodass standardmäßig nur der Operator es ausführt. Ein Standort, der möchte, dass gewöhnliche Benutzer ihre eigenen Identitäten verwalten, macht es setuid pepsi-crypto.
Welche Autorität gilt, unterscheidet sich zwischen den beiden Installationen. Die obige Eigentumsregel je Identität greift nur, wenn das Binärprogramm das setuid-Bit tatsächlich trägt: Ein Aufrufer gilt als privilegiert, wenn er root ist, wenn sein Login eines der privilegierten Konten ist, oder wenn das Binärprogramm überhaupt nicht setuid ist. Bei der ausgelieferten 0755-Installation ist daher jeder Aufrufer privilegiert, soweit es dieses Programm betrifft, und nur PostgreSQL steht zwischen einem Benutzer und den Identitäten eines anderen — der Aufrufer authentifiziert sich als er selbst, und die Datenbank-Berechtigungen entscheiden. Das ist der beabsichtigte Entwurf, aber es bedeutet, dass jemandem die Datenbankrolle pepsi-crypto zu gewähren ihm jede Identität der Installation übergibt, was auch immer die Eigentumsregel dieses Programms sonst gesagt hätte. Wenn es setuid ist, gelten dieselben drei Vorsichtsmaßnahmen wie bei pepsi-whitelist(1): Die effektiven Ids werden vor allem anderen auf den aufrufenden Benutzer abgesenkt, die Umgebungsvariablen, die die Konfigurationssuche (HOME, XDG_CONFIG_HOME), die ${DATADIR}-Expansion (PATH) und libpq (PG*) steuern, werden entfernt, und -c/–config wird für unprivilegierte Aufrufer abgelehnt — die Konfiguration benennt die Datenbank und den Schlüsselverschlüsselungsschlüssel.
85.1.44.1.4. Befehle¶
85.1.44.1.4.1. Identitätsbefehle¶
- identity list [–address ADDRESS] [–json]
Listet Identitäten als Tabelle auf: Id, Adresse, Protokoll, Zweck, Status, ob der Datensatz der primäre für seine Fähigkeit ist, ob er veröffentlicht ist, der Zustand seiner privaten Hälfte (
yes/no/purgedoderclientfür den eigenen MUA-Schlüssel des Benutzers, dessen private Hälfte Pepsi nie gehalten hat) und sein Ablauf. Ein unprivilegierter Aufrufer sieht nur seine eigenen. –address beschränkt die Auflistung auf eine Adresse; –json gibt die Datensätze stattdessen als JSON aus.- identity show IDENTITY-ID [–json]
Gibt eine Identität vollständig aus, einschließlich ihres Fingerabdrucks, ihres Algorithmus, ihrer Verwahrung (
localfür einen MTA-Schlüssel,clientfür den eigenen MUA-Schlüssel des Benutzers), ob sie das öffentliche Gesicht der Adresse ist (der Schlüssel, den Korrespondenten erhalten),wrap_key_id, der Zeitstempel, eines etwaigen Widerrufsgrunds, des Web-Key-Directory-Hashes des lokalen Teils, unter dem die Adresse ausgeliefert wird, und ihres Keyserver-Zustands: einer vonverified atZEIT,uploaded atZEIT, awaiting confirmation,upload requestedodernot uploaded (not requested).- identity generate ADDRESS –protocol
openpgp|smime[OPTIONS] Erzeugt Schlüsselmaterial für ADDRESS und speichert es, private Hälfte verpackt. Das neue Material wird das primäre für seine Fähigkeit; nichts Bestehendes wird umgeschrieben oder ersetzt, sodass das vorherige Material brauchbar bleibt, um zu entschlüsseln, was bereits damit gesendet wurde.
OpenPGP erzeugt einen
both-Datensatz unter Verwendung von[pepsi] CRYPTO_OPENPGP_ALGORITHM(ed25519, der Standardwert, oderrsamitCRYPTO_GENERATE_RSA_BITS, das 2048, 3072 oder 4096 sein muss). S/MIME erzeugt das Signier-/Verschlüsselungspaar unter Verwendung vonCRYPTO_SMIME_ALGORITHM(rsa,p256oderp384), jeweils mit einem selbstsignierten Zertifikat für den sofortigen Gebrauch.- –name NAME
Anzeigename für die OpenPGP-User-ID (
Name <address>) oder den Zertifikatsbetreff. Ohne ihn ist die User-ID die bloße Adresse.- –days N
Lebensdauer des erzeugten Materials. Standardwert ist
[pepsi-crypto] IDENTITY_VALIDITY_DAYS(730, zwei Jahre).- –no-publish
Die öffentliche Hälfte nicht über das Web Key Directory ausliefern und nicht hochladen. Standardmäßig wird eine neue Identität veröffentlicht — an einen Schlüssel, den niemand abholen kann, kann nicht verschlüsselt werden —, und ihr Keyserver-Upload wird angefordert, wenn
[pepsi-keys] VKS_PUBLISHeingeschaltet ist.
Die Erzeugung auf Anforderung ist immer erlaubt, auch für eine Adresse, die bereits den eigenen MUA-Schlüssel des Benutzers oder einen widerrufenen Schlüssel hat; nur die automatische Erzeugung verweigert eine Adresse mit irgendeiner Identität.
- –csr
Gibt zusätzlich eine PKCS#10-Zertifikatsanforderung über jeden erzeugten Schlüssel aus, sodass eine echte CA ein Ersatzzertifikat für denselben Schlüssel ausstellen kann, ohne ihn neu zu erzeugen. Nur S/MIME; OpenPGP kennt kein solches Objekt.
- –shared
Erzwingt ein einziges S/MIME-Zertifikat, das beide Schlüsselverwendungen trägt, was auch immer
CRYPTO_SMIME_SHARED_KEYsagt. Mit einem Elliptische-Kurven-CRYPTO_SMIME_ALGORITHMabgelehnt: Ein EC-Schlüssel, der sowohl ECDSA als auch ECDH macht, ist algorithmusübergreifende Schlüsselwiederverwendung, die mehrere S/MIME-Clients ablehnen.- –split
Erzwingt die getrennten Signier- und Verschlüsselungszertifikate. Schließt –shared aus; ohne beide gilt der konfigurierte Standardwert.
- identity import ADDRESS –protocol P –purpose PURPOSE –public FILE [OPTIONS]
Speichert anderswo erzeugtes Material. PURPOSE ist
sign,encryptoderbothund muss beschreiben, was das Material tatsächlich kann — darauf passt jede spätere Abfrage. Die öffentliche Hälfte ist ein übertragbarer OpenPGP-Schlüssel oder ein X.509-Zertifikat (DER oder PEM, erkannt);-liest die Standardeingabe. Der Fingerabdruck wird aus dem Material selbst abgeleitet: der OpenPGP-Fingerabdruck oder der SHA-256 des Zertifikats-DER.- –private FILE
Die private Hälfte — ein OpenPGP-Transferable-Secret-Key oder ein PKCS#8-Schlüssel —, die vor dem Speichern verpackt wird, als MTA-Schlüssel (
custody = local). Ohne sie wird nur die öffentliche Hälfte behalten. Bei OpenPGP wird der Datensatz dann als eigener MUA-Schlüssel des Benutzers erfasst (custody = client), der nie primär ist (–primary wird für ihn ignoriert): Pepsi kann ihn veröffentlichen und an ihn verschlüsseln, aber nie mit ihm signieren oder entschlüsseln. Er kommt der automatischen Schlüsselerzeugung für die Adresse zuvor und wird zum öffentlichen Gesicht der Adresse; an ihn verschlüsselte Mail wird ungeöffnet an den Mail-Client weitergereicht. Ein rein öffentlicher S/MIME-Import behältcustody = local– typischerweise ein von einer CA ausgestelltes Zertifikat über einen Schlüssel, der bereits im Speicher liegt (siehe identity csr).- –algorithm NAME
Festzuhaltender Algorithmusname. Informativ; Standardwert
imported.- –primary
Macht dies zu dem Material, das für neue Nachrichten seiner Fähigkeit verwendet wird.
- –no-publish
Die öffentliche Hälfte nicht veröffentlichen. Andernfalls wird der Keyserver-Upload angefordert, wenn
[pepsi-keys] VKS_PUBLISHeingeschaltet ist.
- identity export IDENTITY-ID [–private] [–pem]
Schreibt das Material in seiner eigenen Binärform auf die Standardausgabe — OpenPGP-Pakete oder X.509-DER —, sodass es direkt in ein anderes Werkzeug geleitet werden kann.
- –private
Exportiert die private Hälfte statt der öffentlichen und entpackt sie dafür zunächst. Scheitert, wenn der Datensatz keine hält, und nennt, welches von „nie besessen“ und „gelöscht“ zutrifft.
- –pem
Verpackt X.509-Material in einen PEM-Block. OpenPGP-Material hat keine PEM-Form und wird mit einem Hinweis auf
gpg --enarmorabgelehnt.
- identity csr IDENTITY-ID
Gibt eine PKCS#10-Zertifikatsanforderung über den bestehenden privaten Schlüssel einer Identität aus, mit der Schlüsselverwendung, die ihr
purposeimpliziert. Das ist der Weg, auf den es ankommt, sobald eine Identität im Einsatz ist: Das selbstsignierte Zertifikat bringt die Organisation in Gang, und derselbe Schlüssel — bereits veröffentlicht, bereits zum Empfang verschlüsselter Mail verwendet — wird später einer echten CA vorgelegt, ohne ihn neu zu erzeugen. Nur S/MIME-Identitäten, und nur solange die private Hälfte noch gehalten wird.- identity revoke IDENTITY-ID [–reason TEXT] [–upload]
Zieht eine Identität zurück. Der Datensatz wird
revokedund hört auf, primär zu sein; die öffentliche Hälfte bleibt erhalten, sodass vor dem Widerruf erstellte Signaturen weiterhin geprüft werden können. Die private Hälfte einessign-Datensatzes wird hier und jetzt zerstört; einencrypt- oderboth-Datensatz behält seine private Hälfte, und der Befehl sagt das. TEXT wird mit dem Datensatz festgehalten.–upload baut zusätzlich ein Widerrufszertifikat — signiert von dem Schlüssel, den es ausmustert, mit TEXT als Grund — und veröffentlicht es beim konfigurierten Keyserver. Das ist das einzige Mittel für einen bereits hochgeladenen Schlüssel: Einem Keyserver kann man sagen, dass ein Schlüssel widerrufen ist, nie, ihn zu vergessen.
Das Hochladen geschieht vor dem lokalen Widerruf, denn eine
sign-Identität zu widerrufen zerstört den privaten Schlüssel, mit dem das Widerrufszertifikat signiert ist. Scheitert das Hochladen, wird nichts widerrufen, sodass das Keyserver-Problem behoben und der Befehl erneut ausgeführt werden kann. Ohne –upload zu widerrufen und dann einen veröffentlichten Widerruf zu wollen ist nicht wiederherstellbar.- identity forget-private IDENTITY-ID [-y, –yes]
Zerstört den privaten Schlüssel einer Identität dauerhaft und lässt die öffentliche Hälfte zurück. Das ist der einzige Weg, auf dem ein Entschlüsselungsschlüssel den Speicher verlässt, und er ist unumkehrbar: Alles, was noch in
pepsi.workqueueeingereiht ist, alles in einem verschlüsselten Archiv und jede später aus einer Sicherung erneut zugestellte Nachricht wird unlesbar. Bereits zugestellte Mail ist nicht betroffen. Der Befehl gibt genau das aus und bittet um Bestätigung; –yes überspringt die Frage, und ohne Terminal und ohne –yes lautet die Antwort nein, sodass ein unbeaufsichtigter Lauf kein Schlüsselmaterial zerstören kann, bloß weil niemand da war, um zu widersprechen.- identity set-primary IDENTITY-ID
Macht dies zu dem Material, das für neue Nachrichten seines Tripels (Adresse, Protokoll, Zweck) verwendet wird. Nur eine
active-Identität darf primär gemacht werden. Die vorherige primäre desselben Tripels wird zurückgestuft.- identity publish IDENTITY-ID [–wkd] [–vks] [-y, –yes]
Bedient die öffentliche Hälfte der Identität über das Web Key Directory. Das ist der umkehrbare Kanal — unser eigener Server, unsere eigene Domain — und ihn benennt –wkd; er ist zugleich der Standardwert, sodass das Flag nur existiert, um den Kanal ausdrücklich zu machen. Das Material bleibt so oder so brauchbar.
–vks hält zusätzlich die Upload-Anforderung fest (
vks_wanted), lädt den Schlüssel zum konfigurierten Keyserver hoch und bittet ihn, den Bestätigungslink an die Adresse zu mailen. Weil die Anforderung vor dem Versuch festgehalten wird, wird ein fehlgeschlagener Upload von identity publish –retry erneut versucht statt vergessen. Das ist unumkehrbar: Einem Keyserver kann später gesagt werden, dass der Schlüssel widerrufen ist, aber nie, ihn zu vergessen, und die Adresse wird zu einem dauerhaften öffentlichen Eintrag. Der Befehl gibt genau aus, was nicht zurückgenommen werden kann, und bittet um Bestätigung; –yes überspringt die Frage, und ohne Terminal und ohne –yes lautet die Antwort nein. Nur OpenPGP — für S/MIME gibt es keinen Keyserver, dessen Veröffentlichungskanal ist derSMIMEA-Eintrag, den dns ausgibt.- identity publish –retry [–dry-run]
Arbeitet statt einer einzelnen jede veröffentlichte, aktive OpenPGP-Identität ab, deren Upload angefordert wurde (
vks_wanted) und die auf dem Keyserver noch nicht bestätigt ist. Das ist die Form, die aus cron laufen sollte (stündlich genügt reichlich). Sie hängt nicht von[pepsi-keys] VKS_PUBLISHab: Diese Option entscheidet nur, ob von Hand erstellte Schlüssel als angefordert beginnen, und die eigene Anforderung eines Benutzers wird befolgt, gleich was sie sagt. Ein automatisch erzeugter Schlüssel steht nie auf der Liste, es sei denn, sein Eigentümer hat darum gebeten.Sie existiert, weil die Veröffentlichung ein zweistufiges Protokoll ist: Ein Hochladen liefert ein Token, nur das Token autorisiert die Bestätigungsmail, und nur ein gefolgter Link bewegt den Server dazu, den Schlüssel nach Adresse auszuliefern. Ein hochgeladener, aber nie bestätigter Schlüssel ist gespeichert und dennoch unauffindbar. Jede Runde fragt zuerst den Keyserver, ob die Adresse bereits ausgeliefert wird — sodass eine Bestätigung durch pepsi-stage-vks-confirm(1), durch einen Menschen oder in einem früheren Lauf, dessen Datenbankschreibvorgang nicht ankam, allesamt die Schleife beenden — und lädt andernfalls hoch und fordert die Verifikation an. Identitäten werden um
VKS_RETRY_INTERVALgestreckt, höchstensVKS_BATCHje Lauf, und nachVKS_MAX_ATTEMPTSaufgegeben, wobei der Grund für identity show auf dem Datensatz zurückbleibt. –dry-run listet auf, was veröffentlicht würde, und ändert nichts. Nur für Operatoren.- identity unpublish IDENTITY-ID
Hört auf, die Identität über das Web Key Directory zu bedienen, und vergisst ihre Keyserver-Buchführung, sodass der Wiederholungsjob sie in Ruhe lässt und eine spätere Neuveröffentlichung von einem sauberen Blatt beginnt.
Es entfernt nichts von einem Keyserver, denn nichts kann das. Wenn die Identität hochgeladen worden war, sagt der Befehl das und verweist auf identity revoke –upload, was der einzige Weg ist, der Welt mitzuteilen, dass der Schlüssel tot ist.
- identity delete IDENTITY-ID [-y, –yes]
Entfernt den Datensatz vollständig, öffentliche Hälfte inbegriffen. Bestätigt wie forget-private. Bevorzugen Sie revoke, das die öffentliche Hälfte behält, sodass alte Signaturen prüfbar bleiben; eine gelöschte Identität hinterlässt überhaupt nichts.
- identity retire
Führt den Ausmusterungsdurchlauf über jede Identität aus: Alles jenseits seines
expires_atwirdexpired, privates Signier-Material wird zerstört und mit einem Stempel versehen, und Entschlüsselungsmaterial (einschließlich dem eines gemeinsamenboth-Datensatzes) bleibt unangetastet. Ebenso für einen periodischen Timer gedacht wie für die Kommandozeile; identity revoke wendet dieselbe Regel inline für eine Identität an. Nur für Operatoren.
85.1.44.1.4.2. Peer-Befehle¶
- peer list [–address ADDRESS] [–json]
Listet zwischengespeicherte Peer-Schlüssel auf: Id, Adresse, Protokoll, Quelle, Gültigkeit, ob die erzeugende Abfrage DNSSEC-validiert war, ob er gepinnt ist, und den Fingerabdruck.
- peer show ADDRESS [–protocol PROTOCOL] [–json]
Zeigt die Schlüssel, die für ADDRESS tatsächlich verwendet würden, nach der Passungsregel: Eine exakte Adressübereinstimmung gewinnt immer, und ein
*@domain-Datensatz wird nur herangezogen, wenn es keine exakte gibt (er wird in der Ausgabe als domainweiter Rückfall gekennzeichnet). PROTOCOL ist standardmäßigopenpgp.- peer unclaimed [–address ADDRESS] [–all-sources] [–json]
Listet die Adressen auf, die diese Installation bedient, die keine Identität von uns besitzen, wohl aber einen geernteten oder per Gossip erhaltenen Peer-Schlüssel — die Schlüssel, die ein Fremder einschleusen kann, indem er uns eine Nachricht mit gefälschtem
From:schickt. Schlüssel werden aus demFrom:-Header geerntet, den der Absender schreibt, und die eingehende Authentifizierung ist fail-open, sodass ein solcher Datensatz auf einer Installation, die DMARC für ihre eigene Domain nicht durchsetzt, einen unserer eigenen Benutzer nennen kann. Wo wir eine Identität besitzen, ist der Datensatz wirkungslos (unser eigener Schlüssel hat Vorrang); wo nicht, entscheidet er, womit Mail an diesen Benutzer verschlüsselt wird. Das ist gewollt — es ist auch der einzige Weg, auf dem ein Benutzer, der GnuPG in seinem eigenen Client betreibt, hier seinen echten Schlüssel bekommt —, dies ist also eine Arbeitsliste, kein Alarm: Bestätigen Sie jeden Schlüssel mit seinem Inhaber und importieren Sie ihn dann als Identität (identity import ohne –private), wonach er wirkungslos ist, oder entfernen Sie ihn (peer remove).Bedient heißt, die Domain ist eine von
[pepsi-ingress] ACCEPTED_DOMAINSoder[pepsi-crypto] LOCAL_DOMAINS; ein passwd-Konto ist nicht erforderlich. Keine Identität heißt keine aktive Identität, die verschlüsseln kann — dieselbe Regel, die der Vorrang in der Verschlüsselungs-Stage anwendet —, sodass eine Adresse, deren einzige Identität abgelaufen ist, widerrufen wurde oder nur signieren kann, aufgelistet wird; die SpalteIDSzählt ihre Identitäten in jedem Zustand. Geerntet ist die Quelleinbound(der eigeneAutocrypt:-Header des Absenders oder ein angehängter Schlüssel) odergossip(dasAutocrypt-Gossip:eines Dritten); –all-sources schließt auch entdeckte, manuelle und per API gesetzte Schlüssel ein, also die Menge, dieGET /api/v1/peers/unclaimedmeldet. Ein*@domain-Datensatz wird nie aufgelistet. Nur lesend und nur für den Operator. Der Exit-Status ist 0, ob etwas gefunden wurde oder nicht; mit –json ist ein leerer Bericht[], worauf eine periodische Prüfung testen sollte.- peer import ADDRESS –protocol P –file FILE [–pin]
Speichert den Schlüssel eines Korrespondenten von Hand (
-liest die Standardeingabe). Der Datensatz wird mit der Quellemanualfestgehalten, die jeden Entdeckungsmechanismus überragt, und ist die einzige Quelle, die eine*@domain-Adresse tragen darf — eine Datenbank-Einschränkung, keine Konvention, sodass keine Entdeckungsantwort für eine Adresse je auf eine ganze Domain verallgemeinert werden kann.Ein Schlüssel, der mit einem bereits gespeicherten kollidiert, ersetzt ihn nur, wenn er alles Dortige überragt; ein gepinnter Datensatz wird nie verdrängt, und der Befehl sagt, welches von gespeichert, aufgefrischt, ersetzt und behalten geschah. (Die einzige Ausnahme von „nur wenn er überragt“ ist die Neuestes-gewinnt-Regel der Autocrypt-Stufe, an der ein
manual-Schlüssel in keiner Richtung beteiligt ist — siehe pepsi-keydisc(1).)- –pin
Pinnt den importierten Schlüssel, sodass die Entdeckung ihn nie ersetzt.
- peer pin PEER-KEY-ID, peer unpin PEER-KEY-ID
Setzt oder löscht den Pin auf einem gespeicherten Schlüssel.
- peer refresh [–address ADDRESS] [–expire PEER-KEY-ID] [–expiring-within-days DAYS] [–limit N]
Validiert zwischengespeicherte Peer-Schlüssel neu. Es frischt immer nur Schlüssel auf, die bereits existieren: Es entdeckt nie einen Schlüssel für eine Adresse, die keinen hat. Pepsi schlägt eine Adresse nach, wenn es Mail für sie hat, weshalb die Entdeckung von der Pipeline getrieben wird (pepsi-keydisc(1)) und nicht von diesem Befehl.
Drei Gestalten, ausgewählt durch die Flags:
- –address ADDRESS
Führt die gesamte Entdeckungs-Auffächerung für eine Adresse in diesem Prozess aus — jede Methode in
[pepsi-keydiscovery] SOURCESauf einmal, mit der Rang-Gnadenfrist-Abbruchregel — und speichert das Gefundene mit der richtigen Quelle und dem richtigen DNSSEC-Kennzeichen. Eine Zeile je Methode wird ausgegeben: das Protokoll und der Fingerabdruck (mit(dnssec)markiert für eine AD-validierte DANE-Antwort),no keyoder der Fehler. Das erledigt außerdem die Entdeckungsanfrage der Adresse, sodass jede darauf geparkte Nachricht freigegeben wird. Eine durchALLOW_DOMAINS/DENY_DOMAINSausgeschlossene Adresse wird abgelehnt statt abgefragt.- –expire PEER-KEY-ID
Löscht die Cache-Frist eines Datensatzes, sodass die nächste Nachricht für diese Adresse neu abholt. Überhaupt keine Netz-E/A, und schließt –address aus.
- (kein Flag)
Durchlauf: Jeder fällige Schlüssel — sein
refresh_afterist verstrichen, oder sein eigener Ablauf fällt in –expiring-within-days (Standardwert7) — wird durch dieselbe Auffächerung geschickt, bis zu –limit Schlüsseln (Standardwert100). Gepinnte und von Hand eingetragene (manual/api) Schlüssel werden übersprungen, und*@domain-Datensätze ebenfalls: Ein Operator hat sie dorthin gesetzt, und keine Entdeckungsantwort überragt das, sodass Abholen reine Kosten wären. Die Anzahl der neu validierten wird ausgegeben. Das ist der natürliche Inhalt eines periodischen Timers.
- peer prune [–retain-days DAYS] [–dry-run]
Löscht abgelaufene Peer-Schlüssel und veraltete Entdeckungsanfragen — zwei Tabellen, eine Aufgabe. Ein Peer-Schlüssel, der vor mehr als DAYS (Standardwert
7) abgelaufen ist, wird entfernt, sofern er nicht gepinnt ist. Der Ablauf ist derjenige, den der Schlüssel selbst angibt — die aktuelle Selbstsignatur eines OpenPGP-Primärschlüssels, ein X.509-notAfter—, festgehalten, wann immer ein Schlüssel gelernt wird, ob durch Entdeckung, Ernten oder Gossip (ein von Hand importierter Schlüssel hält keinen fest, und ein Schlüssel, der keinen angibt, wird nie bereinigt); auf derpepsi.key_request-Seite haben sowohl ein erledigter Datensatz, dessen Negativeintrag über dasselbe Fenster hinaus gealtert ist, als auch ein ausstehender Datensatz, der so lange über seine Frist hinaus aufgegeben wurde, nichts mehr zu sagen und gehen ebenfalls. –dry-run meldet, wie viele Schlüssel einen Ablauf tragen und ungepinnt sind, und entfernt nichts.- peer remove PEER-KEY-ID
Löscht einen gespeicherten Schlüssel. So lässt ein Operator auch den neueren Autocrypt-Schlüssel eines Korrespondenten durch, den
ACCEPT_ROTATION = expiredzurückgehalten hat (einkey.peer.rotate.held-Audit-Datensatz; siehe pepsi-stage-autocrypt-learn(1)): Ist der alte Datensatz weg, speichert die nächste Nachricht mit dem neuen Schlüssel ihn als ersten Schlüssel.
85.1.44.1.4.3. Vertrauensanker-Befehle¶
- ca list [–json]
Listet die Vertrauensanker mit ihrer Id, ob sie aktiviert sind, ihrem Etikett und ihrem Betreff auf.
- ca add FILE [–label TEXT]
Fügt ein CA-Zertifikat (DER oder PEM;
-liest die Standardeingabe) als Vertrauensanker hinzu. Ein Zertifikat ohnebasicConstraints CA:TRUEwird abgelehnt: Keine Kette könnte je bei ihm enden. Idempotent bezüglich des SHA-256 des Zertifikats — denselben Anker zweimal hinzuzufügen aktualisiert nur das Etikett.Ein Anker wird hier allein aufgrund seiner
basicConstraintsangenommen, doch der Pfadaufbau wendet seine Einschränkungen wie die jeder anderen CA an (RFC 5937): Ein namensbeschränkter Anker bürgt nur für Namen innerhalb seinernameConstraints, unter einer CA, diepathlen:0angegeben hat, wird keine Sub-CA angenommen, und einrequireExplicitPolicyoderinhibitAnyPolicy, das er trägt, wird beachtet. Eine Kette, die eine davon verletzt, schlägt mitpolicy-rejectedfehl. Ebenso eine über eine CA, die eine kritische Erweiterung trägt, die Pepsi überhaupt nicht verarbeiten kann (RFC 5280 §4.2) — eine solche CA wird nie als Aussteller verwendet.- ca enable CA-ID, ca disable CA-ID
Übergibt einen Anker an den Verifizierer oder hört damit auf, während der Datensatz fürs Protokoll erhalten bleibt.
- ca remove CA-ID
Löscht einen Anker.
Pepsi liefert bewusst keine Standard-Ankermenge aus. Eine Signatur, die sich zu einer CA kettet, die niemand gewählt hat, wird als nicht vertrauenswürdig statt als schlecht gemeldet, sodass ein leerer Speicher auf „wir können dafür nicht bürgen“ abfällt — und ein Operator, der einen Anker hinzufügt, trifft eine Entscheidung, statt eine zu erben.
85.1.44.1.4.4. Befehle für den zweiten Faktor¶
Eine Adresse kann einen zweiten Faktor haben: ein TOTP-Geheimnis (RFC 6238, SHA-1, sechs Ziffern, 30-Sekunden-Schritte), das ihr Inhaber in einer Authenticator-App aufbewahrt. Sobald er existiert, muss ein unprivilegierter Aufrufer (eine setuid-Installation) für jede Änderung an den Identitäten dieser Adresse einen aktuellen Code vorlegen – identity generate, import, revoke, forget-private, set-primary, publish, unpublish, delete – sowie für identity export --private und identity csr, und zwar als Option –otp CODE der identity-Gruppe (pepsi-keys identity --otp 123456 revoke 7). Die Inhaberschaft wird vor dem Code geprüft, sodass ein Benutzer keine Fehlschläge gegen die Registrierung eines anderen Benutzers anrechnen lassen kann. Der Operator (root, pepsi-crypto, eine Installation ohne setuid) wird nie gefragt. Derselbe zweite Faktor schützt die Schlüsselbefehle per E-Mail und die Web-Konsole; siehe pepsi-stage-encrypt(1) und das Kapitel zur Schlüsselverwaltung im Handbuch.
Ein Code wird einmal angenommen (eine Wiederholung innerhalb seiner eigenen 30 Sekunden wird abgelehnt), ein Schritt Uhrenabweichung in jede Richtung wird toleriert, ein falscher oder wiederholter Code zählt als Fehlschlag und ein richtiger setzt den Zähler zurück, und zehn Fehlschläge in Folge sperren den zweiten Faktor, bis der Operator ihn zurücksetzt.
- otp status [ADDRESS] [–json]
Zeigt die Registrierung einer Adresse: wann sie registriert und zuletzt verwendet wurde sowie die aufeinanderfolgenden Fehlschläge (oder
LOCKED). Der Operator darf ADDRESS weglassen, um jede Registrierung aufzulisten. Zeigt nie ein Geheimnis.- otp enroll ADDRESS [–otp CODE]
Erzeugt ein neues Geheimnis für ADDRESS und gibt es einmal aus, als base32 und als
otpauth://-URI (qrencode -t ansiutf8macht daraus einen QR-Code zum Scannen). Ersetzt eine bestehende Registrierung und beginnt wieder bei null Fehlschlägen; der Inhaber braucht dafür einen aktuellen Code der alten, der Operator nicht – so übergibt der Operator einem ausgesperrten Benutzer ein neues Geheimnis.- otp remove ADDRESS [–otp CODE]
Entfernt den zweiten Faktor; der Inhaber braucht einen aktuellen Code.
- otp reset ADDRESS
Nur für den Operator: Entfernt den zweiten Faktor unabhängig von seinem Zustand und entsperrt damit die Adresse. Ihr Inhaber registriert sich erneut (per E-Mail oder mit
otp enroll).
Das Geheimnis wird wie ein privater Schlüssel unter dem Schlüsselverschlüsselungsschlüssel verpackt gespeichert, in einer Tabelle, die nur die Rolle pepsi-crypto lesen darf; wrap rotate verpackt es ebenfalls neu.
85.1.44.1.4.5. Befehle für den Schlüsselverschlüsselungsschlüssel (KEK)¶
- wrap rotate [–dry-run]
Verpackt jeden gespeicherten privaten Schlüssel und jedes Geheimnis eines zweiten Faktors unter der aktuellen
[pepsi-crypto] KEY_WRAP_KEY_IDneu. Die Rotation ist konstruktionsbedingt inkrementell, denn jeder Datensatz hält den Schlüssel fest, der ihn versiegelt hat: Konfigurieren Sie das neue Geheimnis alsKEY_WRAP_SECRETund behalten Sie das alte daneben alsKEY_WRAP_SECRET_<OLD-ID>, richten SieKEY_WRAP_KEY_IDauf die neue Id und führen Sie dies aus. Zwischen der Konfigurationsänderung und dem Durchlauf arbeitet die Installation weiter — neues Material wird unter dem neuen Schlüssel versiegelt, altes Material öffnet sich weiterhin unter dem ausgemusterten — und erst danach darf das ausgemusterte Geheimnis entfernt werden.Datensätze, deren Schlüsselverschlüsselungsschlüssel kein konfiguriertes Geheimnis hat, werden gemeldet und unangetastet gelassen, statt den Lauf scheitern zu lassen; ebenso Datensätze, die nebenläufig neu verpackt wurden (jede Aktualisierung ist auf die alte Schlüssel-Id abgesichert, sodass eine neuere Verpackung nie überschrieben wird).
- –dry-run
Listet auf, was neu verpackt würde, und ändert nichts.
85.1.44.1.4.6. DNS-Veröffentlichung¶
- dns ADDRESS
Gibt im Zonendatei-Format die DNS-Einträge aus, die jede veröffentlichte, aktive Identität von ADDRESS veröffentlichen: einen
OPENPGPKEY-Eintrag (RFC 7929) für OpenPGP-Material und einenSMIMEA-Eintrag (RFC 8162, in der TLSA-3 0 0-Form — von der Domain ausgestelltes Zertifikat, vollständiges Zertifikat, exakte Übereinstimmung) für S/MIME. Beide werden unter einem gehashten Eigentümernamen veröffentlicht, dem Hex der ersten 28 Oktette des SHA-256 des Local-Part, sodass die Zone die von ihr bedienten Adressen nicht aufzählt.Veröffentlichen Sie diese nur in einer DNSSEC-signierten Zone, was die Ausgabe als Kommentar wiederholt: Ein unsignierter Schlüsseleintrag ist ein Schlüssel von wem auch immer für die Zone antworten kann, was keine Verbesserung gegenüber überhaupt keinem Schlüssel ist.
Der DNS-Eigentümernamen-Hash ist groß-/kleinschreibungsempfindlich (RFC 7929 §3), anders als der Web-Key-Directory-Hash desselben Local-Part, der kleinschreibt. Die beiden werden absichtlich von verschiedenen Funktionen berechnet.
pepsi-setup(1) gibt dieselben Einträge für jede veröffentlichte Identität als Teil seiner DNS-Ausgabe aus, gedeckelt auf eine lesbare Anzahl; dieser Befehl ist der Weg, in einer großen Installation an eine bestimmte Adresse zu kommen.
85.1.44.1.5. Keyserver-Konfiguration¶
Die Web-Key-Directory-Veröffentlichung braucht keine Konfiguration: Sie folgt dem published-Kennzeichen jeder Identität und wird von pepsi-httpd(1) bedient. Die Keyserver-Veröffentlichung schon, denn sie kann nicht rückgängig gemacht werden, und ihre Optionen leben in [pepsi-keys]:
VKS_PUBLISH(Standardwertno)Ob von Hand erstellte oder importierte Identitäten mit angefordertem Keyserver-Upload beginnen, sodass identity publish –retry sie hochlädt und es erneut versucht, bis die Adresse bestätigt ist. Ein Upload kann widerrufen, aber nie zurückgezogen werden, daher bleibt der Standardwert eine Entscheidung des Operators. Die Option steuert nicht den Wiederholungsjob und gilt nie für automatisch erzeugte oder registrierte Schlüssel; siehe Key-server uploads are requested per identity. Ist sie ausgeschaltet, bleibt identity publish –vks (oder die eigene Anforderung eines Benutzers über die Web-Konsole oder per E-Mail) verfügbar.
VKS_SERVER(Standardwert: der erste[pepsi-keydiscovery] VKS_SERVERS-Eintrag)Wohin Uploads gehen; nur
https://. Ein Server, keine Liste: Denselben Schlüssel bei mehreren zu veröffentlichen vervielfacht eine unumkehrbare Handlung, und jeder muss dann mit Widerrufen aktuell gehalten werden.VKS_MAX_ATTEMPTS(Standardwert 5),VKS_RETRY_INTERVAL(Standardwert6 h),VKS_BATCH(Standardwert 50)Wie hartnäckig, wie oft und wie viele auf einmal identity publish –retry es versucht. Beachten Sie, dass Zeitdauern Kalendereinheiten ablehnen:
6 hparst,1 dnicht.
85.1.44.1.6. Globale Optionen¶
Diese globalen Optionen stehen vor dem Unterbefehl (ein nachgestelltes Flag wird abgelehnt).
- -c FILE, –config FILE
Liest die Konfiguration aus FILE, statt die Standardorte zu durchsuchen. Für unprivilegierte Aufrufer abgelehnt, wenn dieses Programm setuid installiert ist: Die Konfiguration benennt die Datenbankverbindung, jeden
${…}-expandierten Pfad und den Schlüsselverschlüsselungsschlüssel selbst.- -L LOGLEVEL, –log LOGLEVEL
Setzt die Log-Ausführlichkeit. LOGLEVEL ist eines von
error,warn,info,debugodertrace(Standardwert:info).- -v, –verbose
Zeigt Log-Meldungen aus allen Quellen, einschließlich Drittanbieter-Bibliotheken.
- -h, –help
Gibt eine Verwendungsübersicht aus und beendet sich.
- -V, –version
Gibt die Version aus und beendet sich.
85.1.44.1.7. Exit-Status¶
- 0
Erfolgreicher Abschluss. Ein zerstörerischer Befehl, der an seiner Bestätigungsabfrage abgelehnt wurde, endet ebenfalls mit 0, ohne etwas geändert zu haben.
- 1
Ein Fehler ist aufgetreten: eine fehlerhafte Konfigurationsdatei, eine unzulässige Optionskombination, eine Adresse, die zum Konto eines anderen Benutzers auflöst, nicht parsbares Schlüsselmaterial, ein Schlüsselverschlüsselungsschlüssel, der fehlt oder einen Datensatz nicht öffnet, oder eine gescheiterte Datenbankverbindung oder -abfrage. Der Grund wird in das Journal geschrieben.
85.1.44.1.8. Dateien¶
Wenn –config nicht angegeben ist, wird die erste vorhandene Datei aus der folgenden Liste verwendet:
$XDG_CONFIG_HOME/pepsi.conf$HOME/.config/pepsi.conf/etc/pepsi/pepsi.conf/etc/pepsi.conf
secrets.d/pepsi-crypto.secretDer Schlüsselverschlüsselungsschlüssel, neben der Konfigurationsdatei und mit einer
@inline-secret@-Direktive in den[pepsi-crypto]-Abschnitt gezogen. Er wird aus der weltlesbaren Konfiguration herausgehalten, weil er das eine Geheimnis ist, das jeden gespeicherten privaten Schlüssel öffnet; pepsi-setup(1) gibt ihm bei jedem Lauf Modus0640und übergibt ihn dempepsi-crypto-Konto. Sichern Sie ihn separat — siehe das Kapitel Schlüsselverwaltung des Handbuchs für die Kosten seines Verlusts.
Keine andere Datei wird gelesen oder geschrieben: Alles Schlüsselmaterial lebt in der Datenbank.
85.1.44.1.9. Beispiele¶
Die bedienten Adressen finden, deren Verschlüsselung von einem Schlüssel bestimmt wird, den jemand anderes geliefert hat, und einen bestätigten zum eigenen Schlüssel des Benutzers machen (ein MUA-Schlüssel: kein –private):
pepsi-keys -c /etc/pepsi/pepsi.conf peer unclaimed
pepsi-keys -c /etc/pepsi/pepsi.conf peer show bob@example.org
gpg --export bob@example.org > bob.pgp # the key bob confirmed to you
pepsi-keys -c /etc/pepsi/pepsi.conf identity import bob@example.org \
--protocol openpgp --purpose both --public bob.pgp
Eine OpenPGP-Identität erzeugen und prüfen, dass GnuPG die öffentliche Hälfte annimmt:
pepsi-keys -c /etc/pepsi/pepsi.conf identity generate alice@example.org \
--protocol openpgp --name 'Alice Example'
pepsi-keys -c /etc/pepsi/pepsi.conf identity list --address alice@example.org
pepsi-keys -c /etc/pepsi/pepsi.conf identity export 1 | gpg --import
Das S/MIME-Paar erzeugen und über jeden Schlüssel eine Zertifikatsanforderung für eine echte CA ausgeben:
pepsi-keys -c /etc/pepsi/pepsi.conf identity generate alice@example.org \
--protocol smime --csr
Das von jener CA ausgestellte Zertifikat über den bereits im Speicher liegenden Schlüssel installieren:
pepsi-keys -c /etc/pepsi/pepsi.conf identity import alice@example.org \
--protocol smime --purpose sign --public /tmp/alice-sign.pem --primary
Die Adresse im DNS veröffentlichen (nur signierte Zone):
pepsi-keys -c /etc/pepsi/pepsi.conf dns alice@example.org >> example.org.zone
Einen kompromittierten Signierschlüssel zurückziehen und dann bestätigen, dass die private Hälfte weg ist:
pepsi-keys -c /etc/pepsi/pepsi.conf identity revoke 1 --reason 'laptop stolen'
pepsi-keys -c /etc/pepsi/pepsi.conf identity show 1
Dem Schlüssel eines Korrespondenten von Hand vertrauen und ihn gegen spätere Entdeckung pinnen:
pepsi-keys -c /etc/pepsi/pepsi.conf peer import bob@example.com \
--protocol openpgp --file bob.pgp --pin
Einen Korrespondenten mit jeder aktivierten Methode nachschlagen und das Ergebnis speichern:
pepsi-keys -c /etc/pepsi/pepsi.conf peer refresh --address bob@example.com
Den Cache aus einem periodischen Timer ehrlich halten: neu validieren, was fällig ist, dann verwerfen, was veraltet ist:
pepsi-keys -c /etc/pepsi/pepsi.conf peer refresh
pepsi-keys -c /etc/pepsi/pepsi.conf peer prune
Einen S/MIME-Vertrauensanker hinzufügen und sehen, wem vertraut wird:
pepsi-keys -c /etc/pepsi/pepsi.conf ca add /etc/ssl/certs/our-ca.pem --label 'Our CA'
pepsi-keys -c /etc/pepsi/pepsi.conf ca list
Den Schlüsselverschlüsselungsschlüssel rotieren, zuerst nachsehend:
pepsi-keys -c /etc/pepsi/pepsi.conf wrap rotate --dry-run
pepsi-keys -c /etc/pepsi/pepsi.conf wrap rotate
Alles ausmustern, was seine Gültigkeit überschritten hat (aus einem periodischen Timer):
pepsi-keys -c /etc/pepsi/pepsi.conf identity retire
Einen Schlüssel beim Keyserver veröffentlichen und dann prüfen, dass er ankam:
pepsi-keys -c /etc/pepsi/pepsi.conf identity publish 1 --vks
pepsi-keys -c /etc/pepsi/pepsi.conf identity show 1
Jede ausstehende Keyserver-Verifikation zum Abschluss bringen (aus cron):
pepsi-keys -c /etc/pepsi/pepsi.conf identity publish --retry
Aufhören, einen Schlüssel zu veröffentlichen, und der Welt sagen, dass der hochgeladene tot ist:
pepsi-keys -c /etc/pepsi/pepsi.conf identity unpublish 1
pepsi-keys -c /etc/pepsi/pepsi.conf identity revoke 1 --upload \
--reason 'address closed'
85.1.44.1.10. Siehe auch¶
pepsi-keydisc(1), pepsi-httpd(1), pepsi-stage-vks-confirm(1), pepsi-setup(1), pepsi-config(1), pepsi-whitelist(1), pepsi-settings(1), pepsi.conf(5), pepsi.state(7)
85.1.44.1.11. Fehler¶
Melden Sie Fehler an den Pepsi-Issue-Tracker.