Skip to content

Releases: EnergyTrading07/energy-mail

Energy Mail 0.4.0

Choose a tag to compare

@github-actions github-actions released this 21 Aug 18:23
dd7a29c

Sicherheit

Eine gemeldete Lücke in einer Abhängigkeit ist überbrückt. deepmerge-ts unter 8.0.0
läuft beim Zusammenführen rekursiver Objektgraphen den Stapel leer (GHSA-ggr8-5vv4-36mx).
Der Weg dorthin führt über mailparser — also über das, was fremde Post verarbeitet.

Der Anfragerumpf ist an den offenen Wegen begrenzt. Anmelden, zweite Stufe und
Entsperren nahmen bis zu 40 MB entgegen, obwohl Adresse und Kennwort ein paar hundert Byte
sind. Der Rumpf wird eingelesen, bevor die Anmeldebremse greifen kann — die hängt an der
Adresse darin. Jetzt 4 KB.

Ein dritter Riegel gegen Anfragen von fremden Seiten. Der Herkunftsriegel muss
Anfragen ohne Origin durchlassen, weil das eigene Fenster seine Seite genauso lädt.
Unterscheiden ließ sich beides bisher nicht; jetzt über Sec-Fetch-Site.

Ein belegter Port hält die Anwendung nicht mehr auf

Port 4000 war fest verdrahtet. Hielt ihn ein anderes Programm — und 4000 ist ein
ausgesprochen gebräuchlicher Port für Entwicklungsserver —, zeigte Energy Mail ein
Fehlerfenster und war damit fertig: kein Ausweg, keine Einstellung. Jetzt wird ein freier
Port gesucht. Auf welchem die Anwendung mit sich selbst spricht, geht niemanden etwas an.

Neunundsiebzig deutsche Reste in den fremdsprachigen Oberflächen

Die Sprachprüfung meldete „kein Befund", und die Kataloge waren vollständig — nur prüfte
sie das Falsche. Sie sieht, was übersetzbar ist; was übersetzbar sein müsste und es
nicht ist, kann sie nicht sehen.

Am auffälligsten waren 27 Attribute — aria-label, title, placeholder —, also
ausgerechnet das, was ein Vorleseprogramm vorliest: Die Nachrichtenliste kündigte sich auf
Türkisch als „Nachrichtenliste" an. Und ein Satz stand halb übersetzt da: „No connection.
Gezeigt wird der zuletzt geholte Stand von deinem Rechner."

Die Anrede ist vereinheitlicht. Es standen 43 siezende Meldungen neben 6 duzenden,
beide im selben Fenster. Jetzt siezt alles.

1218 Texte in neun vollständigen Katalogen, vorher 1131. Damit es nicht nachwächst, bricht
die Sprachprüfung jetzt bei deutschem Text, der gar nicht erst durch den Übersetzer geht.

Ein Fehler, den die Gesamtansicht verbarg

Der Vorabruf der nächsten Nachricht prüfte auf das eine Postfach und arbeitete mit dem
anderen. In der gewöhnlichen Ansicht ist das dasselbe; in der Gesamtansicht nicht — dort
kommt das Postfach aus der Herkunft der gelesenen Nachricht. Stand die noch nicht, ging
ein Abruf ins Leere.

Unter der Haube

  • Ein Prüfer (ESLint) läuft jetzt bei jedem Bau mit. Er hat den Fehler oben gefunden,
    dazu vier unsichtbare Zeichen im Quelltext, fünf tote Einbindungen und zwei Fehler, die
    ihre Ursache fallen ließen.
  • Neun Prüfungen am laufenden Programm. Sie starten die fertige Anwendung und sehen
    nach, ob ein benutzbares Fenster dasteht — genau die Sorte Fehler, die weder Typen noch
    Bau noch Prüfungen sehen, und an der dieses Programm bisher am häufigsten gestolpert ist.
  • Fünf Routengruppen sind aus der 4132 Zeilen langen app.ts ausgezogen. Beim Archiv
    war die Aufteilung vorher halb: der Inhalt lag längst getrennt, nur die Wege dorthin
    nicht.

Ein Ort für Einstellungen

Es gab keinen. Was eine Einstellung ist, lag an vier Stellen: in der Titelleiste (Ansicht,
und die Sprache nur im Browserbetrieb), an einem Zahnrad neben jedem Konto, als Wand aus
elf gleich aussehenden Textknöpfen im Fuß der Seitenleiste, und im Anwendungsmenü der
Desktop-Hülle (Sprache, Autostart, Infobereich, Meldungsvorschau, Rechtschreibung). Wer
etwas suchte, musste wissen, in welcher dieser vier Welten es wohnt — und in der Hülle
stand es woanders als im Browser, obwohl es dieselbe Anwendung ist.

Jetzt gibt es ein Einstellungsfenster (Strg+,) mit zehn Bereichen in fünf benannten
Gruppen: Darstellung · Postfach (Konten, Regeln, Abwesenheit) · Sicherheit (OpenPGP,
S/MIME) · Aufbewahrung (Archiv, Bestand) · Programm (Anwendung, Nutzer, Anmeldung). Die
Bereiche sind dieselben Bausteine, die vorher eigene Fenster waren — sie zeichnen sich nur
als Abschnitt statt als Fenster. Es gibt weiterhin je eine Fassung von ihnen, keine
Nachbauten.

Zwei Löcher sind dabei zugegangen. Die Ansicht kannte immer drei Werte — hell, dunkel,
„folgt dem System" —, der Umschalter in der Titelleiste konnte aber nur zwischen den ersten
beiden kippen: Wer einmal geklickt hatte, kam nie wieder zurück. Und die vier Schalter der
Hülle (Infobereich, Autostart, Meldungsvorschau, Rechtschreibung) waren im Browserbetrieb
überhaupt nicht erreichbar. Beides steht jetzt in beiden Betriebsarten an derselben Stelle;
geschrieben werden die Schalter der Hülle weiterhin nur vom Hauptprozess.

Die Sprache ebenso: bisher in der Hülle nur im Menü, im Browser nur in der Titelleiste —
und dort wurde die Wahl zwar gelesen, aber von keiner Stelle je geschrieben. Neun gepflegte
Kataloge hingen damit allein an der Spracheinstellung des Browsers.

Der Fuß der Seitenleiste ist wieder ein Fuß

Elf gleich lange Wörter untereinander sind keine Liste, sondern eine Wand: „Abwesenheit"
stand zwischen „Adressbuch" und „Schlüssel", „Abmelden" neben „Archiv". Weil das Formular
zum Hinzufügen eines Kontos mit darin lag, brauchte der Fuß eine eigene Bildlauffläche über
60 % der Fensterhöhe.

Geblieben sind drei Griffe und eine Auskunft: „Offen" (Arbeit, die aussteht), „Adressbuch"
(ein Nachschlagewerk), „Einstellungen" (der Weg zu allem Übrigen) und eine Zeile, die sagt,
unter welchem Namen man angemeldet ist — mit Anmeldung, Sperren und Abmelden dahinter. Ein
Konto kommt jetzt am Ende der Kontenliste hinzu statt im Fuß zwischen „Nutzer" und „Mein
Konto".

Eine laufende Abwesenheitsnotiz bleibt sichtbar: Sie ist der eine Zustand, den man
vergisst und der dann monatelang Fremden erzählt, man sei im Urlaub. Sie meldet sich als
eigene Fläche im Fuß, aber nur solange wirklich geantwortet wird.

Knöpfe: aus sieben Sorten werden vier

.btn, .secondary, .danger, .gefahr-schlicht, .link-btn, dazu zwei Regeln, die
Knöpfe je nach Umgebung heimlich umfärbten. Jetzt: primär (die eine Sache, die dieses
Fenster tun soll), sekundär (eine gleichrangige Wahl daneben), leise (Bänke wie die
über einer geöffneten Nachricht) und Warnung (Unumkehrbares, als Umriss statt gefüllt).
gefahr-schlicht war ein zweites „Warnung" unter anderem Namen und ist es geworden. Dabei
fiel ein stiller Fehler auf: Der Knopf „Alles Freigegebene löschen" im Archiv trug die
Klasse secondary gefaehrlich, für die es nie eine Regel gab — er sah aus wie jeder
andere.

Doppelt Vorhandenes entfernt

„Zwischengespeicherte Nachrichten…" im Menü der Hülle tat dasselbe wie die Tafel „Bestand"
im Einstellungsfenster, über dieselben zwei Aufrufe — nur eben nicht im Browserbetrieb. Der
Menüpunkt und seine neunzig Zeilen sind weg.


Ergebnis einer Durchsicht des gesamten Quellbaums auf Lücken und Unvollständigkeit. Der
Baum trug keine einzige TODO-Marke; fast jeder Fund stammt aus dem Abgleich zwischen dem,
was ein Kommentar zusagt, und dem, was der Code tut.

Eine gescheiterte geplante Nachricht ging ersatzlos verloren

Behoben. setAufgabeVerfahren war geschrieben, exportiert und dokumentiert („der
Aufrufer legt sie als Entwurf ab") — und wurde nirgends im Programm gesetzt. Der Haken
blieb damit für immer leer, der Aufruf ein Nichts. Nach fünf Fehlschlägen wurde der
Eintrag gelöscht und der Nachrichtenkörper war weg; die einzige Spur war eine Zeile im
Protokoll. Genau diesen Verlust beschreibt der Kommentar in derselben Datei als behoben —
eingebaut war nur die eine Hälfte, der Wiederholungszähler.

Jetzt gilt: Gelöscht wird erst, wenn der Körper nachweislich woanders liegt. Die
Rettung legt ihn als Entwurf ins Postfach und meldet zurück, ob das geglückt ist; misslingt
sie, bleibt der Eintrag stehen und wird weiter versucht. Dazu zählt fehlendes Netz jetzt
anders als ein abgewiesener Empfänger — zwanzig statt fünf Versuche, dieselbe Unterscheidung,
die die Wiedervorlage längst trifft. Fünf Versuche waren in anderthalb Stunden aufgebraucht;
wer abends auf „morgen früh" stellte und über Nacht kein Netz hatte, verlor die Nachricht,
obwohl an ihr nichts falsch war.

Ein verzögerter Versand wurde beim Einstellen nicht geprüft

Der Körper wanderte ungeprüft in die Warteschlange; geprüft wurde erst beim Auslösen, Tage
später, wenn niemand mehr davorsitzt. Wer eine geschützte Nachricht mit Anhang auf morgen
legte, bekam „geplant" bestätigt und erfuhr nie, dass sie nicht hinausging. Beide Wege
teilen sich jetzt dieselbe Vorabprüfung. Ein Zeitpunkt in der Vergangenheit wird abgewiesen
statt stillschweigend zu „sofort" gemacht, einer über fünf Jahre voraus ebenfalls.

Eingabefehler beim Senden kamen als 502 zurück

Ein fehlender Schlüssel oder ein Anhang bei geschütztem Versand ist eine Sache der Eingabe.
Der umschließende Fang setzte darüber pauschal 502 — „die Gegenstelle hat versagt", eine
Antwort, die zum erneuten Versuch einlädt, der niemals helfen kann. Fehler, die ihren Rang
kennen, behalten ihn jetzt.

Geschützter Versand trägt Anhänge

Bisher wurde abgewiesen, sobald ein Anhang dabei war. Beim Unterschreiben geht er jetzt
mit: Der unterschriebene Teil ist ein mehrteiliger MIME-Umschlag, und die Unterschrift deckt
Text und Dateien zusammen ab — ein Schutz, der nur den Text erfasste und die Dateien offen
danebenlegte, wäre schlimmer als keiner. Gilt für OpenPGP wie für S/MIME.

Beim Verschlüsseln bleibt die Grenze, jetzt aber genau benannt: Der Leser dieser
Anwendung gibt entschlüsselten Inhalt unmittelbar als Text aus, statt ihn als MIME zu
zerlegen; verschlüsselte Anhänge kämen heil an, stünden hier aber als Quelltext da.

Der Schlüssel eines Nutzers lässt sich wechseln

Die Struktur dafür stand von Anfang an — Generationen im Eintrag, Generation im Format jedes
Geheimnisses — nur gab es den Vorgang nicht. Ein abhandengekommener Nutzerschlüssel war
nicht austauschbar. Neu: `nutzerWerkze...

Read more

Energy Mail 0.3.1

Choose a tag to compare

@github-actions github-actions released this 16 Aug 19:22

Sicherheit: ein gewöhnlicher Nutzer kam in die Verwaltung

Behoben. Wer angemeldet war, erreichte sämtliche Verwaltungswege, indem er einen
einzigen Buchstaben der Adresse in Prozentschreibweise schrieb:

GET /verwaltung/nutzer     →  403, richtig abgewiesen
GET /%76erwaltung/nutzer   →  200, vollständige Nutzerliste

Die Ursache liegt an einer Stelle, an der zwei Sichten auf dieselbe Anfrage
auseinanderfallen: Fastifys Router entschlüsselt den Pfad, bevor er eine Route sucht,
lässt request.url dabei aber unverändert. Der Riegel verglich die rohe Adresse, fand
kein „/verwaltung" darin und ließ die Anfrage durch — während die Route dahinter
ordnungsgemäß lief.

Die Tragweite reichte weiter als die Nutzerliste. Über denselben Weg standen alle
Verwaltungswege offen: Nutzer anlegen, Kennwörter zurücksetzen, sich selbst zum Verwalter
machen. Und wer ein Kennwort zurücksetzen kann, kann sich als dieser Mensch anmelden —
der Weg führte vom gewöhnlichen Konto bis in fremde Postfächer.

Betroffen war ausschließlich der Serverbetrieb mit mehreren Nutzern. Auf dem
Einzelplatz gibt es nur einen Nutzer, und der ist ohnehin Verwalter.

Maßgeblich ist jetzt die getroffene Route und nicht die geschriebene Adresse. Eine Prüfung
hält den Fall fest — sie fällt durch, sobald jemand zur alten Fassung zurückkehrt.

Eine unbrauchbare Seitengröße hob die Begrenzung auf

?pageSize=abc ergab NaN, und slice(-NaN) ist in JavaScript nicht „nichts", sondern
alles. Aus einer Begrenzung wurde damit ihr Gegenteil, lautlos:

  • Die Suche holte die Kopfdaten jeder Nachricht in jedem durchsuchten Ordner — und gab
    am Ende null Treffer zurück, weil dieselbe Zahl weiter unten in slice(0, NaN) steckte.
  • Die Absenderübersicht nahm statt einer Stichprobe den ganzen Ordner.
  • Am schwersten wog Regeln anwenden: Sie liefen nicht über die neuesten zweihundert
    Nachrichten, sondern über den gesamten Ordner. Regeln verschieben und löschen.

Zahlen aus einer Anfrage werden jetzt geprüft und mit einer klaren Meldung abgewiesen; die
Bibliothek darunter fällt zusätzlich auf ihre Voreinstellung zurück, statt „unbegrenzt"
daraus zu machen.

Eingefügter Text verriet dem Absender, dass er eingefügt wurde

Beim Einfügen aus der Zwischenablage entstand das fremde HTML im angezeigten Dokument —
also holte der Browser jedes Bild darin sofort, bevor die Reinigung es entfernen konnte.
Wer einen Abschnitt aus einer Werbemail in eine Antwort einfügte, bestätigte damit dem
Absender den Empfang. Für Zitate war derselbe Fehler längst behoben; der Weg über die
Zwischenablage war übersehen worden. Aufgeräumt wird jetzt in beiden Fällen abseits.

Archiv: eine geteilte Datei konnte zu früh verschwinden

Dieselbe Nachricht in zwei archivierten Postfächern ergibt zwei Einträge, die sich eine
Datei teilen. Ihre Aufbewahrungsfristen können auseinanderlaufen — sechs Jahre als
Geschäftsbrief, acht als Buchungsbeleg. Das Aufräumen sah nur den ablaufenden Eintrag und
löschte die gemeinsame Datei; der Beleg, der noch zwei Jahre aufzubewahren war, gab nichts
mehr her. Gelöscht wird jetzt erst, wenn kein Eintrag mehr auf die Datei wartet.

Kleineres

  • Ein Fehler beim Abruf warf nicht mehr die gemeinsame IMAP-Verbindung weg. Bisher
    genügte „Nachricht nicht gefunden", um sie zu schließen — das kostete den nächsten
    Abruf einen vollständigen Neuaufbau und riss nebenher laufende Abrufe mit.
  • Fehler, die ihren eigenen Rang kennen (etwa die 403 des Dateiauslieferers gegen
    Pfadausbrüche), werden nicht mehr als 500 gemeldet und nicht mehr mit Stapelspur
    protokolliert.
  • Der Hinweistext im Fenster „Start gescheitert" wird maskiert wie jeder andere Wert
    daneben.

Energy Mail 0.3.0

Choose a tag to compare

@github-actions github-actions released this 16 Aug 16:38

Dreierlei: eine neue Gestalt für Programm und Browserfassung, das Ergebnis einer
vollständigen Durchsicht auf Produktionsreife – und der Umbau vom Einzelplatzprogramm zu
einem Dienst, der von überall über den Browser erreichbar ist.

Datenschutz: die Unterlagen, und wer sie überhaupt braucht

Der Punkt hieß auf der Liste „AVV-Vorlage". Eine Vorlage ist auch dabei — aber sie ist
das Unwichtigste daran.

Der Grund: Ein Stapel Vorlagen ist die bequemste Art, jemanden im Stich zu lassen. Er
hat danach mehr Papier als vorher und weiß immer noch nicht, was er unterschreiben muss,
was er beim Anbieter holen muss und was er getrost weglassen kann. Viele Anbieter legen
einen AVV bei, weil er professionell aussieht; der Kunde unterschreibt, heftet ab — und
besorgt die Verträge nicht, die er wirklich braucht.

Deshalb steht die Entscheidung vor der Vorlage. Unter Verwaltung → Datenschutz steht,
wer hier Verantwortlicher ist, wer im Auftrag verarbeitet — und, das ist die nützlichste
Liste des Fensters, wer ausdrücklich keiner ist. Reine Softwareüberlassung ist keine
Auftragsverarbeitung: Wer ein Programm kauft und auf dem eigenen Rechner betreibt, lässt
niemanden für sich verarbeiten. Ein AVV mit dem Hersteller wäre ein Vertrag über nichts.
Erst wenn jemand von außen zu Wartungszwecken an die Daten herankommen kann — ob er
hineinsieht, spielt keine Rolle —, ändert sich das.

An erster Stelle steht der Postfachanbieter, und für ihn liegt bewusst kein Entwurf
bei: Microsoft und Google unterschreiben keine fremden Verträge. Ihr Vertrag ist fertig
und liegt in deren Verwaltungsoberfläche, wo ihn erstaunlich oft niemand angenommen hat.
Was dort zu tun ist, steht im Deckblatt.

Erzeugt wird, was sich erzeugen lässt: das Verzeichnis von Verarbeitungstätigkeiten
(Art. 30), die Aufstellung der technischen und organisatorischen Maßnahmen (Art. 32) und
— nur dort, wo einer gebraucht wird — ein Vertragsentwurf nach Art. 28 mit allen acht
Punkten aus Absatz 3.

Die Maßnahmenliste ist dabei abgelesen und nicht abgeschrieben. Jeder kennt die
Vorlagen mit „Der Zugang ist durch geeignete Maßnahmen geschützt"; hier steht „3 von 12
Nutzern haben einen zweiten Faktor eingerichtet". Das liest sich unbequemer, und genau
deshalb ist es etwas wert. Es ist zugleich die Auszahlung der letzten elf Punkte: Was dort
gebaut wurde — Anmeldebremse, Sitzungssperre, Rollen, Nutzertrennung, verschlüsselte
Ablage, Freigaben, Archiv —, steht hier mit den wirklichen Zahlen.

Zwei Punkte, die fast jeder Betrieb übersieht, stehen ausdrücklich im Befund: Ein
Archiv, das jede Nachricht aufzeichnet, ist nach § 87 Abs. 1 Nr. 6 BetrVG
mitbestimmungspflichtig — die Eignung zur Verhaltenskontrolle genügt, die Absicht ist
gleichgültig. Und private Nutzung des Geschäftspostfachs macht die Sache erheblich
schwieriger; eine ungeregelte Duldung ist der schlechteste Zustand.

Kein Rechtsrat, und das steht in jedem erzeugten Papier. Die Regelfälle sind abgedeckt;
wer dafür einstehen muss, sollte darübersehen.

Das Archiv nach GoBD

Geschäftspost ist aufzubewahren — sechs Jahre für Geschäftsbriefe, acht für
Buchungsbelege. Eine Mail ist ein Geschäftsbrief wie jeder andere, und ein Postfach ist
kein Archiv: Man darf darin löschen und verschieben, und das soll man auch.

Der Satz, den andere Anbieter weglassen, steht hier im Fenster: Kein Programm macht
jemanden „GoBD-konform". Die GoBD sagen es in Randziffer 179 selbst — Zertifikate Dritter
entfalten gegenüber der Finanzverwaltung keine Bindungswirkung. Ordnungsmäßig ist ein
Verfahren, nicht ein Programm. Was hier gebaut ist, ist der technische Teil davon.

Wie es arbeitet. Je Konto eingeschaltet — ohne diesen Haken geschieht gar nichts. Danach
wird jede ein- und ausgehende Nachricht im Original abgelegt: alle Kopfzeilen, alle
Anhänge, keine PDF-Fassung. Eingehend, bevor der Nutzer sie zu Gesicht bekommt; ausgehend
mit genau den Bytes, die hinausgingen.

Die Fristen rechnen ab dem Schluss des Kalenderjahres (§ 147 Abs. 4 AO), nicht ab dem
Datum. Eine Rechnung vom 3. Februar und eine vom 28. Dezember desselben Jahres laufen am
selben Tag ab — das ist die Stelle, an der sich fast jeder vertut, und sie steht deshalb
als eigenes, für sich geprüftes Modul da. Umtragen verlängert die Frist, verkürzen kann
sie niemand
: Sonst ließe sich eine unbequeme Nachricht dadurch loswerden, dass man sie
kurz vor der Prüfung zur Privatpost erklärt.

Unveränderbarkeit, ehrlich benannt. Jeder Eintrag trägt den Abdruck des vorigen; wer
einen in der Mitte ändert, müsste alle folgenden neu rechnen, und das Siegel am Ende
ändert sich dabei zwangsläufig. Was das nicht leistet, steht überall daneben, wo es
auftaucht: Wer Verwalterrechte hat, kann jede Datei überschreiben. Die Kette macht eine
Änderung erkennbar, nicht unmöglich — und dafür muss das Siegel außerhalb des Rechners
notiert werden. Eine Nachricht, die nicht mehr zu ihrem Abdruck passt, wird gar nicht erst
angezeigt.

Für die Betriebsprüfung entsteht auf Knopfdruck eine Datenträgerüberlassung (Z3): die
Originale als .eml, eine Übersichtstabelle, die Beschreibungsdatei nach dem
Beschreibungsstandard, das Siegel — und die Verfahrensdokumentation, die das Programm
aus den tatsächlichen Einstellungen selbst schreibt. Ihr organisatorischer Teil steht als
Liste von sieben Fragen darin, unbeantwortet: Eine Dokumentation mit ehrlichen Lücken ist
mehr wert als eine, die vollständig aussieht und erfunden ist.

Geprüft wird vor allem, was schiefgehen soll. Die Fristen gegen von Hand gerechnete
Daten; die Kette, indem sie absichtlich verfälscht wird — geändert, neu gesiegelt,
entnommen; die Beschreibungsdatei mit einem echten XML-Leser, Spalte für Spalte gegen die
Tabelle gehalten. Ein Befund kam dabei heraus: Ein Vermerk über das Archiv selbst zählte
in der Suche als Nachricht mit und verfälschte jede Zählung und jeden Zeitraum.

Offen benannt: Erfasst wird nur, was durch dieses Programm läuft — wer nebenher die
Weboberfläche des Anbieters benutzt, hat dort eine Lücke. Und das Archiv liegt auf
demselben Laufwerk wie alles andere; es ist keine Sicherung.

S/MIME — unterschreiben und verschlüsseln mit Zertifikaten

Das Verfahren, mit dem Unternehmen ihre Post schützen. Es liegt neben OpenPGP und ersetzt
es nicht. Der Unterschied zwischen beiden ist der, an dem in der Praxis alles hängt: Ein
PGP-Schlüssel behauptet selbst, zu wem er gehört, und wer das glauben will, vergleicht
Fingerabdrücke. Bei einem Zertifikat hat eine Ausgabestelle die Behauptung unterschrieben,
und die Unterschrift lässt sich bis zu einer Wurzel zurückverfolgen, der der Rechner
ohnehin traut. Niemand muss Fingerabdrücke vergleichen — deshalb läuft S/MIME in
Unternehmen und PGP nicht.

Was ein Nutzer tut: seine .p12-Datei einlesen, wie er sie von der Ausgabestelle
bekommen hat. Mehr nicht. Beide Bauarten werden gelesen — die heutige mit AES-256 und die
alte mit SHA-1 und 3DES, die Windows und ältere Ausgabestellen bis heute liefern. Die
Zertifikate der anderen kommen von selbst: jede unterschriebene Nachricht bringt das
Zertifikat ihres Absenders mit
, und wer einmal unterschrieben geschrieben hat, kann ab da
verschlüsselte Post bekommen. Übernommen wird nur, was sich restlos geprüft hat —
Unterschrift, Kette und Adresse.

Alles selbst gebaut, aus demselben Grund wie beim LDAP-Client und beim QR-Bild: CMS
(RFC 5652), die Zertifikatsprüfung (RFC 5280), die Schlüsseldatei (RFC 7292) samt der
eigenwilligen Schlüsselableitung aus deren Anhang B.2. Gerechnet wird ausschließlich mit
dem, was Node mitbringt.

Geprüft wird gegen OpenSSL, nicht gegen uns selbst. Alle Prüfdaten — Zertifikate,
unterschriebene und verschlüsselte Nachrichten, Schlüsseldateien — hat OpenSSL erzeugt; das
Skript dazu liegt daneben. Und umgekehrt: openssl cms -verify nimmt unsere Unterschrift
an, openssl cms -decrypt öffnet unseren Umschlag. Genau diese Gegenprobe hat einen
echten Fehler gefunden
: AES-GCM stand im gewöhnlichen Umschlag statt im dafür
vorgesehenen (RFC 5083). Selbst gelesen ging es auf, OpenSSL wies es ab — und mit ihm jedes
andere Programm.

Was das Band über einer Nachricht sagt, folgt einer Regel: Nur der eine Fall, in dem
wirklich alles stimmt, bekommt Grün. Der wichtigste der übrigen ist „Unterschrift ohne
bekannte Herkunft" — die Rechnung geht auf, aber für das Zertifikat steht niemand gerade.
Ein solches Zertifikat stellt sich jeder in einer halben Minute selbst aus, auf jede
beliebige Adresse.

Zwei Stellen, an denen bewusst streng geworden wird. Steht eine Mailadresse sowohl im
Namen des Inhabers als auch im alternativen Namen, gilt allein der alternative — so steht
es in RFC 8551, und wer beide zusammenwirft, lässt sich mit einem völlig regulär
ausgestellten Zertifikat eine Unterschrift als die des Chefs ausweisen. Und SHA-1 gilt
nicht als Nachweis
: Eine damit unterschriebene Nachricht wird als „nicht prüfbar"
ausgewiesen, nicht als gültig.

Offen benannt: Rücknahmelisten werden nicht abgefragt, Anhänge nicht mitgeschützt, und
verschlüsselt wird nur an RSA-Zertifikate.

Das Firmenverzeichnis (LDAP / Active Directory)

Ein Verwalter richtet es einmal ein; danach findet jeder Nutzer beim Tippen eines
Empfängers auch die Kollegen aus dem Verzeichnis. Zwei Vorlagen (Active Directory,
OpenLDAP) belegen Filter und Feldnamen vor — kein Verzeichnis gleicht dem anderen, und ein
Formular mit drei Feldern und der Annahme, es sei schon ein AD, ließe die Hälfte der
Betreiber im Regen.

Der LDAP-Client ist selbst gebaut, und zwar aus demselben Grund wie das QR-Bild: Es
kommt nichts herein und geht nichts hinaus außer Bytes, die Regel steht in X.690 und
RFC 4511, und die gängige Bibliothek brächte ein Vielfaches dessen mit, was hier gebraucht
wird — Server, Schema, Änderungsoperationen. Gebraucht werden zwei Vorgänge, Anmelden und
Suchen, beide lesend
. Was das Programm nicht kann, kann auch niemand ...

Read more

v0.2.1

Choose a tag to compare

@EnergyTrading07 EnergyTrading07 released this 08 Aug 22:49
Fassung 0.2.1

Enthaelt gegenueber 0.2.0:

- die sechzehn Befunde aus der Pruefung an echten Konten, darunter der
  Zaehlpixelschutz beim Antworten und das stumme Loeschen
- Barrierefreiheit: mit Tastatur und Vorlesesoftware bedienbar
- Diagnose: Protokoll, Absturzbehandlung, Fehlerbericht ohne Geheimnisse
- ein Pruefnetz fuer die 65 Serverrouten und die Umwandlungen in imapClient
- eine CI, die jeden Push prueft, und eine Sperre gegen Releases mit roter Suite
- die MIT-Lizenz
- nur eine Ausfertigung zur Zeit statt eines Fehlerfensters beim zweiten Start
- Sicherung und Umzug der Einstellungen ueber eine einzige Datei

683 Pruefungen, alle gruen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

v0.2.0

Choose a tag to compare

@EnergyTrading07 EnergyTrading07 released this 29 Jul 08:07
Fassung 0.2.0

Zweite Stelle statt dritte: das Erscheinungsbild ist neu, nicht ergaenzt. Wer
aktualisiert, findet ein anders aussehendes Programm vor - das soll an der Nummer
ablesbar sein.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

v0.1.9

Choose a tag to compare

@EnergyTrading07 EnergyTrading07 released this 27 Jul 19:59
Fassung 0.1.9

v0.1.8

Choose a tag to compare

@EnergyTrading07 EnergyTrading07 released this 27 Jul 19:40
Fassung 0.1.8

v0.1.7

Choose a tag to compare

@EnergyTrading07 EnergyTrading07 released this 27 Jul 17:45
Fassung 0.1.7

v0.1.6

Choose a tag to compare

@EnergyTrading07 EnergyTrading07 released this 27 Jul 17:11
Fassung 0.1.6

v0.1.5

Choose a tag to compare

@EnergyTrading07 EnergyTrading07 released this 27 Jul 16:49
Fassung 0.1.5