环境简介
Exchange 2013服务器位于ad域中,系统为Windows server 2012 R2,其内部域名为:
mail.ad.com
一. Exchange客户端无法在浏览器中正常运行
在域中部署Exchange服务器后,除了可以通过outlook、foxmail等邮件客户端来使用邮箱功能,也可以直接通过浏览器来访问。
对于普通邮件收发,访问地址为owa:
https://mail.ad.com/owa
对于邮箱后台管理,访问地址为ecp:
https://mail.ad.com/ecp
以我的经验,曾经部署过几次Exchange服务器,都遇到同样的问题。那就是Exchange服务器刚部署完毕的时候,一切正常,但在没有变更过Exchange服务器配置的情况下,经过若干时间后,通过浏览器访问Exchange将会出现异常,表现为:
a. ecp可以通过浏览器正常访问;
b. owa无法通过浏览器正常访问,owa页面能够正常显示登录界面,但是在执行登录动作之后,浏览器一直处于loading状态,或者空白页、或者404,不同浏览器表现会有差异。
并且这一表现不是绝对的,owa在IE浏览器、以及某些版本的Firefox浏览器中运行正常,在Edge、Chrome等大多数浏览器中会出现上面描述的问题,但在极低的概率下也能正常运行。
c. outlook、foxmail等使用邮箱功能正常。
由于公司成员都是通过outlook、foxmail等邮件客户端来访问exchange,因此这一问题被我忽略。
如今,有了通过浏览器访问exchange的需求,便需要查一下究竟。在不能正常访问exchange的浏览器中,通过浏览器的开发者工具查看控制台,会看到如下报错:
GET /owa/auth/errorfe.aspxowaError=ClientError;exMsg=Sys.InvalidOperationException: You are trying to getan instance of the UserConfiguration object before it is loaded from theserver!
1. 问题原因
Exchange与大多数较新的浏览器不兼容,只能运行于IE等老旧的浏览器中。
https://cloudblue.freshdesk.com/support/solutions/articles/44001884197-exchange-2013-error-404-after-successful-login-into-owa-
2. 解决办法
安装必要的Exchange更新。
3. Exchange的内部版本号
Exchange Server 内部版本号和发行日期可在以下地址查询:
https://learn.microsoft.com/zh-cn/exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019
3.1 查看Exchange版本
若要查看您正在运行的 Exchange 2013 版本的内部版本号,请在 Exchange 命令行管理程序中运行以下命令:
Get-ExchangeServer | flname,edition,admindisplayversion
例如,我直接部署的Exchange服务器,通过命令输出对比微软官方的版本列表,其版本为:
Exchange Server 2013 CU3
2013 年 11 月 25 日
15.0.775.38
15.00.0775.038
而较新的Exchange 2013版本则为:
Exchange Server 2013 CU23
2019 年 6 月 18 日
15.0.1497.2
15.00.1497.002
显然,有必要升级一下Exchange服务器了。
4. Exchange升级步骤
4.1. 下载Exchange Server 2013 CU23累计升级安装包
下载地址即在微软提供的Exchange Server内部版本号和发行日期列表中:
https://www.microsoft.com/en-us/download/details.aspx?id=58392
4.2. 运行CU23升级安装包
在Exchange服务器上直接运行CU23升级安装包,安装程序会首先检查服务器是否满足安装的先决条件,当然通常都是不满足的了,这时就根据提示一一操作以使得服务器满足升级包的安装条件,以下步骤就是通常需要做的。
a. 安装Windows Server 2012 R2 Update(KB2919355)
下载地址:
https://www.microsoft.com/zh-CN/download/details.aspx?id=42334
版本:
2919355
包含以下文件:
clearcompressionflag.exe
Windows8.1-KB2919355-x64.msu
Windows8.1-KB2932046-x64.msu
Windows8.1-KB2934018-x64.msu
Windows8.1-KB2937592-x64.msu
Windows8.1-KB2938439-x64.msu
Windows8.1-KB2959977-x64.msu
你没有看错,这些补丁包的名称的确写的是Windows8.1。
这些 KB 必须按以下顺序安装:clearcompressionflag.exe、KB2919355、KB2932046、KB2959977、KB2937592、KB2938439、KB2934018。
在安装最重要的KB2919355补丁包时,你可能会安装失败,收到提示:
该补丁包不适用于当前系统。
这是因为KB2919442 是Windows Server 2012 R2 更新的先决条件,需要先安装KB2919442,然后才能安装KB2919355。
KB2919442下载地址:
https://www.microsoft.com/zh-CN/download/details.aspx?id=42162
先安装之,再重新执行KB2919355的安装,补丁安装过程中需要多次重启。
b. 安装Microsoft .NET Framework4.7.2
下载地址:
https://support.microsoft.com/zh-cn/topic/%E9%80%82%E7%94%A8%E4%BA%8E-net-framework%E7%9A%84-microsoft-windows-4-7-2-%E8%84%B1%E6%9C%BA%E5%AE%89%E8%A3%85%E7%A8%8B%E5%BA%8F-05a72734-2127-a15d-50cf-daf56d5faec2
c. 安装Visual C++ RedistributablePackages for Visual Studio 2013
下载地址:
https://www.microsoft.com/zh-CN/download/details.aspx?id=40784
d. 在满足安装CU23的所有先决条件后,重新运行CU23安装程序
二. Exchange更新后ECP和OWA无法正常使用
在完成Exchange升级后,重新在浏览器中访问ECP和OWA,GG~
OWA登录后一直loading的问题确实没有了,但是现在变成了HTTP 500错误,更要命的是,ECP也不能访问了,同样是HTTP 500错误。
1. 问题原因和解决办法
在Exchange升级之后,一些服务器配置可能会过时,不再正确,这就需要手动更新校正这些配置文件。Exchange已经提供了PowerShell脚本修复工具:
UpdateConfigFiles.ps1
UpdateCAS.ps1
这两个脚本位于Exchange Server的安装目录之下:
C:\Program Files\Microsoft\ExchangeServer\V15\Bin\
在Exchange服务器上,以管理员身份运行Exchange Management Shell工具,cd到Exchange Server的BIN目录,并执行修复脚本:
cd “C:\Program Files\Microsoft\ExchangeServer\V15\Bin\”
.\UpdateConfigFiles.ps1
.\UpdateCAS.ps1
然后重启Exchange服务器即可。
三. Exchange变更域名
在过去,Exchange一直使用内部域名:
mail.ad.com
来提供服务,其SSL证书也是自签名证书,需要手动信任。接下来我们的需求是将其域名改为外部经过工信部备案的域名:
mail.outer.com
并且使用匹配该域名的权威SSL证书,以使得Exchange更好地满足疫情期间居家办公的需求。
操作步骤比较多,后文将详细介绍。
1. 申请权威ssl证书
在域名对应的外网nginx服务器上,为该域名申请证书,这很容易办到。例如,我们利用acme.sh等工具,可以申请到zeroSSL等免费ssl证书。申请到的证书两个部分,即公钥证书以及私钥,对应两个文件,如:
证书:mail.outer.com.fullchain.cer
私钥:mail.outer.com.key
2. 转换证书格式
在外网申请到的证书格式为cer,仅包含公钥,私钥独立保存为单独的key文件,而Exchange和iis服务器接受的ssl证书要求将证书公钥和私钥打包为单独一个文件。这里通过openssl工具将cer证书与key文件合并为一个pfx文件,命令如下:
openssl pkcs12 -export -out C:\mail.pfx -inkey C:\mail.key -in C:\mail.cer
在导出pfx文件时需要设置一个导出密码,以为该文件提供基本的保护,后续在使用该pfx文件时,将需要提供该密码。
3. 导入证书
在获得证书的pfx文件后,接下来便是导入证书。
根据操作顺序,在导入证书的操作上,有两种方式:
a.先为exchange导入证书,再为iis服务器导入证书,在此操作顺序下,可将证书文件以smb共享文件的方式,直接在Exchange的管理后台ecp中执行导入。
b.先为iis配置证书绑定,再为exchange配置证书,在此操作顺序下,需先将证书导入服务器的证书管理单元,再供后续使用。
下文将对两种证书导入方式分别介绍。
3.1. 通过证书管理单元导入证书
Exchange依靠iis来提供web服务,iis服务器控制界面无法直接为iis服务器导入证书,因为iis服务器控制界面只提供了在本机选择证书的功能。因此,我们首先需要在iis所在服务器的证书控制单元上导入证书,具体即是在iis所在服务器上执行以下操作。
注意:在证书控制单元也可以直接导入cer证书,但是由于cer证书不包含私钥,因此无法提供给iis使用。
a. 打开Windows服务器控制台
开始 > 运行 > 输入mmc,打开Windows服务器控制台(MMC,MicrosoftManagement Console)。
b. 在控制台添加证书管理单元
如果控制台中不包含证书管理单元,则在控制台的顶部菜单栏,选择文件 > 添加/删除管理单元,为本地计算机添加证书管理单元。
在证书管理单元对话框,选择计算机账户,单击下一步。
在选择计算机对话框,选择本地计算机(运行此控制台的计算机),单击完成。
在添加或删除管理单元对话框,单击确定。
c. 在证书管理单元中导入证书
在控制台左侧导航栏,展开控制台根节点 > 证书(本地计算机) > 个人 > 证书,然后打开右键菜单,选择所有任务 > 导入。
使用证书导入向导:单击下一步。
要导入的文件对话框:单击浏览,选择pfx格式的证书文件,单击下一步。注意,在打开文件时,可能需要将文件过滤类型设置为所有文件(*),然后再选择pfx证书文件。
私钥保护:输入我们在使用openssl转换cer文件为pfx文件时提供的导出密码。
证书存储:选中根据证书类型,自动选择证书存储,单击下一步。
正在完成证书导入向导:单击完成。
收到导入成功提示后,单击确定。
3.2. 通过Exchange ecp导入证书
a. 共享证书文件
将证书文件mail.pfx放置于域中任意共享的smb目录。
b. 在ecp中执行证书导入
以管理员身份登录Exchange ECP,选择:
服务器 > 证书 > … > 导入证书
填写证书的共享路径中
输入证书的保护密码
即可完成证书导入。
3.3.补充说明
结合后文即将介绍的绑定证书的操作来看,在通过证书管理单元导入证书,并为iis配置证书绑定后,exchange ecp可能能够自动识别到新的证书,从而在exchange ecp中,不必再执行证书导入。
同样地,如果已经在exchange ecp中执行了证书导入,并且分配给了iis服务,则证书管理单元的证书导入操作也就可以省略。
以上证书问题需要操作确认,如果以其中一种方式导入的证书,在另一种方式中没有自动识别的话,分别以两种方式执行导入即可。
4. 绑定证书
4.1. Exchange证书服务分配
完成证书导入后,可分别为Exchange服务器,以及为Exchange服务器服务的iis服务器绑定证书。
以管理员身份登录exchange ecp:
服务器 > 证书 > 选中新导入的证书
配置之,如下所示为各项邮箱服务分配此证书。
4.2. 修改Exchange虚拟目录域名
服务器 > 虚拟目录
依此选择各项服务,将各项服务绑定的域名修改为新域名。
4.3. 修改Outlook Anywhere域名
服务器 > 选择对应Exchange服务器 > Outlook Anywhere
修改Outlook Anywhere域名。
4.4. 修改Exchange AutoDiscover域名
Exchange自动发现服务用来实现域中outlook等客户端的自动化配置,但是其域名无法直接在ecp中查看、修改,其配置需借助PowerShell。
a.查看AutoDiscover域名
在Exchange Management Shell 中执行PowerShell命令Set-ClientAccessServer,查看AutoDiscover域名:
Get-ClientAccessServer| Format-List
b. 修改AutoDiscover域名
在Exchange Management Shell 中执行PowerShell命令Set-ClientAccessServer,修改AutoDiscover域名:
Set-ClientAccessServer-Identity mail.ad.com -AutoDiscoverServiceInternalUri "https:
//mail.outer.com/autodiscover/autodiscover.xml"
5. iis证书绑定
通过iis控制界面,为iis服务器上的Exchange站点绑定证书。
iis中为Exchange服务的站点有两个:
DefaultWeb Site
ExchangeBack End
分别为这两个站点的https服务绑定新的证书即可。需要补充说明的是,这两个站点已经默认包含通配符域名的https服务,分别为:
DefaultWeb Site:https://*:443
ExchangeBack End:https://*:444
新的证书绑定到这两个通配符域名即可,不要为这两个站点再绑定新的域名,否则可能造成Exchange不能正常服务。例如,如果另外为Exchange Back End绑定新域名:
https://mail.outer.com:444
则我们在使用ecp和owa时,将会遇到一些异常,例如能够正常登录,但是具体功能性响应错误等,暂时不知道原因。
6. 验证域名变更
6.1. 通过Exchange自动发现服务验证域名调整
自动发现服务能够帮助邮箱客户端识别到Exchange服务器的调整,并更新客户端的配置。
在outlook的任务栏小图标上,按住ctrl健,并右键单击之,可激活隐藏选项:
测试电子邮件自动配置
选择之打开测试窗口,执行自动发现测试,查看Exchange返回的结果和日志,检查其中涉及的域名是否已变更为新的域名。