fix: Audit-Log-Detailspalte per Tooltip statt hartem Truncate lesbar machen Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2.1 KiB
2.1 KiB
id, title, status, created
| id | title | status | created |
|---|---|---|---|
| PROJ-71 | TLS-Pflicht (optional) für eingehenden SMTP-BCC-Journaling-Kanal | Deployed | 2026-07-08 |
Problem
Eingehender SMTP-Daemon (internal/smtpd/) für BCC-Journaling erlaubt STARTTLS
optional, erzwingt es aber nicht. Mails können unverschlüsselt per Klartext
eintreffen, obwohl TLS-Zertifikat konfiguriert ist. Sicherheitslücke für den
Journaling-Kanal, der Original-Mails 1:1 (Rohbyte-Erhalt für Revisionssicherheit,
siehe GoBD-Anforderung) entgegennimmt.
Lösung
Neues optionales Config-Flag smtp.require_tls (config/config.go, Feld
RequireTLS). Wenn true:
- Start-Validierung: Daemon startet nicht, wenn
require_tls: truegesetzt ist, abertls_cert/tls_keyfehlen (internal/smtpd/smtpd.goStart()). - Enforcement bei
MAIL FROM: Session ohne aktive TLS-Verbindung wird mit530 5.7.0 Must issue STARTTLS firstabgelehnt, bevor Daten übertragen werden (session.Mail()). - TLS-Status pro Session wird beim Verbindungsaufbau via
c.TLSConnectionState()ermittelt (backend.NewSession()).
Standardmäßig deaktiviert (require_tls fehlt/false) — keine Breaking Change
für bestehende Installationen ohne TLS-Zertifikat.
Implementation Notes
config/config.go:SMTPConfig.RequireTLS boolyaml:"require_tls".internal/smtpd/smtpd.go:session.isTLS boolFeld, gesetzt inNewSession().Start(): Fehler beim Boot, fallsRequireTLSohne Cert/Key.session.Mail(): Reject vor Datenübertragung, spart Bandbreite ggü. Ablehnung erst nachDATA.
- Rohbyte-Erhalt, Message-ID-Erhalt, Envelope/Header-Trennung (BCC-Journaling) bereits vorhanden und unverändert (siehe Code-Review vom 2026-07-08) — dieses Feature schließt nur die TLS-Lücke im Transportkanal.
Acceptance Criteria
require_tls: false/fehlend → Verhalten unverändert (STARTTLS optional).require_tls: trueohnetls_cert/tls_key→ Daemon-Start schlägt fehl.require_tls: true+ Cert/Key gesetzt → Klartext-MAIL FROMwird mit 530 abgelehnt, STARTTLS-Verbindung wird angenommen.