Exchange2010 升級SP3&RU32、啟用 TLS 1.2 實戰紀錄

本文記錄Exchange2010 的維護過程。
Exchange 2010 SP1 ->updatepack->SP3  → RU32 → TLS 1.2

前置環境檢查
Windows Server 2008 R2 SP1,
Exchange 2010 SP1
.NET Framework 4.8。
schannel版本是6.1.7601.28116
Visual C++ 2013 Runtime

本次維護的主要目的是將 Exchange 2010 更新至最後版本,
並加入 TLS 1.2 支援,同時保留 TLS 1.0,以維持舊系統與舊 Client 的相容性。


一、環境確認

開始施工前,先確認 Exchange Server 的角色及版本:

Get-ExchangeServer | fl Name,ServerRole,AdminDisplayVersion

確認實際 Exchange Build

單純查看 AdminDisplayVersion 不適合用來確認 Update Rollup,
因此可透過powershell直接查看 ExSetup.exe:

Get-Command ExSetup | ForEach {$_.FileVersionInfo} |
Format-List ProductVersion,FileVersion,FileName

確認schannel版本 可透過powershell直接查看指令如下

(Get-Item C:\Windows\System32\schannel.dll).VersionInfo.FileVersion 

二、取得相關套件

建議直接由官網取得最新版本

Exchange2010-SP3-x64

Exchange Server 2010 SP3 Update Rollup 32

Visual C++ 2013 Runtime

UPdatepack


三、安裝順序

這次遇到的為集群環境分別是CAS2台,DB一台做DAG 的 Witness Server,後面再接兩台DB互相抄寫

DAG 環境應先確認:

  • Active / Passive Database Copy 所在節點。
  • Database Copy Status。
  • Copy Queue Length / Replay Queue Length。
  • DAG Witness 狀態。
  • Database Activation Policy。
  • CAS / Load Balancer 狀態。

升級順序分別為CAS2台輪流升級結束後,做witness的DB先升級,接著passive所屬的db server升級,最後切換再將最後一台DB升級

windows環境建議先安裝好,再執行sp3與RU32 安裝。

若該環境為單機環境,也是建議先將windows環境建置好後再進行exchange更新

四、確認 RU32 Build

(Get-Command ExSetup).FileVersionInfo |
fl ProductVersion,FileVersion

結果應為:

14.03.0513.000

即:

Exchange Server 2010 SP3 RU32
Build 14.3.513.0

五、RU32 後確認 Database 與服務

Get-MailboxDatabase -Status |
ft Name,Mounted

確認所有 Mailbox Database:

Mounted = True

確認 Exchange 自動啟動服務:

Get-Service MSExchange* |
? {$_.StartType -eq "Automatic"} |
ft Name,Status

六、問題紀錄:MSExchangeRPC 無法啟動

RU32 安裝完成並重新啟動後,
其他 Exchange Service、Mailbox Database 及 Mail Flow 均正常,
但發現:

Microsoft Exchange RPC Client Access
MSExchangeRPC

無法正常啟動。

手動執行:

Start-Service MSExchangeRPC

服務啟動失敗。

Event Viewer → Windows Logs → Application 出現:

Source : MSExchangeRPC
EventID : 1005

無法啟動 Microsoft Exchange RPC 服務,
因為已有其他處理程序登錄 EMSMDB 介面。

確認 Windows RPC

Get-Service RpcSs,RpcEptMapper |
ft Name,Status,StartType

兩項均正常:

RpcEptMapper Running
RpcSs Running

因此問題不是 Windows RPC Service 本身。


七、解決 EMSMDB / MSExchangeRPC 啟動衝突

檢查 Exchange Process:

tasklist /svc | findstr /i "MSExchange"

發現 Microsoft Exchange Information Store:

store.exe MSExchangeIS

已經先啟動,而 MSExchangeRPC 無法註冊 EMSMDB Interface。

測試以下順序:

Stop-Service MSExchangeIS

Start-Service MSExchangeRPC

Start-Service MSExchangeIS

結果:

MSExchangeRPC Running
MSExchangeIS Running

Mailbox Database 重新 Mounted,
Outlook 也恢復正常。

永久處理:Information Store 延遲啟動

再次重新啟動 Server 後,同樣的 EMSMDB 衝突再次發生,
確認並非單次 RU32 更新後的偶發問題。

因此將 Microsoft Exchange Information Store 改成
Automatic (Delayed Start):

sc.exe config MSExchangeIS start= delayed-auto

確認:

sc.exe qc MSExchangeIS

如此可讓 MSExchangeRPC 先完成 EMSMDB Interface 註冊,
Information Store 稍後再啟動。

若需要恢復原設定:

sc.exe config MSExchangeIS start= auto

修改後再次重新啟動 Server,
MSExchangeRPC 與 MSExchangeIS 均能自動正常啟動,
不再需要人工 Stop / Start Service。


八、確認 .NET Framework

查看目前 .NET Framework 版本:

Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' |
Select Release,Version

結果:

Release : 528049
Version : 4.8.03761

系統已安裝 .NET Framework 4.8,
因此不需要另外安裝 .NET Framework 4.7 / 4.7.2。


九、啟用 TLS 1.2

本次目標是:

  • 啟用 TLS 1.2。
  • 讓 .NET 使用 Windows Schannel 的 TLS 設定。
  • 保留 TLS 1.0 相容性。
  • 不主動停用 TLS 1.0。

先備份 Registry

reg export "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL" C:\SCHANNEL-before-TLS12.reg

reg export "HKLM\SOFTWARE\Microsoft\.NETFramework" C:\NETFramework-before-TLS12.reg

十、設定 Schannel TLS 1.2

以 Administrator PowerShell 執行:

New-Item "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2" -Force | Out-Null

New-Item "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -Force | Out-Null

New-Item "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -Force | Out-Null

New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -Name Enabled -Value 1 -PropertyType DWORD -Force

New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -Name DisabledByDefault -Value 0 -PropertyType DWORD -Force

New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -Name Enabled -Value 1 -PropertyType DWORD -Force

New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -Name DisabledByDefault -Value 0 -PropertyType DWORD -Force

最後應為:

TLS 1.2\Client
Enabled = 1
DisabledByDefault = 0

TLS 1.2\Server
Enabled = 1
DisabledByDefault = 0

本次沒有修改 TLS 1.0 Client / Server Registry,
因此既有 TLS 1.0 支援維持原狀。


十一、設定 .NET Framework TLS

.NET 2.0 / 3.5

Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\.NETFramework\v2.0.50727" -Name SystemDefaultTlsVersions -Value 1 -Type DWord

Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\.NETFramework\v2.0.50727" -Name SchUseStrongCrypto -Value 1 -Type DWord

Set-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727" -Name SystemDefaultTlsVersions -Value 1 -Type DWord

Set-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727" -Name SchUseStrongCrypto -Value 1 -Type DWord

.NET 4.x

Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319" -Name SystemDefaultTlsVersions -Value 1 -Type DWord

Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319" -Name SchUseStrongCrypto -Value 1 -Type DWord

Set-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319" -Name SystemDefaultTlsVersions -Value 1 -Type DWord

Set-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319" -Name SchUseStrongCrypto -Value 1 -Type DWord

十二、確認 TLS Registry

Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client"

Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server"

確認:

Enabled : 1
DisabledByDefault : 0

檢查 .NET:

$paths = @(
"HKLM:\SOFTWARE\Microsoft\.NETFramework\v2.0.50727",
"HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727",
"HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319",
"HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319"
)

foreach ($p in $paths) {
Get-ItemProperty $p |
Select @{N="Path";E={$p}},SystemDefaultTlsVersions,SchUseStrongCrypto
}

四組均應為:

SystemDefaultTlsVersions : 1
SchUseStrongCrypto : 1

十三、重新啟動 Server

重新啟動後等待 Exchange Service 與 Mailbox Database 完整啟動。

確認:

Get-Service MSExchangeRPC,MSExchangeIS |
ft Name,Status,StartType

Get-MailboxDatabase -Status |
ft Name,Mounted

預期:

MSExchangeRPC Running
MSExchangeIS Running
Mailbox DB Mounted = True

十四、檢查 Schannel Event

Get-EventLog System -Newest 100 |
Where-Object {$_.Source -eq "Schannel"} |
ft TimeGenerated,EventID,EntryType,Message -Auto

若沒有持續大量 TLS / Schannel Error,
且實際 Client、SMTP、OWA 均正常,
即可持續觀察。

Add a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *