Exchange 2016 将 TlsCertificateName 分配给接收连接器时出错
Exchange 2016 Error assigning TlsCertificateName to Receive Connector
我已经花了 10 多个小时与 Microsoft 的支持人员一起配置我们的内部部署 Exchange 2016 服务器和 Azure AD 环境之间的混合设置,并且目前在尝试分配 TlsCertificateName 值时遇到错误(见下文)到本地接收连接器。
这些命令创建一个包含证书颁发者和主题值的变量 $TLSCertName:
$TLSCert = Get-ExchangeCertificate -Thumbprint <Thumbprint>
$TLSCertName = "<I>$($TLSCert.Issuer)<S>$($TLSCert.Subject)"
Set-ReceiveConnector "<Receive Connector Name" -TlsCertificateName $TLSCertName
尝试执行此命令时显示的错误是:
Cannot process argument transformation on parameter 'TlsCertificateName'. Cannot convert value "<TLSCertName>" to type "Microsoft.Exchange.Data.SmtpX509Identifier". Error:
""<TLSCertName>" isn't a valid Certificate Identifier."
+ CategoryInfo : InvalidData: (:) [Set-ReceiveConnector], ParameterBindin...mationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Set-ReceiveConnector
+ PSComputerName : <Server's FQDN>
Microsoft 认为问题是由证书主题中的某些包含引号的值引起的,即 OU="Hosted by CONTOSO, Inc."、O="CONTOSO, Inc.",从而导致命令截断TLSCertName 变量。
我试过手动输入参数而不是使用变量(带引号和不带引号)、使用单引号、转义引号 (`"),但没有任何效果。
有人遇到过这个问题吗?我曾尝试在线研究,但未能找到解决方案。
任何帮助将不胜感激!
因此,在我自己冒险几个小时而不是与 Microsoft 支持人员合作后,我终于通过完全巧合 + 猜测工作找出了错误的原因。
在 EAC 中查看证书主题的值时,我注意到当我单击主题字段时弹出一条消息说:
"In the subject of the certificate, the important value is the common
name (CN), which indicates the host that the certificate can be used
for."
我使用的 SSL 证书是多域证书,由于公用名最多只能包含一个条目,因此该证书使用了一个名为主题备用名称 (SAN) 的字段,该字段允许使用多个名称包括。因此主题中没有可用的 CN 字段。
Exchange 没有 read/use SAN 字段,并且由于缺少 CN 而没有接受命令(希望这在某处记录下来并且他们的支持人员也知道)。
解决方案是在命令中使用 TLSCertName 变量的内容,并手动将 CN 值添加到主题部分,如:
<S>CN=contoso.com, OU=Multi-Domain SSL, OU="Hosted by CONTOSO, INC.", O="CONTOSO, Inc."...
请记住,根据标准要求,CN 必须存在于 SAN 中。您可以在 https://support.dnsimple.com/articles/what-is-common-name/
中阅读更多相关信息
希望这对寻找相同问题答案的人有所帮助。
现在开始解决依赖于此的问题!
我已经花了 10 多个小时与 Microsoft 的支持人员一起配置我们的内部部署 Exchange 2016 服务器和 Azure AD 环境之间的混合设置,并且目前在尝试分配 TlsCertificateName 值时遇到错误(见下文)到本地接收连接器。
这些命令创建一个包含证书颁发者和主题值的变量 $TLSCertName:
$TLSCert = Get-ExchangeCertificate -Thumbprint <Thumbprint>
$TLSCertName = "<I>$($TLSCert.Issuer)<S>$($TLSCert.Subject)"
Set-ReceiveConnector "<Receive Connector Name" -TlsCertificateName $TLSCertName
尝试执行此命令时显示的错误是:
Cannot process argument transformation on parameter 'TlsCertificateName'. Cannot convert value "<TLSCertName>" to type "Microsoft.Exchange.Data.SmtpX509Identifier". Error:
""<TLSCertName>" isn't a valid Certificate Identifier."
+ CategoryInfo : InvalidData: (:) [Set-ReceiveConnector], ParameterBindin...mationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Set-ReceiveConnector
+ PSComputerName : <Server's FQDN>
Microsoft 认为问题是由证书主题中的某些包含引号的值引起的,即 OU="Hosted by CONTOSO, Inc."、O="CONTOSO, Inc.",从而导致命令截断TLSCertName 变量。
我试过手动输入参数而不是使用变量(带引号和不带引号)、使用单引号、转义引号 (`"),但没有任何效果。
有人遇到过这个问题吗?我曾尝试在线研究,但未能找到解决方案。
任何帮助将不胜感激!
因此,在我自己冒险几个小时而不是与 Microsoft 支持人员合作后,我终于通过完全巧合 + 猜测工作找出了错误的原因。
在 EAC 中查看证书主题的值时,我注意到当我单击主题字段时弹出一条消息说:
"In the subject of the certificate, the important value is the common name (CN), which indicates the host that the certificate can be used for."
我使用的 SSL 证书是多域证书,由于公用名最多只能包含一个条目,因此该证书使用了一个名为主题备用名称 (SAN) 的字段,该字段允许使用多个名称包括。因此主题中没有可用的 CN 字段。
Exchange 没有 read/use SAN 字段,并且由于缺少 CN 而没有接受命令(希望这在某处记录下来并且他们的支持人员也知道)。
解决方案是在命令中使用 TLSCertName 变量的内容,并手动将 CN 值添加到主题部分,如:
<S>CN=contoso.com, OU=Multi-Domain SSL, OU="Hosted by CONTOSO, INC.", O="CONTOSO, Inc."...
请记住,根据标准要求,CN 必须存在于 SAN 中。您可以在 https://support.dnsimple.com/articles/what-is-common-name/
中阅读更多相关信息希望这对寻找相同问题答案的人有所帮助。
现在开始解决依赖于此的问题!