Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for CNAME delegated DKIM keys #3020

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

schueffi
Copy link

In order to use a DKIM public key, it has to be published in the DNS system. The most easy setup simply puts it directly into the appropriate TXT record. A more advanced setup also allows them to be delegated to some other record pointed to by a CNAME record.

As an example, both variants are equivalent in terms of DKIM key validation:

selector1._domainkey.example.org IN TXT "v=DKIM1; p=..."

and

selector1._domainkey.example.org IN CNAME "somekey.mailprovider.org."
somekey.mailprovider.org IN TXT "v=DKIM1; p=..."

So, the actual key management can be delegated to some other party by means of using a CNAME.

This is of special importance for infrastructure automation and DKIM key rotation (we just ask the customer / domain dns owner once to add the appropriate CNAME pointing to the corresponding record on our own domain, and then we're able to modify the DKIM keys on our own without requiring the customers to update their DNS records all the time).
As key rotation is a current best practice, the added CNAME support will ease the respective implementation.

This commit changes the code to first check a TXT record (as before), and in addition checks a CNAME record (and if found, check the record it is referring to - up to a limit of 10 recursion steps to avoid endless recursions).

In order to use a DKIM public key, it has to be published in the DNS system.
The most easy setup simply puts it directly into the appropriate TXT record.
A more advanced setup also allows them to be delegated to some other record
pointed to by a CNAME record.

As an example, both variants are equivalent in terms of DKIM key validation:

selector1._domainkey.example.org IN TXT "v=DKIM1; p=..."

and

selector1._domainkey.example.org IN CNAME "somekey.mailprovider.org."
somekey.mailprovider.org IN TXT "v=DKIM1; p=..."

So, the actual key management can be delegated to some other party by means of
using a CNAME.

This is of special importance for infrastructure automation and DKIM key rotation
(we just ask the customer / domain dns owner once to add the appropriate CNAME
pointing to the corresponding record on our own domain, and then we're able to
modify the DKIM keys on our own without requiring the customers to update their
DNS records all the time).
As key rotation is a current best practice, the added CNAME support will ease
the respective implementation.

This commit changes the code to first check a TXT record (as before), and in
addition checks a CNAME record (and if found, check the record it is referring
to - up to a limit of 10 recursion steps to avoid endless recursions).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant