我所在的一家小公司正在运行自托管的 Exchange Server 2010,我的工作是将该服务器迁移到 Exchange Server 2016,因为旧服务器已经很长时间没有支持了。
我知道 Exchange 2016 和 2010 可以共存,而且由于我们不能丢失电子邮件,所以我先做了一些测试。我在旧的 Exchange 服务器上创建了一个虚拟用户,创建了一个迁移作业并尝试访问它(但目标是在迁移完成后关闭旧服务器)。
邮件流(发送/接收外部/内部电子邮件 - 一切正常!)不是问题。
但我无法让 Outlook (2010) 客户端正常工作。请注意,我们仅在内部使用 Outlook - 在已加入域的计算机上,外部访问(当前)不是必需的。每当我将虚拟帐户添加到 Outlook 时,一切都会正常工作 - 但只要我关闭 Outlook 并再次打开它,Outlook 就无法再访问信息存储。通过内部 URL 访问虚拟邮件https://ex2016.domain.local/owa/
非常有效。
当我在添加虚拟电子邮件帐户后立即检查连接状态时,它显示那些 mapi over http 连接(据我所知,这是自 Exchange 2013 以来的默认访问方法)。我已经执行了自动发现测试,它成功了。
有一个证书警告,因为目前这是安装时的自签名证书。但我也尝试用颁发给真实域名的证书替换它,但这并没有什么不同。(即使我更改了证书和 URL,Outlook 仍然显示证书警告,我不知道为什么!)
但我怀疑证书问题与我的客户端问题有关。在我进行网络研究期间,我发现 Exchange 2016 服务器上存在一个错误,其中未启用 mapi 虚拟目录上的身份验证,这导致这些客户端连接失败。我检查了一下(我安装了 Exchange 2016 CU21),微软显然修复了该错误 - 在我的安装中,身份验证已经启用。
我现在真的迷茫了。任何关于哪里出错的提示都非常感谢!
更新信息
谢谢你的回复:关于 Outlook 版本,我仔细检查了一下,应该得到支持。
Microsoft Outlook 2010 (14.0.7268.5000) SP2 MSO (14.0.7268.5000)
关于证书警告:这是第一个警告(安全证书是由您未选择信任的公司颁发的。)。感谢您关于安装证书的提示,我不知道这种可能性。
真正奇怪的是,我点击了“安装”,选择为整个计算机安装,然后关闭 Outlook。重新打开 Outlook 后,出现了上述问题,一分钟后,再次出现了相同的证书警告,尽管我之前已经安装并点击了信任。我重复了该步骤,这次是针对本地用户,第二次重启后,一切开始正常工作!
为什么我必须安装两次证书? Outlook 仅连接到默认网站 ( ex2016.domain.local:443
),而不连接到 Exchange 后端 ( ex2016.domain.local:444
),对吗?
这是 powershell 脚本的结果(我删除了对旧 exchange 服务器的所有引用)
Transcript started, output file is C:\log.txt
C:\Windows\system32>
PS>Get-OabVirtualDirectory | fl Identity, server, *Auth*, InternalURL, ExternalURL
Identity : EX2016\OAB (Default Web Site)
Server : EX2016
BasicAuthentication : False
WindowsAuthentication : True
OAuthAuthentication : True
InternalAuthenticationMethods : {WindowsIntegrated, OAuth}
ExternalAuthenticationMethods : {WindowsIntegrated, OAuth}
InternalUrl : https://ex2016.domain.local/OAB
ExternalUrl :
C:\Windows\system32>
PS>Get-WebServicesVirtualDirectory | fl Identity, server, *Auth*, InternalURL, ExternalURL
Identity : EX2016\EWS (Default Web Site)
Server : EX2016
CertificateAuthentication :
InternalAuthenticationMethods : {Ntlm, WindowsIntegrated, WSSecurity, OAuth}
ExternalAuthenticationMethods : {Ntlm, WindowsIntegrated, WSSecurity, OAuth}
LiveIdNegotiateAuthentication :
WSSecurityAuthentication : True
LiveIdBasicAuthentication : False
BasicAuthentication : False
DigestAuthentication : False
WindowsAuthentication : True
OAuthAuthentication : True
AdfsAuthentication : False
InternalUrl : https://ex2016.domain.local/EWS/Exchange.asmx
ExternalUrl :
C:\Windows\system32>
PS>Get-OutlookAnywhere | fl Identity, server, *Auth*, InternalHostName, ExternalHostName
Identity : EX2016\Rpc (Default Web Site)
Server : EX2016
ExternalClientAuthenticationMethod : Negotiate
InternalClientAuthenticationMethod : Ntlm
IISAuthenticationMethods : {Basic, Ntlm, Negotiate}
InternalHostname : ex2016.domain.local
ExternalHostname :
C:\Windows\system32>
PS>Get-OwaVirtualDirectory | fl Identity, server, *Auth*, InternalURL, ExternalURL
Identity : EX2016\owa (Default Web Site)
Server : EX2016
ClientAuthCleanupLevel : High
InternalAuthenticationMethods : {Basic, Fba}
BasicAuthentication : True
WindowsAuthentication : True
DigestAuthentication : False
FormsAuthentication : True
LiveIdAuthentication : False
AdfsAuthentication : False
OAuthAuthentication : False
ExternalAuthenticationMethods : {Fba}
InternalUrl : https://ex2016.domain.local/owa
ExternalUrl :
C:\Windows\system32>
PS>Get-ClientAccessServer | fl Identity, Name, AutodiscoverServiceInternalUri
Identity : EX2016
Name : EX2016
AutoDiscoverServiceInternalUri : https://ex2016.domain.local/Autodiscover/Autodiscover.xml
C:\Windows\system32>
PS>Get-EcpVirtualDirectory| fl Identity, server, *Auth*, InternalURL, ExternalURL
Identity : EX2016\ecp (Default Web Site)
Server : EX2016
InternalAuthenticationMethods : {Basic, Fba}
BasicAuthentication : True
WindowsAuthentication : True
DigestAuthentication : False
FormsAuthentication : True
LiveIdAuthentication : False
AdfsAuthentication : False
OAuthAuthentication : False
ExternalAuthenticationMethods : {Fba}
InternalUrl : https://ex2016.domain.local/ecp
ExternalUrl :
C:\Windows\system32>
PS>Get-ActiveSyncVirtualDirectory | fl Identity, server, *Auth*, InternalURL, ExternalURL
Identity : EX2016\Microsoft-Server-ActiveSync (Default Web Site)
Server : EX2016
MobileClientCertificateAuthorityURL :
BasicAuthEnabled : True
WindowsAuthEnabled : False
ClientCertAuth : Ignore
InternalAuthenticationMethods : {}
ExternalAuthenticationMethods : {}
InternalUrl : https://ex2016.domain.local/Microsoft-Server-ActiveSync
ExternalUrl :
C:\Windows\system32>
PS>Get-MapiVirtualDirectory | fl Identity, server, *Auth*, InternalURL, ExternalURL
Identity : EX2016\mapi (Default Web Site)
Server : EX2016
IISAuthenticationMethods : {Ntlm, OAuth, Kerberos, Negotiate}
InternalAuthenticationMethods : {Ntlm, OAuth, Kerberos, Negotiate}
ExternalAuthenticationMethods : {Ntlm, OAuth, Kerberos, Negotiate}
InternalUrl : https://ex2016.domain.local/mapi
ExternalUrl : https://ex2016.domain.local/mapi
C:\Windows\system32>
PS>Get-PowerShellVirtualDirectory | fl Identity, server, *Auth*, InternalURL, ExternalURL
Identity : EX2016\PowerShell (Default Web Site)
Server : EX2016
CertificateAuthentication : True
InternalAuthenticationMethods : {}
ExternalAuthenticationMethods : {}
LiveIdNegotiateAuthentication : False
WSSecurityAuthentication : False
LiveIdBasicAuthentication : False
BasicAuthentication : False
DigestAuthentication : False
WindowsAuthentication : False
OAuthAuthentication : False
AdfsAuthentication : False
InternalUrl : http://ex2016.domain.local/powershell
ExternalUrl :
C:\Windows\system32>
PS>Get-ExchangeCertificate | fl Identity, FriendlyName, Subject, CertificateDomains, Services, Issuer, *not*, Status
Identity : EX2016.domain.local\xxxx_Cert_1_xxxx
FriendlyName : Microsoft Exchange Server Auth Certificate
Subject : CN=Microsoft Exchange Server Auth Certificate
CertificateDomains : {}
Services : SMTP
Issuer : CN=Microsoft Exchange Server Auth Certificate
NotAfter : 10.09.2026 15:12:39
NotBefore : 06.10.2021 15:12:39
Status : Valid
Identity : EX2016.domain.local\xxxx_Cert_2_xxxx
FriendlyName : Microsoft Exchange
Subject : CN=EX2016
CertificateDomains : {EX2016, EX2016.domain.local}
Services : IIS, SMTP
Issuer : CN=EX2016
NotAfter : 06.10.2026 15:11:29
NotBefore : 06.10.2021 15:11:29
Status : Valid
Identity : EX2016.domain.local\xxxx_Cert_3_xxxx
FriendlyName : WMSVC-SHA2
Subject : CN=WMSvc-SHA2-EX2016
CertificateDomains : {WMSvc-SHA2-EX2016}
Services : None
Issuer : CN=WMSvc-SHA2-EX2016
NotAfter : 04.10.2031 12:32:50
NotBefore : 06.10.2021 12:32:50
Status : Valid
Identity : EX2016.domain.local\xxxx_Cert_4_xxxx
FriendlyName : real.domain.org (rapidssl rsa ca 2018)
Subject : CN=real.domain.org
CertificateDomains : {real.domain.org}
Services : IMAP, POP, SMTP
Issuer : CN=RapidSSL RSA CA 2018, OU=www.digicert.com, O=DigiCert Inc, C=US
NotAfter : 05.11.2021 13:00:00
NotBefore : 07.10.2019 02:00:00
Status : RevocationCheckFailure
C:\Windows\system32>
PS>Get-OrganizationConfig | fl MapiHttpEnabled
MapiHttpEnabled : True
C:\Windows\system32>
PS>Get-CasMailbox -Identity Dummy.User | fl MapiHttpEnabled
MapiHttpEnabled :
C:\Windows\system32>
PS>Stop-Transcript
答案1
每当我将虚拟帐户添加到 Outlook 时,一切都会正常工作 - 但一旦我关闭 Outlook 并再次打开它,Outlook 就无法再访问信息存储。当我在添加虚拟电子邮件帐户后立即检查连接状态时,它显示那些 mapi over http 连接
确保您的 Outlook 版本是最新的且受支持:对 Mapi over HTTP 的支持。
同时,尝试为您的邮箱创建一个新的配置文件,看看是否有任何区别。
有一个证书警告,因为当前这是来自安装的自签名证书。
证书警告的描述是什么?
Outlook 中常见的证书警告如下:
1 -The security certificate was issued by a company you have not chosen to trust.
如果您使用的是 IIS 自签名证书,该证书将不会自动添加到受信任的根证书存储区,您应该通过单击按钮“查看证书“ 和 ”安装证书“对您的客户。
有关自签名证书的更多详细信息:自签名证书
2 -The security certificate has expired or is not yet valid.
点击 ”查看证书“并查看其有效时间,如果已过期,请更新并重新启动IIS。
3 -The name on the security certificate is invalid or does not match the name of the site.
此警告通常与虚拟目录/服务(例如 MAPI、Outlook Anywhere、SCP)的内部/外部主机名以及证书中包含的域名有关。
请运行以下命令,查看配置是否正确(-Identity
请使用您的邮箱身份更改cmdlet参数的值Get-CasMailbox
,并且不要忘记更改任何敏感信息。):
Start-Transcript -Path C:\log.txt
Get-OabVirtualDirectory | fl Identity, server, *Auth*, InternalURL, ExternalURL
Get-WebServicesVirtualDirectory | fl Identity, server, *Auth*, InternalURL, ExternalURL
Get-OutlookAnywhere | fl Identity, server, *Auth*, InternalHostName, ExternalHostName
Get-OwaVirtualDirectory | fl Identity, server, *Auth*, InternalURL, ExternalURL
Get-ClientAccessServer | fl Identity, Name, AutodiscoverServiceInternalUri
Get-EcpVirtualDirectory| fl Identity, server, *Auth*, InternalURL, ExternalURL
Get-ActiveSyncVirtualDirectory | fl Identity, server, *Auth*, InternalURL, ExternalURL
Get-MapiVirtualDirectory | fl Identity, server, *Auth*, InternalURL, ExternalURL
Get-PowerShellVirtualDirectory | fl Identity, server, *Auth*, InternalURL, ExternalURL
Get-ExchangeCertificate | fl Identity, FriendlyName, Subject, CertificateDomains, Services, Issuer, *not*, Status
Get-OrganizationConfig | fl MapiHttpEnabled
Get-CasMailbox -Identity <User> | fl MapiHttpEnabled
Stop-Transcript