Twee berichten kunnen er in een e-mailclient identiek uitzien en toch verschillend zijn DKIM lichaam hash. DKIM verifieert de verzonden representatie nadat deze is gespecificeerd canonicalisering, niet de gedecodeerde weergave van de lezer. Het opnieuw opbouwen MIME , conversie van inhoudoverdracht en grenswijzigingen horen daarom vroeg in het onderzoek, wanneer een bericht pas mislukt na een verwerkingsservice.
Scheid schijn van representatie
Een MIME bericht kan platte tekst, HTML, bijlagen en geneste meerdelige structuren bevatten. RFC 2046 §5.1.1 plaatst MIME onderdeelkoppen en grensscheidingslijnen binnen de meerdelige hoofdtekst. Het opnieuw coderen van een tekstgedeelte van quoted-printable naar base64 kan behouden wat een gebruiker leest, terwijl de bytes worden gewijzigd die aan DKIM worden gepresenteerd. Het opnieuw inpakken van gecodeerde regels kan deze bytes ook wijzigen. Ontspannen canonicalisering is een gedefinieerde witruimtetransformatie, geen MIME decoder of een gelijkwaardigheidstest voor weergegeven inhoud.
RFC 6376 §5.3 adviseert conversie naar een geschikte MIME -overdrachtscodering vóór ondertekening om transportconversies te verminderen. Het vereist specifiek dat lokale representaties die vóór verzending zullen veranderen, worden genormaliseerd vóór ondertekening. Het principe is operationeel eenvoudig: onderteken het formulier dat de ontvanger geacht wordt te zien.
Zoek de wijziging in de serialisatie
Verkrijg onbewerkte berichten bij de uitvoer van de ondertekenaar, de vermoedelijke gateway-uitvoer en de uiteindelijke ontvanger. Bewaar originelen zonder ze te openen en op te slaan via een editor die regeleinden normaliseert. Let op de verzamelmethode, want een exporttool kan zelf de weergave wijzigen.
Vergelijk de velden Content-Type en Content-Transfer-Encoding bij het buitenste bericht en bij elk relevant MIME onderdeel. Controleer grensreeksen, bijlagecodering, gevouwen lijnen en tekensetconversie. Bepaal of een gewijzigde buitenste koptekst in h is opgenomen en of gewijzigde onderdeelkopteksten in de ondertekende hoofdtekst zijn opgetreden. Behandel de twee locaties afzonderlijk: een buitenste header kan ervoor zorgen dat de handtekeningverificatie mislukt, terwijl een MIME onderdeelheader normaal gesproken deelneemt aan de lichaam hasj.
Werk een coderingsvoorbeeld door
Illustratieve testspecificatie: een tekstgedeelte dat een niet-ASCII-teken bevat, wordt voorbereid met behulp van quoted-printable voordat de applicatie het bericht ondertekent. Een downstream-service decodeert dat onderdeel en serialiseert het als base64. De weergegeven zin blijft hetzelfde, maar de gecanoniseerde tekst kan verschillen en de originele handtekening kan mislukken. Voer dit alleen uit met gecontroleerde inhoud en inspecteer de werkelijke byteverschillen in plaats van aan te nemen dat elke service deze conversie uitvoert.
Maak een kleine testset met alleen platte tekst in ASCII, niet-ASCII-tekst, meerdelige HTML en een kleine bijlage. Stuur ze allemaal via een direct controlepad en het productie-equivalente verwerkingspad. Als alleen de laatste de representatie verandert, identificeert de grensvergelijking de component die moet worden onderzocht. Als beide niet werken, onderzoek dan eerst de serialisatie en normalisatie van de ondertekenaar zelf.
Repareer de grens
Geef de voorkeur aan de definitieve MIME constructie en selectie van overdrachtscodering vóór ondertekening. Als een beveiligingsdienst inhoud moet herschrijven, zorg dan voor een geautoriseerde ondertekeningsstap na de definitieve serialisatie. Bevestig het ondersteunings- en eigendomsmodel voor aangepaste domeinen; een handtekening onder een niet-gerelateerd servicedomein kan DKIM doorgeven zonder uit te lijnen DMARC onder RFC 9989 §4.4.1.
Repareer een monster niet op zijn plaats en presenteer het niet als bewijs dat de productie vaststaat. Een gewijzigde steekproef toetst alleen een hypothese. Wijzig de verantwoordelijke configuratie, stuur nieuwe gecontroleerde berichten en leg de oorspronkelijke ontvangerresultaten vast. Vermijd brede omzeilingen van inhoudsinspectie uitsluitend om een handtekening te behouden zonder de gevolgen voor de beveiliging te beoordelen.
Bewaar een nuttig incidentoverzicht
Leg de eerste grens vast waar geserialiseerde inhoud uiteenloopt, het betrokken MIME veld of -onderdeel, de ondertekenaar en keuzeschakelaaren resultaten voor elke testvariant. Houd de testberichten vrij van klantgegevens. Voer de suite opnieuw uit na gateway-upgrades en wijzigingen in de verwerking van bijlagen. De voltooide oplossing legt uit waarom de oude weergave faalde en laat zien dat nieuw verzonden e-mail de volledig ondersteunde route overleeft.
Vergelijk een concreet gecodeerde representatie
Voor de UTF-8 bytes C3 A9 die é vertegenwoordigen, is een afdrukbare weergave tussen aanhalingstekens =C3=A9; een base64-representatie is w6k=. Met de juiste MIME headers decoderen beide naar hetzelfde teken, maar de gecodeerde tekenreeksen verschillen. RFC 2045 §6.7 En RFC 2045 §6.8 definieer de coderingen; RFC 6376 §3.7 vereist hashing na overdrachtscodering en vóór decodering tijdens verificatie. Dit geïsoleerde representatievoorbeeld is geen volledig MIME bericht of een uitgevoerde handtekeningtest. Als er een lichaamslengtelimiet wordt gebruikt, bepaal dan of de gewijzigde bytes binnen het bereik vallen, in plaats van ervan uit te gaan dat elk onderdeel beschermd is.