Message center notification MC291056 (updated October 19) covering a simplified configuration for Domain Keys Identified Mail (DKIM) in Microsoft 365 Defender for Office 365 was a good reminder to check that all the domain names registered for my tenant were in good health.
DKIM uses a private key to include an encrypted signature in a domain’s outbound email. The public key for the domain is published in its DNS records. Receiving domains use the public key to decode the signature in messages to confirm that email comes from the domain it appears to be from rather than a spoof attempt. You can choose to use either 1024-bit or 2048-bit DKIM keys.
Microsoft configures DKIM for the tenant service domain automatically (the onmicrosoft.com domain assigned to each tenant). If a tenant has one or more custom domains, as most Office 365 tenants do, administrators should configure DKIM for each domain used for email (accepted domains).
All outbound email sent from Exchange Online is signed with DKIM. Exchange Online uses the service domain name if DKIM is not configured for a custom domain (like Office365itpros.com). It’s better for email authentication if the domain used for DKIM matches the domain sending email. Hence the logic behind the need to check that all your custom domains are configured.
Check Your Domains
The first place to check is the Domains section of Settings in the Microsoft 365 admin center. I look there to make sure that Microsoft 365 considers each of the registered domains to be healthy. This has nothing to do with DKIM because Microsoft 365 doesn’t take DKIM into account when it checks a domain. However, it’s good to make sure that Microsoft 365 doesn’t consider any of the domains to have problems with their basic set of DNS records. Interestingly, I noted that the details available for a domain now include the set of Groups and Teams which use the domain for their primary SMTP address (Figure 1).
Figure 1: Teams and groups for an email domain
Although this information is easy to find elsewhere, it’s good to have it here in case you want to remove a domain and need to reassign SMTP addresses to keep email flowing. In passing, the Apps section lists Azure AD registered apps which use the domain as a required URL.
A New DKIM Page
MC291056 notes the introduction of a new DKIM configuration page in the Microsoft 365 Security Center. The page lists the accepted domains for the tenant and allows administrators to select individual domains to enable or disable DKIM (Figure 2).
Figure 2: The new DKIM configuration page in the Microsoft 365 Security Center
Everything was in order except for the tonyredmond.email domain. The domain works for email, but DKIM wasn’t enabled because the CNAME records for the domain weren’t published in DNS. This status is also viewable in PowerShell by running the Get-DkimSigningConfig cmdlet to check the domains:
Microsoft’s documentation explains what needs to be done. Because GoDaddy is the domain manager, I had to create the CNAME records in DNS for the DKIM signatures for the domain. You can get the values for the CNAME records using the Get-DkimSigningConfig cmdlet:
A quick visit to GoDaddy’s Domain Manager and the two records were inserted (Figure 3).
Figure 3: Adding DKIM records for a domain using the GoDaddy Domain Manager
After adding the records to DNS, it will take a little time to propagate the new data to Microsoft 365. An hour is usually enough. After Microsoft 365 knows about the CNAME records for DKIM for the domain, you can enable DKIM by moving Sign messages for this domain with DKIM signatures from Disabled to Enabled (Figure 4).
Figure 4: Where to enable a domain for DKIM
Of course, you can enable the domain using PowerShell.
When a domain is enabled for DKIM, you can also configure it for key rotation. The documentation for the Rotate-DkimSigningConfig cmdlet says that you don’t need to do this because Microsoft 365 rotates private and public keys automatically to reduce the chance of an attacker compromising the keys used to sign messages. This assertion might cover the service domain, but I don’t see any problem in going ahead and rotating DKIM keys for all custom domains used to send email. Happy signing!
Learn about protecting Exchange Online and the rest of Office 365 by subscribing to the Office 365 for IT Pros eBook. Use our experience to understand what’s importance and how best to protect your tenant.
One Reply to “Improved DKIM Configuration Page is Prompt to Check Domains”
On what MS considers to be a problem or not on the DNS records page, I noticed that even though we (like everyone else) are off Skype for Business Online now, that page flags you if you don’t still have all four of those records. Only one of them, as far as I’ve determined, has relevance for Teams (to allow connection with Skype consumer): _sipfederationtls._tcp.
{"id":null,"mode":"button","open_style":"in_modal","currency_code":"EUR","currency_symbol":"\u20ac","currency_type":"decimal","blank_flag_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/blank.gif","flag_sprite_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/flags.png","default_amount":100,"top_media_type":"featured_image","featured_image_url":"https:\/\/office365itpros.com\/wp-content\/uploads\/2022\/11\/cover-141x200.jpg","featured_embed":"","header_media":null,"file_download_attachment_data":null,"recurring_options_enabled":true,"recurring_options":{"never":{"selected":true,"after_output":"One time only"},"weekly":{"selected":false,"after_output":"Every week"},"monthly":{"selected":false,"after_output":"Every month"},"yearly":{"selected":false,"after_output":"Every year"}},"strings":{"current_user_email":"","current_user_name":"","link_text":"Virtual Tip Jar","complete_payment_button_error_text":"Check info and try again","payment_verb":"Pay","payment_request_label":"Office 365 for IT Pros","form_has_an_error":"Please check and fix the errors above","general_server_error":"Something isn't working right at the moment. Please try again.","form_title":"Office 365 for IT Pros","form_subtitle":null,"currency_search_text":"Country or Currency here","other_payment_option":"Other payment option","manage_payments_button_text":"Manage your payments","thank_you_message":"Thank you for supporting the work of Office 365 for IT Pros!","payment_confirmation_title":"Office 365 for IT Pros","receipt_title":"Your Receipt","print_receipt":"Print Receipt","email_receipt":"Email Receipt","email_receipt_sending":"Sending receipt...","email_receipt_success":"Email receipt successfully sent","email_receipt_failed":"Email receipt failed to send. Please try again.","receipt_payee":"Paid to","receipt_statement_descriptor":"This will show up on your statement as","receipt_date":"Date","receipt_transaction_id":"Transaction ID","receipt_transaction_amount":"Amount","refund_payer":"Refund from","login":"Log in to manage your payments","manage_payments":"Manage Payments","transactions_title":"Your Transactions","transaction_title":"Transaction Receipt","transaction_period":"Plan Period","arrangements_title":"Your Plans","arrangement_title":"Manage Plan","arrangement_details":"Plan Details","arrangement_id_title":"Plan ID","arrangement_payment_method_title":"Payment Method","arrangement_amount_title":"Plan Amount","arrangement_renewal_title":"Next renewal date","arrangement_action_cancel":"Cancel Plan","arrangement_action_cant_cancel":"Cancelling is currently not available.","arrangement_action_cancel_double":"Are you sure you'd like to cancel?","arrangement_cancelling":"Cancelling Plan...","arrangement_cancelled":"Plan Cancelled","arrangement_failed_to_cancel":"Failed to cancel plan","back_to_plans":"\u2190 Back to Plans","update_payment_method_verb":"Update","sca_auth_description":"Your have a pending renewal payment which requires authorization.","sca_auth_verb":"Authorize renewal payment","sca_authing_verb":"Authorizing payment","sca_authed_verb":"Payment successfully authorized!","sca_auth_failed":"Unable to authorize! Please try again.","login_button_text":"Log in","login_form_has_an_error":"Please check and fix the errors above","uppercase_search":"Search","lowercase_search":"search","uppercase_page":"Page","lowercase_page":"page","uppercase_items":"Items","lowercase_items":"items","uppercase_per":"Per","lowercase_per":"per","uppercase_of":"Of","lowercase_of":"of","back":"Back to plans","zip_code_placeholder":"Zip\/Postal Code","download_file_button_text":"Download File","input_field_instructions":{"tip_amount":{"placeholder_text":"How much would you like to tip?","initial":{"instruction_type":"normal","instruction_message":"How much would you like to tip? Choose any currency."},"empty":{"instruction_type":"error","instruction_message":"How much would you like to tip? Choose any currency."},"invalid_curency":{"instruction_type":"error","instruction_message":"Please choose a valid currency."}},"recurring":{"placeholder_text":"Recurring","initial":{"instruction_type":"normal","instruction_message":"How often would you like to give this?"},"success":{"instruction_type":"success","instruction_message":"How often would you like to give this?"},"empty":{"instruction_type":"error","instruction_message":"How often would you like to give this?"}},"name":{"placeholder_text":"Name on Credit Card","initial":{"instruction_type":"normal","instruction_message":"Enter the name on your card."},"success":{"instruction_type":"success","instruction_message":"Enter the name on your card."},"empty":{"instruction_type":"error","instruction_message":"Please enter the name on your card."}},"privacy_policy":{"terms_title":"Terms and conditions","terms_body":null,"terms_show_text":"View Terms","terms_hide_text":"Hide Terms","initial":{"instruction_type":"normal","instruction_message":"I agree to the terms."},"unchecked":{"instruction_type":"error","instruction_message":"Please agree to the terms."},"checked":{"instruction_type":"success","instruction_message":"I agree to the terms."}},"email":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email address"},"success":{"instruction_type":"success","instruction_message":"Enter your email address"},"blank":{"instruction_type":"error","instruction_message":"Enter your email address"},"not_an_email_address":{"instruction_type":"error","instruction_message":"Make sure you have entered a valid email address"}},"note_with_tip":{"placeholder_text":"Your note here...","initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"empty":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"not_empty_initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"saving":{"instruction_type":"normal","instruction_message":"Saving note..."},"success":{"instruction_type":"success","instruction_message":"Note successfully saved!"},"error":{"instruction_type":"error","instruction_message":"Unable to save note note at this time. Please try again."}},"email_for_login_code":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email to log in."},"success":{"instruction_type":"success","instruction_message":"Enter your email to log in."},"blank":{"instruction_type":"error","instruction_message":"Enter your email to log in."},"empty":{"instruction_type":"error","instruction_message":"Enter your email to log in."}},"login_code":{"initial":{"instruction_type":"normal","instruction_message":"Check your email and enter the login code."},"success":{"instruction_type":"success","instruction_message":"Check your email and enter the login code."},"blank":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."},"empty":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."}},"stripe_all_in_one":{"initial":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"empty":{"instruction_type":"error","instruction_message":"Enter your credit card details here."},"success":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"invalid_number":{"instruction_type":"error","instruction_message":"The card number is not a valid credit card number."},"invalid_expiry_month":{"instruction_type":"error","instruction_message":"The card's expiration month is invalid."},"invalid_expiry_year":{"instruction_type":"error","instruction_message":"The card's expiration year is invalid."},"invalid_cvc":{"instruction_type":"error","instruction_message":"The card's security code is invalid."},"incorrect_number":{"instruction_type":"error","instruction_message":"The card number is incorrect."},"incomplete_number":{"instruction_type":"error","instruction_message":"The card number is incomplete."},"incomplete_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incomplete."},"incomplete_expiry":{"instruction_type":"error","instruction_message":"The card's expiration date is incomplete."},"incomplete_zip":{"instruction_type":"error","instruction_message":"The card's zip code is incomplete."},"expired_card":{"instruction_type":"error","instruction_message":"The card has expired."},"incorrect_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incorrect."},"incorrect_zip":{"instruction_type":"error","instruction_message":"The card's zip code failed validation."},"invalid_expiry_year_past":{"instruction_type":"error","instruction_message":"The card's expiration year is in the past"},"card_declined":{"instruction_type":"error","instruction_message":"The card was declined."},"missing":{"instruction_type":"error","instruction_message":"There is no card on a customer that is being charged."},"processing_error":{"instruction_type":"error","instruction_message":"An error occurred while processing the card."},"invalid_request_error":{"instruction_type":"error","instruction_message":"Unable to process this payment, please try again or use alternative method."},"invalid_sofort_country":{"instruction_type":"error","instruction_message":"The billing country is not accepted by SOFORT. Please try another country."}}}},"fetched_oembed_html":false}
On what MS considers to be a problem or not on the DNS records page, I noticed that even though we (like everyone else) are off Skype for Business Online now, that page flags you if you don’t still have all four of those records. Only one of them, as far as I’ve determined, has relevance for Teams (to allow connection with Skype consumer): _sipfederationtls._tcp.
Also, it’s worth noting that at some point in the last year or two, 2048-bit DKIM became available. There’s a way to check what you have and upgrade, if needed. Anyone who enabled DKIM more than a few years ago will be at 1024, but there’s a way to check.
https://docs.microsoft.com/en-us/microsoft-365/security/office-365-security/use-dkim-to-validate-outbound-email?view=o365-worldwide#steps-to-manually-upgrade-your-1024-bit-keys-to-2048-bit-dkim-encryption-keys