Configuring for DKIM Signing
From Zimbra :: Wiki
|- This is certified documentation and is protected for editing by Zimbra Employees & Moderators only.|
|This article applies to the following ZCS versions.|
Zimbra Server with DKIM Signing
DomainKeys Identified Mail (DKIM) lets an organization take responsibility for a message that is in transit. The organization is a handler of the message, either as its originator or as an intermediary. Their reputation is the basis for evaluating whether to trust the message for further handling, such as delivery. Technically DKIM provides a method for validating a domain name identity that is associated with a message through cryptographic authentication
Configuring ZCS for DKIM signing
Starting with Zimbra 8.0, the ability to add DKIM signing to outgoing mail is available. Signing is done at the domain level, including alias domains. Setting up signing consists of two steps:
- Running zmdkimkeyutil to generate the DKIM keys and selector. The generated data is stored in the LDAP server as part of the domain LDAP entry.
- Updating the DNS server with the public DNS entry
The zmdkimkeyutil utility
The zmdkimkeyutil script allows you to do the following:
- Add DKIM data to a domain that does not currently have DKIM enabled
- Update DKIM data for a domain that already has DKIM enabled
- Query the DKIM data for a domain
- Remove the DKIM data for a domain
The domain "example.com" will be used throughout this wiki. Substitute it with your domain.
Adding DKIM data to a domain with no existing DKIM configuration
/opt/zimbra/libexec/zmdkimkeyutil -a -d example.com
After the data is generated, the public DNS record data that must be added for the domain to your DNS server will be displayed:
firstname.lastname@example.org:~$ /opt/zimbra/libexec/zmdkimkeyutil -a -d example.com DKIM Data added to LDAP for domain example.com with selector 0E9F184A-9577-11E1-AD0E-2A2FBBAC6BCB Public key to enter into DNS: 0E9F184A-9577-11E1-AD0E-2A2FBBAC6BCB._domainkey IN TXT "v=DKIM1;=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDY5CBg15nZ2vYnRmrNub6Jn6ghQ2DXQbQgOJ/E5IGziUYEuE2OnxkBm1h3jived21uHjpNy0naOZjLj0xLyyjclVy1chrhSbsGAhe8HLXUsdXyfRvNTq8NWLsUnMEsoomtJCJ /6LYWYU1whOQ9oKZVAwWHSovAWZpByqNMZmFg7QIDAQAB" ; ----- DKIM 0E9F184A-9577-11E1-AD0E-2A2FBBAC6BCB for example.com
Updating DKIM data for a domain
/opt/zimbra/libexec/zmdkimkeyutil -u -d example.com
Whenthe DKIM keys are updated, the DNS server will need to be reloaded with the new TXT record. It is advised to leave the previous TXT record in DNS for a period of time to allow verification of emails that were signed with the previous key to continue to succeed.
Removing DKIM data for a domain
/opt/zimbra/libexec/zmdkimkeyutil -r -d example.com
This command deletes the DKIM data from LDAP. New emails will no longer be signed for the domain. The DNS TXT record should remain for a period of time to allow verification of emails signed with this key.
Retrieving the stored DKIM data for a domain
/opt/zimbra/libexec/zmdkimkeyutil -q -d example.com
This command will output all the stored DKIM information, specifically
DKIM Domain DKIM Selector DKIM Private Key DKIM Public Signature DKIM Identity
- The public key DNS record should appear as a TXT resource record at:
SELECTOR._domainkey.DOMAIN The Selector is the first portion of the output from zmdkimkeyutil In the above example, it is 0E9F184A-9577-11E1-AD0E-2A2FBBAC6BCB
- Once you have added the record to your nameserver, reload DNS.
- Verify that the DNS server is returning the DNS record.
dig -t txt SELECTOR._domainkey.DOMAIN NAMESERVER Example: dig -t txt 0E9F184A-9577-11E1-AD0E-2A2FBBAC6BCB._domainkey.example.com ns.example.com
- If the key is retrieved correctly, then use /opt/zimbra/opendkim/sbin/opendkim-testkey to verify that the public key matches the private key.
/opt/zimbra/opendkim/sbin/opendkim-testkey -d example.com -s 0E9F184A-9577-11E1-AD0E-2A2FBBAC6BCB -x /opt/zimbra/conf/opendkim.conf
Revoking a DKIM key in DNS
If it becomes necessary to revoke a DKIM signing key, this can be easily done in DNS by using an empty "p=" tag in the TXT record.