35. pepsi-stage-dkim-sign

Ajouter les signatures DKIM en tête avant la remise.

35.1. Rôle

pepsi-stage-dkim-sign signe le message avec DKIM et l’avance vers une étape de remise. Séparer la signature de la construction du message permet à pepsi-stage-bounce de construire un DSN non signé et de pointer son NEXT_STAGE ici, de sorte qu’un rebond généré est signé avant d’être envoyé. Référence : pepsi-stage-dkim-sign(1).

35.2. Fonctionnalités

  • DKIM à double signature (RFC 6376) : ajoute par défaut en tête à la fois un en-tête DKIM-Signature RSA-2048 et un Ed25519 (RFC 8463) ; [pepsi] DKIM_ALGORITHMS réduit cela à un seul (les plus grands destinataires ne vérifient pas Ed25519 et le signalent comme fail dans les rapports agrégés DMARC).

  • Sélection du domaine de signature : SIGNING_DOMAIN s’il est défini, sinon le domaine de l’en-tête From: du message.

  • Couverture intégrale du corps, toujours : la balise de longueur de corps l= de la RFC 6376 n’est jamais émise et n’est pas configurable. Les vérificateurs stricts (mail-auth, Stalwart et celui de Pepsi) rejettent purement et simplement une signature avec l > 0, et la RFC 6376 §8.2 avertit qu’un contenu ajouté à la fin peut remplacer l’original aux yeux du lecteur.

  • Ajout en tête uniquement / écriture unique : les signatures sont ajoutées en haut, de sorte que les signatures existantes plus bas dans le message ne sont pas perturbées ; seule la colonne headers est réécrite.

  • Fail-closed : un message n’est jamais avancé non signé. Si aucun domaine de signature ne peut être déterminé, ou s’il n’y a pas de répertoire de clés pour lui, le message est mis en échec (failed terminal, avec la raison dans state.last_error), et pepsi-failure-bouncer ou l’opérateur décide de ce qu’il en advient. Si les clés existent mais ne peuvent être lues ou utilisées (une rotation à moitié faite, une permission modifiée), c’est l’hôte qui est en cause : le message est mis en pause et réessayé, avec la raison dans state.last_error, jusqu’au MAX_LIFETIME de l’étape (par défaut 120 heures) — corrigez la clé et la file se vide d’elle-même.

35.3. Configuration

[stage-<name>] : PROGRAM = pepsi-stage-dkim-sign, NEXT_STAGE (obligatoire) et SIGNING_DOMAIN, plus les paramètres de signature HEADER_CANONICALIZATION / BODY_CANONICALIZATION (relaxed — la valeur par défaut — ou simple, choisissables indépendamment), SIGNED_HEADERS (l’ensemble h= ; doit inclure From) et SIGNATURE_EXPIRATION_DAYS (l’étiquette x= ; aucune par défaut). Le matériel de clés et les sélecteurs proviennent de la section partagée [pepsi] (KEY_DIR, DKIM_SELECTOR ; le sélecteur Ed25519 est ce nom suivi de -ed25519 ; DKIM_ALGORITHMS). Voir pepsi-stage-dkim-sign(1).

35.4. État

  • Entrées : aucune depuis state (domaine depuis SIGNING_DOMAIN ou la colonne from_header ; hachage du corps depuis le message chargé).

  • Sorties : aucune sur le chemin de signature — tout le state, y compris state.dsn, est préservé. Seul un échec ou un réessai écrit quelque chose (state.last_error, et state.temporary_failures pour un réessai).

35.5. Voir aussi

pepsi-stage-bounce, pepsi-stage-relay-to-internet, Fonctionnalités prises en charge, pepsi-stage-dkim-sign(1).