Checklist
Exchange hybrid certificate renewal checklist
Based on the article: Renewing the Exchange hybrid certificate without breaking mail flow · 5 min read
The public certificate on your hybrid servers is what lets Exchange Online trust mail from on-premises and vice versa. Renew it carelessly and mail between the two sides queues up, or quietly starts using a certificate you didn't intend. In this post I'll walk through a renewal runbook that keeps hybrid mail flowing, based on Microsoft's documented process, with the checks I'd run at each step.
Before you start
- A renewed certificate from a trusted public certification authority, with its private key and the full chain (root and intermediate) available. Keep the same names (Subject and SAN) as the current one if you can; a change of names means connector changes in Exchange Online too.
- The list of servers that carry hybrid mail: every server selected for the hybrid send and receive connectors, plus any Edge Transport servers.
- Organization Management rights on-premises, Exchange Online PowerShell, the latest Hybrid Configuration Wizard (HCW) from
https://aka.ms/hybridwizard, and a change window. - Exchange Server Subscription Edition (SE). Exchange 2016 and 2019 reached end of support on 14 October 2025.
Note: This post covers the third-party transport certificate. The self-signed Microsoft Exchange Server Auth Certificate used for OAuth has its own renewal procedure; see my hybrid free/busy article for how a renewed Auth Certificate reaches the dedicated hybrid application.
Checklist
- 1
Record the current configuration
Connectors don't store a thumbprint. They store
TlsCertificateNamein the format<I>issuer<S>subject, and Exchange picks the matching certificate at run time. Capture both sides before you touch anything:powershell# Exchange Management Shell Get-HybridConfiguration | Format-List SendingTransportServers, ReceivingTransportServers, EdgeTransportServers, TlsCertificateName Get-SendConnector "Outbound to Office 365*" | Format-List Name, TlsCertificateName Get-ReceiveConnector "EX01\Default Frontend EX01" | Format-List Name, TlsCertificateName, TlsDomainCapabilities Get-ExchangeCertificate -Server EX01 | Format-List Thumbprint, Subject, Issuer, CertificateDomains, Services, NotAfter # Exchange Online PowerShell Get-InboundConnector | Where-Object ConnectorType -eq 'OnPremises' | Format-List Name, TlsSenderCertificateName Get-OutboundConnector | Where-Object ConnectorType -eq 'OnPremises' | Format-List Name, TlsDomain - 2
Get the renewed certificate onto every server
Generate the request on an Exchange server with the private key marked exportable (
New-ExchangeCertificate -GenerateRequestwith-PrivateKeyExportable $true), and complete the pending request on the same server withImport-ExchangeCertificate. Then copy the certificate to the other hybrid servers:powershell# On the server that completed the request $pfx = Export-ExchangeCertificate -Thumbprint <NewThumbprint> -BinaryEncoded -Password (Read-Host "PFX password" -AsSecureString) [System.IO.File]::WriteAllBytes('C:\Certs\hybrid-renewed.pfx', $pfx.FileData) # For each other hybrid server Import-ExchangeCertificate -Server EX02 -FileData ([System.IO.File]::ReadAllBytes('C:\Certs\hybrid-renewed.pfx')) ` -Password (Read-Host "PFX password" -AsSecureString) -PrivateKeyExportable $trueWatch out: When several valid certificates share the same issuer and subject, Exchange usually uses the one with the most recent "valid from" date. If your renewed certificate keeps the same issuer and subject, importing it is the switchover, so do it in the change window, on all servers together, with the chain installed.
- 3
Enable it for SMTP
powershellEnable-ExchangeCertificate -Server EX02 -Thumbprint <NewThumbprint> -Services SMTPExchange asks whether to overwrite the default SMTP certificate. Answer No to keep the self-signed certificate for internal communication between transport services and with Edge servers.
- 4
Update the hybrid connectors
Compare the new certificate's issuer and subject with the old one:
- Same issuer and subject: there's usually nothing to change;
TlsCertificateNamealready matches the new certificate. If you set it anyway, the warning "The command completed successfully but no settings have been modified" confirms this. - Different issuer or subject (CAs often move renewals to a new intermediate): run the HCW again and select the new certificate when it asks for the transport certificate. The wizard updates the on-premises connectors, the Exchange Online connectors and the stored
HybridConfigurationobject together.
If you can't run the wizard, update the on-premises connectors by hand:
powershell$cert = Get-ExchangeCertificate -Server EX01 -Thumbprint <NewThumbprint> $tls = "<I>$($cert.Issuer)<S>$($cert.Subject)" Set-SendConnector -Identity "Outbound to Office 365 - <GUID>" -TlsCertificateName $tls Set-ReceiveConnector -Identity "EX01\Default Frontend EX01" -TlsCertificateName $tls # repeat per receiving serverTip: If you have moved OAuth to the dedicated Exchange hybrid application, an HCW run that includes the OAuth step can undo its service principal clean-up. Check the steps in my HCW troubleshooting post after the run.
- Same issuer and subject: there's usually nothing to change;
- 5
Restart transport and handle Edge servers
Restart the transport service on each hybrid server so it picks up the change:
Restart-Service MSExchangeTransport.
Verify
- Every hybrid server holds the new certificate with a private key and SMTP enabled:powershell
Get-ExchangeCertificate -Server EX02 -Thumbprint <NewThumbprint> | Format-List Services, HasPrivateKey, NotAfter, Status - Nothing is stuck in the hybrid queue on any sending server:
Get-Queue -Server EX01 | Where-Object LastError | Format-List Identity, NextHopDomain, LastErrorreturns nothing forcontoso.mail.onmicrosoft.com. - The protocol log shows the new thumbprint. Turn on verbose logging for the send connector if it's off, send a test message, then search the log folder:powershell
Set-SendConnector "Outbound to Office 365 - <GUID>" -ProtocolLoggingLevel Verbose $path = (Get-TransportService EX01).SendProtocolLogPath Select-String -Path "$path\*.log" -Pattern 'thumbprint' | Select-Object -Last 3 - Test messages flow both ways, and the headers show
X-MS-Exchange-Organization-AuthAs: Internal; see my hybrid mail flow deep dive for what to compare. - Only after all of that, remove the old certificate from each server with
Remove-ExchangeCertificate.
Tips & gotchas
- A queue error like
454 4.7.5 The certificate specified in TlsCertificateName of the SendConnector could not be foundmeans the connector's issuer/subject string matches no valid certificate on that server. - Don't import the renewed certificate weeks early "to be ready" if issuer and subject are unchanged; Exchange may start using it straight away.
- An incomplete chain on one server gives intermittent failures that depend on which server handles the connection; install the intermediates everywhere.
- Put the expiry date in your calendar with at least a month's notice, and treat the Auth Certificate as a separate item.