﻿# 如何停用 IIS5 / IIS6 / IIS7 的 SSL v2 加密協定 (含原理說明)

在多年以前 SSL 第二版 (v2) 就已經被證實有編碼加密方面的瑕疵，因此駭客很輕易的就能對 SSL v2 加密過的封包進行反解，或可能會透過**中間人攻擊**([Man-in-the-middle attack](http://en.wikipedia.org/wiki/Man-in-the-middle_attack))手法加害於你的網站用戶，因此大多數的資安掃瞄軟體皆會建議在伺服器上關閉 SSL v2 的協定，以確保用戶端透過 SSL ( HTTPS ) 連上網站伺服器時是安全的連線。

我原本以為從伺服器上關閉 SSL v2 可能會導致部分舊版的瀏覽器無法登入網站，但理解 SSL 協定的**握手過程** (Handshake) 後，就知道不會導致客戶無法連線的問題，甚至想不到不停用 SSL v2 的理由。

**SSL/TLS 大致的運作過程如下：**

-   瀏覽器對特定網站發出 https 連線請求，雙方根據 SSL 所規範的 handshake 機制
-   瀏覽器會先送出一個 "ClientHello" 訊息給網站伺服器，裡面包含了瀏覽器所支援的 Protocol 資訊

-   例如: TLS v1.2 , v1.1, v1.0, SSL v2, SSL v3 等等。
-   備註: Internet Explorer 瀏覽器從 IE7 開始就預設關閉了 SSL v2 協定，其他像 Firefox, Google Chrome 等叫的出來的瀏覽器也都預設關閉 SSL v2 協定。

-   當網站伺服器收到此 "ClientHello" 訊息後，會回應 "ServerHello" 訊息給瀏覽器，其內容會從瀏覽器發出的 "ClientHello" 中所有 Protocol 中最安全的版本且伺服器也支援的 Protocol 予以回應。

-   由於是從**最高安全等級**做出比對，一般狀況下通常都會利用 TLS v1.0 或是 SSL v3 來取得雙方的認可，進而約定於之後的連線過程所使用的 Protocol 版本。

由上述運作過程可知，若網站伺服器關閉 SSL v2 協定，並不代表瀏覽器就會無法使用 SSL 協定，因為通常還有其他版本可供挑選。

若以舊版的瀏覽器 IE6 來說，IE6 本身就同時支援 SSL v2 與 SSL v3 協定，在與網站伺服器 handshake 時通常會自動選擇 SSL v3 協定進行後續的連線，但如果用戶端被惡意植入木馬或被駭客修改了機碼設定，導致用戶端被強迫使用 SSL v2 進行安全連線，便會導致使用者遭受**中間人攻擊**或**機密資訊被擷取**等風險，所以無論如何 SSL v2 這種不安全的加密協定還是建議從伺服器端停用比較好，寧願讓使用者連不上網，也不願意看到使用者因為你的網站而受害！

如果你的網站使用者或客戶因為你將網站伺服器的 SSL v2 給關閉而導致連不上網站的情況，那你也可以強烈的懷疑客戶的主機是否已經被駭客入侵或被植入木馬了。再換句話說，如果你不管用戶端安不安全的話，那又何必花錢採購 SSL 憑證保護使用者的網路安全呢？

### 關閉 SSL v2 的方式

若要取消網站伺服器 (IIS5 ~ IIS7) 對 SSL v2 的支援，必須修改系統機碼才行，步驟如下：  
（註：此方法適用 x86 與 x64 架構，也適用於 Windows Server 2003 ~ Windows Server 2008 R2）

1\. 建立一個 **Disable\_IIS7\_SSLv2.reg** 登錄檔，檔案內容如下：

> Windows Registry Editor Version 5.00
> 
> \[HKEY\_LOCAL\_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL\\Protocols\\SSL 2.0\\Server\]  
> "Enabled"=dword:00000000

2\. 透過滑鼠右鍵進行合併機碼的動作

    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/fdef2b25443745092bab-image.png)

3\. 合併完成後**需將伺服器重新開機**，重新開機後自然就會生效。

### 驗證 SSL v2 已關閉的方法

若要驗證伺服器是否設定正確，最簡單的方法就是利用[網站伺服器 SSL 支援版本檢測工具](https://www.ssllabs.com/ssltest/)，只要輸入你的網站網址，再按下 \[**SSL-check**\] 按鈕即可進行檢測，如下圖示：

 ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/db66fce2a734ac2b6254-image.png)

如果你的檢測結果是如下圖這樣，在 Available SSL2 ciphers 沒有任何資料，那就代表你已經完成關閉 SSL v2 的設定。

 ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/fd86f617ce4de867a58e-image.png)

如果你的 IIS 網站沒有做出任何修改，預設還是會支援 SSL v2 的協定，檢測出來的結果如下圖示：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/002e54cda3299151edce-image.png)

最後，所以還是建議各位網站管理員將網站伺服器上預設支援的 SSL v2 協定關閉，確保用戶的安全性。

**相關連結**

-   [How to disable PCT 1.0, SSL 2.0, SSL 3.0, or TLS 1.0 in Internet Information Services](https://web.archive.org/web/20090719161337/http://support.microsoft.com:80/kb/187498)  
    [停用 IIS 上的 PCT 1.0、SSL 2.0 或 SSL 3.0](http://support.microsoft.com/?scid=kb%3Bzh-tw%3B187498)
-   [How to disable SSL v2 in IIS 7](http://stevenrobert.wordpress.com/2009/12/02/how-to-disable-ssl-v2-in-iis-7/)
-   [Thread: Disable SSL v2 in IIS7?](http://forums.iis.net/t/1151822.aspx)
-   [網站伺服器 SSL 支援版本檢測工具](https://www.ssllabs.com/ssltest/)
-   [Transport Layer Security - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/Transport_Layer_Security)
-   [SSL/TLS in Detail](http://technet.microsoft.com/en-us/library/cc785811\(WS.10\).aspx)
-   [Upcoming HTTPS Improvements in Internet Explorer 7 Beta 2](http://blogs.msdn.com/ie/archive/2005/10/22/483795.aspx)
-   [mod\_ssl - Apache HTTP Server](http://httpd.apache.org/docs/trunk/mod/mod_ssl.html#sslprotocol)
-   [Analysis of the SSL 3.0 Protocol](http://www.schneier.com/paper-ssl.html)
-   [Disable SSLv2 in apache (httpd)](https://httpd.apache.org/docs/2.4/mod/mod_ssl.html)
