Verifying a new sending platform is signing as your domain
Providers often sign with their own domain by default, which passes DKIM but fails DMARC alignment. Checking the selector record confirms which domain is signing.
Validates a DKIM selector's public key record (length, flags, syntax).
Validates v=DKIM1, extracts the RSA key length from the DER public key, and reads t= flags.
Validates a DKIM selector's public key record (length, flags, syntax).
example.com, selector: default
default._domainkey.example.com → v=DKIM1; k=rsa; p=MIIB... (2048-bit RSA)
The key type and length are validated.
A valid public key record is required for DKIM signatures to verify.
Your input is sent to YAS infrastructure because the tool requires server-side processing or public network queries. Input is not stored.
curl -X POST "https://yas.sh/api/v1/tools/dkim-inspector" \
-H "Content-Type: application/json" \
-d '{"input":"example.com","selector":"selector1"}'const res = await fetch("https://yas.sh/api/v1/tools/dkim-inspector", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"input": "example.com",
"selector": "selector1"
}),
});
const data = await res.json();import requests
r = requests.post("https://yas.sh/api/v1/tools/dkim-inspector", json={"input":"example.com","selector":"selector1"})
data = r.json()| Field | Type | Required | Description |
|---|---|---|---|
| input | string | Yes | Domain, e.g. example.com |
| selector | string | No (default "selector1") | DKIM selector |
{ "result": { "found": true, "record": "v=DKIM1; k=rsa; p=MIIB...", "keyLength": 2048, "flags": [], "valid": true } }Validate <selector>._domainkey.<domain> TXT: v=DKIM1, k=rsa, key length, t= flags.
400 VALIDATION_ERROR — invalid input or unsupported option.413 PAYLOAD_TOO_LARGE — input exceeds the 64 KB limit.429 RATE_LIMIT_EXCEEDED — rate limit exceeded (60 req/min).DKIM signs selected headers and the message body with a private key held by the sender, and publishes the public key as a TXT record at <selector>._domainkey.<domain>. The receiver reads the selector and domain from the DKIM-Signature header, fetches the key, and verifies the signature. Because the signature travels with the message, it survives relaying — unlike SPF, which is tied to the connecting host.
Two mechanics cause most failures. The body hash covers the message content, so any modification in transit — a mailing list appending a footer, a security appliance rewriting links — invalidates the signature. And the h= tag lists which headers are signed; headers not listed can be added or altered without breaking verification, which is why signing From: is essential and why over-signing is used to prevent header injection.
Providers often sign with their own domain by default, which passes DKIM but fails DMARC alignment. Checking the selector record confirms which domain is signing.
List software that appends footers or rewrites subjects breaks the body hash. Confirming the selector is valid narrows it to in-transit modification.
Publish the new selector, switch signing, then retire the old selector after the last signed message could plausibly still be verified.
1024-bit DKIM keys are still widespread and are considered weak; 2048-bit is the current expectation.
What this tool deliberately does not do, and where it will disagree with other implementations.