症状
请考虑以下情况:
将续订的证书分配给一个或多个 Microsoft Exchange Server服务。
尝试在 Exchange 管理中心 (EAC) 或使用 Remove-ExchangeCertificate PowerShell cmdlet 删除旧证书。
在这种情况下,您会收到以下错误消息:
“服务器 <服务器名称>上出现特殊的 Rpc 错误:这些证书使用以下发送连接器标记: <发送连接器名称>。 从发送连接器中删除和替换证书会中断邮件流。 如果仍要继续,请从发送连接器替换或删除这些证书,然后尝试此命令。”
如果新证书的颁发者名称和使用者名称与旧证书使用的相同,则会出现此问题。
原因
为了避免邮件流中断,如果颁发者名称和使用者名称在任何发送连接器的 TlsCertificateName 属性中指定,Exchange Server将阻止删除证书。 属性值的格式 TlsCertificateName
为“<I>IssuerName<S>SubjectName”。
TlsCertificateName
如果值与旧证书和新证书匹配,Exchange Server将阻止删除这两个证书。
解决方案
若要删除旧证书,请使用以下步骤。 除非另有说明,否则请在 Exchange 命令行管理程序中运行以下 PowerShell 命令 (EMS) 。
获取新旧证书的指纹。 为此,请运行以下命令获取所有Exchange Server证书的列表。 然后,确定列表中的新证书和旧证书。
Get-ExchangeCertificate | Format-List FriendlyName,Subject,Issuer,CertificateDomains,Thumbprint,NotBefore,NotAfter
对于错误消息中报告的每个发送连接器,请使用 Get-SendConnector cmdlet 生成关联的 源传输服务器的聚合列表:
Get-SendConnector -Identity <connector name> | Format-List SourceTransportServers
或者,在 EAC 中标识源传输服务器,如下所示:
导航到 “邮件流>发送连接器”。
对于错误消息中报告的每个发送连接器:
双击以打开连接器。
导航到 “范围>源服务器 ”,查看与该连接器关联的服务器。
若要在此过程中尽量减少邮件流问题,请在步骤 2 中找到的每个源传输服务器上运行以下命令来停止 Microsoft Exchange 传输服务。 命令不必在 EMS 中运行,但它需要提升的 PowerShell 会话。
Stop-Service MSExchangeTransport
或者,在每个源传输服务器上使用 Services.msc 管理单元停止 Microsoft Exchange 传输服务。
注意
停止传输服务后,将停止每个源传输服务器上的邮件流,直到在此过程的最后一步中重启 Microsoft Exchange 传输服务。 有关Exchange Server中邮件流的详细信息,请参阅队列中的队列和邮件。
对于错误消息中报告的每个发送连接器,请使用 Set-SendConnector cmdlet 清除其
TlsCertificateName
属性:Set-SendConnector -Identity <connector name> -TlsCertificateName $Null
注意
如果具有使用不同站点的大型环境,则可能必须 强制 AD 复制 以完全删除
TlsCertificateName
受影响的源传输服务器上的属性值。对于在步骤 2 中找到的每个源传输服务器,请运行以下命令删除旧证书:
Remove-ExchangeCertificate -Server <server name> -Thumbprint <old certificate thumbprint>
或者,可以在 EAC 中删除旧证书,如下所示:
导航到 “服务器>证书”。
对于在步骤 2 中找到的每个源传输服务器:
选择服务器。
选择旧证书,然后将其删除。
注意
如果在重新分配
TlsCertificateName
属性值之前未从所有适用的源传输服务器中删除旧证书,则必须重复解析过程以删除旧证书的剩余实例。TlsCertificateName
通过运行以下命令生成属性值:$cert = Get-ExchangeCertificate -Thumbprint <new certificate thumbprint> $tlscertificatename = "<i>$($cert.Issuer)<s>$($cert.Subject)"
对于错误消息中报告的每个发送连接器,请运行以下命令以分配
TlsCertificateName
在步骤 6 中生成的属性值:Set-SendConnector -Identity <connector name> -TlsCertificateName $tlscertificatename
通过在步骤 2 中找到的每个源传输服务器上运行以下命令,重启 Microsoft Exchange 传输服务。 命令不必在 EMS 中运行,但它需要提升的 PowerShell 会话。
Start-Service MSExchangeTransport
或者,可以在每个源传输服务器上的 Services.msc 管理单元中启动 Microsoft Exchange 传输服务。
更多信息
若要确定发送或接收连接器使用的证书,请执行以下步骤:
为连接器启用协议日志记录 。 有关协议日志记录的详细信息,请参阅 Exchange Server 中的协议日志记录。
打开连接器的最新协议日志文件。 通过在 EMS 中运行以下命令,可以确定适用的日志文件夹路径:
Get-TransportService | Format-List Identity,*ProtocolLogPath
在协议日志文件中,通过在 列中搜索以“发送证书”开头的条目,查找连接器的
context
证书信息。 证书信息位于同一data
行的 列中。 证书信息的格式为“使用者>颁发者><SerialNumber><Thumbprint<>NotBefore><NotAfter><CertificateDomains”。><<通过在 EMS 中运行以下命令,可以找到相应的Exchange Server证书:
Get-ExchangeCertificate | Format-List Subject,Issuer,SerialNumber,Thumbprint,NotBefore,NotAfter,CertificateDomains
有关证书管理的详细信息,请参阅 Exchange Server 中的证书过程。