前言

做資安弱點掃描,最常踩到的地雷之一就是 SSL/TLS 設定。掃描報告跳出一堆「Server supports TLS 1.0」、「Weak cipher suite detected」,修法不外乎就是去翻 Windows 登錄檔——路徑又長,改錯一個值可能把整台伺服器的 HTTPS 搞壞。

IISCrypto 是 Nartac Software 做的免費工具,把這些作業全包進圖形介面,幾分鐘內就能把 TLS 設定從滿江紅改成合規狀態。

什麼是 IISCrypto?

IISCrypto 是 Windows 伺服器上的 SSL/TLS 設定管理工具。它底層還是在改 Windows 登錄檔,但省掉你自己找路徑、手動調值的過程。主要能操控三件事:啟用或停用哪些加密協定、調整加密套件(cipher suite)的優先順序、設定簽章演算法的選項。

系統需求:Windows Server 2012 或以上、本機管理員權限、.NET Framework 4.6.2 或以上。

為什麼用它?

PCI DSS 合規需求

PCI DSS v4.0 要求停用 SSL 和 early TLS(也就是 TLS 1.0、TLS 1.1),傳輸持卡人資料時最低必須用 TLS 1.2。

這裡有個常被誤解的邊界:規範不是說 TLS 1.0/1.1「絕對不能存在」,而是給了少數例外。最典型的是 POI(Point of Interaction,刷卡端點)設備——如果經過評估確認不受已知漏洞影響,並備齊正式的風險緩解文件,舊版協定還是可以保留。對一般的 IIS 網站伺服器來說沒有這個例外,乖乖停用就對了。

至於 TLS 1.3,v4.0 沒把它列為強制項目,但官方文件明顯在鼓勵新部署優先採用。換句話說它不是「可有可無」,而是「現在能上就上」。

弱點掃描的常見項目

Qualys SSL Labs、Acunetix、Nessus 這類工具都會掃下面這些:

  • 伺服器是否還接受 SSL 2.0 / 3.0 連線
  • 是否允許 TLS 1.0 / 1.1
  • 是否使用 RC4、3DES、MD5 等弱式加密套件
  • 加密套件的優先順序是否正確(forward secrecy 排前面)

順帶把幾個常被掃出來的歷史漏洞講清楚,免得修了還搞不懂在修什麼。POODLE(CVE-2014-3566)打的是 SSL 3.0 的 CBC padding,當年直接把 SSL 3.0 判了死刑。BEAST 則是 SSL 3.0 與 TLS 1.0 的 CBC 問題,TLS 1.0 是主要受害者。這兩個都跟 CBC 模式有關,但攻擊面不完全重疊——TLS 1.1 本身既不是 POODLE 也不是 BEAST 的主要目標,停用它更多是因為它已經過時、缺乏現代加密套件支援,不是因為這兩個漏洞。

這些項目用 IISCrypto 的 Best Practices 範本大多能一次解決,但有兩點要注意:一是 IISCrypto 3.3 起另外提供 PCI 4.0 範本,比 Best Practices 更嚴格地排除 RSA 金鑰交換與 SHA-1 套件,若掃描標準明確依循 PCI DSS v4.0,建議改用 PCI 4.0 範本確認結果;二是 Windows Server 2012/2012R2 上套用 Best Practices 後,清單裡可能仍保留少數 RSA 金鑰交換套件(詳見下方說明),這時 PCI 4.0 範本才能真正清乾淨。

比手動改可靠在哪?

手動改要去這個路徑:HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\,每個協定底下還分 Client 和 Server,要改 EnabledDisabledByDefault 兩個值。寫錯一個,行為會跟預期不一樣,卻不一定報錯——這種沉默的錯最難查。

IISCrypto 把這些封裝成勾選方塊,套用前還能備份目前的登錄檔,改壞了一鍵還原。

Best Practices 按鈕到底做了什麼?

這是大多數人最常用的功能,但很少文章說清楚它實際套什麼。Best Practices 範本的行為大致是這樣:

停用的協定

  • SSL 2.0
  • SSL 3.0
  • TLS 1.0
  • TLS 1.1
  • PCT 1.0(很老的 Microsoft 專有協定)

啟用的協定

  • TLS 1.2
  • TLS 1.3(需 Windows Server 2022 或以上,舊版 Windows 即使勾了也不會生效)

加密套件:以 forward secrecy 的套件(ECDHE、DHE 開頭)優先排序,搭配 SHA-256 以上的雜湊。RC4、3DES、DES、NULL cipher 與 MD5、SHA-1 的套件會被移除。

這裡要提醒一點:不同 Windows 版本的 Best Practices 結果不完全一樣。Windows Server 2012/2012R2 上,作業系統本身支援的加密套件較有限,IISCrypto 為了維持向下相容,套用 Best Practices 後清單裡可能還留著少數非 forward-secrecy 的 RSA 金鑰交換套件(TLS_RSA_WITH_AES_*),甚至夾帶 SHA-1 套件;若要完全排除這類套件,需改用 PCI 4.0 範本。Windows Server 2016 及以上因原生 Schannel 已支援完整的 ECDHE 套件集,套用 Best Practices 後通常不會保留非 forward-secrecy 的 RSA 套件,不在同一個問題範疇內。所以別預期所有機器套完都長得一模一樣,套用後實際的清單要以該機器掃描結果為準。

完整的 cipher suite 清單與順序可在官方 FAQ 查到:nartac.com/Products/IISCrypto/FAQ

對生產環境來說,套用前建議先在開發或測試伺服器驗一輪,確認你的應用程式在純 TLS 1.2+ 環境下跑得起來——特別是有接舊版 .NET Framework(4.5 以前)或 Java 6/7 的情況,這些版本預設不一定開 TLS 1.2。

使用步驟

1. 下載

至官方網站下載最新版:nartac.com/Products/IISCrypto/Download

GUI 版和 CLI 版是分開的安裝檔。一般伺服器設定用 GUI 就夠,CI/CD 或批次佈署場景再考慮 CLI。

2. 備份目前設定

套用任何變更前先備份,這步不能省。如果你裝的是 CLI 版,它的 /backup 旗標會把目前的登錄檔設定存成 .reg 檔:

1
2
3
4
5
# IISCryptoCli 的備份語法(需另外下載 CLI 版本)
IISCryptoCli.exe /backup C:\Backup\ssl-before-changes.reg

# 不想依賴 IISCrypto 的話,直接用 reg export 備份整段 SCHANNEL 路徑也行
reg export "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL" C:\Backup\schannel-backup.reg

兩種都行,reg export 的好處是跟工具版本無關,純靠 Windows 內建指令,照抄不會遇到參數對不上的問題。GUI 版另外有內建的 Template > Export 功能,可以把目前設定存成 .ictpl 範本檔。

3. 套用 Best Practices

開啟 IISCrypto GUI,點「Best Practices」按鈕,右側的勾選狀態會立刻預覽套用後的結果。確認沒問題後按「Apply」。

想更細調的話也可以手動勾選,不一定要用內建範本——例如只想停用 TLS 1.0/1.1、但保留某些 cipher suite,自己勾就好。

4. 重新啟動伺服器

SCHANNEL 的變更需要完整重啟才會生效,重啟 IIS 不夠。建議安排在維護時段,並先確認失敗回退計畫:備份已存好、KVM/IPMI 或遠端主控台可用。

1
2
# 確認真的需要重啟、也確認回退管道沒問題後再執行
Restart-Computer -Force

5. 驗證結果

重啟後用 Qualys SSL Labs 掃一次:ssllabs.com/ssltest/

正常套用 Best Practices 後,TLS 1.0/1.1 和弱式加密的項目會從報告消失,評分通常能到 A 或 A+。實際等級還取決於憑證設定、HSTS 等其他因素,別把分數全歸功於 IISCrypto。

常見踩坑

舊版應用程式相容性

停用 TLS 1.0/1.1 後,如果系統上還跑著用舊版 .NET(4.5 以前)寫的應用程式,可能會出現 SSL 連線失敗。解法是在該應用程式的設定加上強制走 TLS 1.2:

1
2
3
4
<!-- app.config 或 web.config -->
<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>

這個 switch 的命名是雙重否定,第一次看很容易看反。DontEnableSchUseStrongCrypto 設成 false,意思是「不要停用強式加密」,等於把強式加密打開——也就是讓 .NET 走 TLS 1.2/1.3、擋掉不安全的協定。設成 true 才是反過來把它關掉。

還要補一句版本差異:.NET Framework 4.6 以後的 runtime 預設值本來就是 false(已啟用強式加密)。但這裡有個容易踩的坑:「預設值」取決於應用程式的目標框架(target framework),而不只是實際跑的 runtime 版本。如果一支程式的目標框架編譯為 4.5 或 4.6.1 以前,即便它跑在更新的 .NET Framework runtime 上,SchUseStrongCrypto 預設仍可能是 0——這時上面那段 app.config 設定一樣要加。所以判斷要不要加,看的是 .csproj 裡的 <TargetFrameworkVersion>,不是伺服器上裝的 .NET Framework 版本。4.6+ 目標框架編譯、且連不上的程式,問題通常不在這個 switch,要往別處查。

如果不想動設定檔,也可以在程式啟動時直接指定協定:

1
2
System.Net.ServicePointManager.SecurityProtocol =
System.Net.SecurityProtocolType.Tls12;

改完 RDP 連不進去

這種情況通常是遠端桌面的加密設定也被波及。先確認 HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-TcpMinEncryptionLevel,以及 CredSSP 協定有沒有被誤停。

如果真的 RDP 斷線了,就得靠 IPMI/iLO 或本機操作恢復——這也是前面一直強調事前要確認有備用管道的原因。

系統需求整理

項目 需求
作業系統 Windows Server 2012 或以上
權限 本機管理員
.NET Framework 4.6.2 或以上
TLS 1.3 支援 需 Windows Server 2022 或以上(Schannel 原生支援,舊版即使勾選也不生效)

實際成果

套用 Best Practices 後,Qualys 掃描報告的 SSL/TLS 相關弱點項目基本清零,PCI DSS 掃描的協定合規問題也跟著解決。整個過程含備份大約 10 分鐘,不需要查任何登錄檔路徑文件。

如果是第一次在生產環境執行,多留 30 分鐘給驗證步驟——跑一次 SSL Labs、確認 Web 應用程式正常回應、確認 RDP 還能連進去。這三項都過了,這台機器的 TLS 設定就算交差了。

參考資料

  1. Nartac Software 官方網站
  2. IISCrypto 下載頁面
  3. IISCrypto FAQ — Best Practices cipher suite order
  4. Microsoft Docs — Protocols in TLS/SSL (Schannel SSP)
  5. Microsoft Docs — TLS best practices with .NET Framework