讓你的 SSL 更安全 – 移除弱 SSL 加密方式 (Cipher)

SSL安全性如何強化,含括了當前流行的各種伺服器的設定方式,包括IIS, Apache, F5 Load balancer, A10 等

SSL 通訊協定下,一開始 Client 與 Server 進行 Handshake 時,彼此會「溝通」有哪些加密方式是彼此都支援的,然後約定好稍後傳輸資料的加密方式。會使用哪一種加密方式和我們買的 SSL 憑證的價格並沒有絕對直接的關係,既使你買的是一年價值 TWD 35,000 的 VeriSign Secure Site with EV,也可能因為設定的緣故而導致於只用到 40 bits 的加密方式。

由於硬體的處理能力逐年的提升,舊加密方式的安全性會相對的變得容易破解,所以新的及更高規格的加密方式就不斷的被開發出來。但是一來是因為新的加密方式推出之後不一定所有的廠商都支援,另外有些舊規格的硬體也許無法負擔較高規格加密方式的運算需求,既使是沒有以上兩種限制,但光從實務面上,我們也很難要求世界上所有 Client 與 Server 都可以隨時更新到最新的版本。所以一般來說,就只會建議禁用那些特別弱或已經證實可被破解的加密方式。而一個好的系統管理員,或有在重視網站安全性的公司,就會定期去檢驗所管理網站上的弱安全性加密方式是否已經被禁用了,畢竟一旦當客戶上了我們的網站,若因為 SSL 加密方式太弱而讓客戶的機密資訊外洩,損失的也是我們自己。不過很可惜的是,台灣有許多的網站並不太注重這件事情,我不太清楚原因為何?不過老實說,就算是我們用了這些所謂的弱 SSL 加密方式,想要側錄並進行破解還是得有一定的配合條件,一般的駭客或木馬想來應該寧願把功夫先花在那些未加密的連線或是 Key strokes 的側錄,而非花功夫去破解這些已經加密過後的東西。

只是身為一個知名網站的管理者,為了避免駭客針對性的攻擊,我們還是得用 100 分的標準來看待這件事情,以台灣的網站來看,我們利用 Qualys Labs 所提供的免費檢測工具,檢查了幾個國內的知名網站:

知名遊戲網站 1:
01

知名遊戲網站 2:
02

知名電信公司 1:
03

知名電信公司 2:
04

知名網購:
05

若以該網站的統計數據來看,拿到 B 的網站是最大宗的,第二名反倒是拿到 F 的網站,由於這是個英文網站,測試的標的應該來自於全世界各地,可見得就算是把這個標準放在全世界來看,拿到 A 級分的網站比例也是不高的。 (2016/11/28 更新,截至目前為止,拿到 A 的比例已經是最高的了,SSL Labs 測試的樣本中,有 48.3% 的網站都可以拿到 A 以上)

06

其實拿到 B 也不表示這個網站不夠安全,讓我們來看看這個分數的組成定義,首先是 Certificate ,從以上的例子來看,這個項目的分數大家都是拿 100,表示大家的 SSL 憑證都沒有過期,而且是和網址相符的,也沒有 Chain certificate 的問題。表示上述每一個網站的 SSL 憑證都有被正常的申請及安裝。

第二個項目是 Protocol Support ,由該網站的定義中可以發現,他是用 SSL 2.0, 3.0 和 TLS 1.0, 1.1, 1.2 的支援程度來做加權平均的,而且自 2014 年 1 月起,不支援 TLS 1.2 的就會被打到 B 去,可見得這個網站也是越來越嚴格。我看很多台灣人還是在使用 Windows XP ,這些人既使安裝了 XP 能支援到的 IE8,其 TLS 也只支援到 TLS 1.0 的版本,連 TLS 1.1 都不支援,更遑論 TLS 1.2 了。而 Windows 7 上的 IE 則是需要到 IE 11 才支援 TLS 1.2,若你的 Windows 7 上安裝的是 IE 10 ,那也只支援到 TLS 1.1。那表示既使是伺服器已經可以支援到 TLS 1.2 ,瀏覽器沒有支援到位的話,他們之間還是會以較低的加密方式來處理 SSL。所以你說可不可以從伺服器端把 TLS 1.0 禁用?那表示你不打算讓 Windows XP 的 IE 使用者連上來了。

第三和第四個項目是 Key Exchange 與 Cipher Strength 這一點,基本上這個網站會告訴你,哪些 Cipher Suites 是安全的,哪些是安全性較弱,而哪些是完全不安全的,以下圖來看,那些有用到 MD5 作為演算法的加密方法都被標示為 INSECURE,由於 MD5 在 2009 年已經被證實在一般的電腦上只要花數秒的時間即可破解,所以無論是多少長度的金鑰也是無濟於事。另外那些短於 1024 bits 長度金鑰則會被歸類為 WEAK,因為長度過短,所以相對來說容易被破解,最好也是禁用掉。

07

其實不管是 Web server (IIS 或 Apache),能作為 SSL Proxy 的設備或服務 (如 Load Balancer, CDN),當推出新版本時,都會適當的在預設值中就禁用一些不安全的憑證,但是身為系統管理員,就會知道有時候因為升級版本需要新的授權預算,有時候是因為應用程式和新版本不相容等等的原因,我們並沒有辦法每一次都跟著廠商一起升級,所以瞭解你所管理的系統該怎麼禁用不安全的加密方式就顯得非常重要了。

要檢查你的網站目前支援了哪些加密方式除了可以用上述的網站之外,如果你不太希望「公開」地留下查詢的資料,或是希望在還沒有正式上線前進行檢查,也可以利用 OpenSSLSSLScan (Windows 版),來查詢或驗證。我自己是用後者,因為操作起來方便又簡單,執行出來的結果就如下圖所示,其中 Accepted 的 Cipher 已經很少了
(* 2015/07/27 更改 SSLScan 連結,原版本已經久未更新,我另外在 Github 上找了另外一個版本,用法相同,但顯示方式不同)

08

如何禁用?在 Windows 上的 IIS 會挺麻煩,根據這篇文章所示,你必須手動去更改 Registry,而且改完之後必須要重開機,由於每個加密方式在 Registry 的命名方式不太一樣,所以需要時要去找出來,或參考這篇。感覺上有點麻煩嗎?那請服用網友推薦的這個小工具,直接用選的,而且還內附 Qualys SSL Labs 的捷徑。

09

至於 Apache ,基本上就是在設定檔中把想要禁用的 Cipher string 給加入就可以了,一般我們會不太希望把所有設定都搞在 httpd.conf 中,所以大家一般都是把這樣子的禁用字串寫到 /etc/httpd/conf.d/ssl.conf 裡。語法請參考這裡。另外這裡有提供簡單的說明網頁

由於 F5 也是和 Apache 一樣使用 OpenSSL 來提供 SSL 功能,所以在 Local Traffic -> Profiles -> SSL -> Client 選單中,選擇你要修改的 clientssl profile,然後選 Advanced,就可以在 Ciphers 欄位中填入欲禁用的字串

10

如同之前有提到的,F5 每個版本都會禁用掉一些不安全的加密方式,這裡是 10.x 以前版本的啟用清單,而這裡放的就是 11.x 的啟用清單。

A10 的 SSL Cipher 支援則是比較特別一點,它是可以用「選」的,

11

Windows 2008/2012 支援的加密方式如此頁面所示,OpenSSL 則在該頁面中有列出不再支援的加密方式 (Deprecated SSL v2.0 cipher suites)。但很顯然的,Windows 或 OpenSSL 預設禁用的加密方式就不會太多,所以自己提高警覺,根據你的需要去設定要支援的加密方式,才是最佳的安全之道。

  • 至於其他 Web server ,我猜只要是使用 OpenSSL 套件的,應該可以在某個設定檔/設定畫面中找到放禁用字串的地方
  • 補充:文中所提到的 Qualys Labs 的工具網站也增加了最近熱門的 HeartBleed 偵測 (2014/04/22)
  • Qualys Labs 的工具網站也增加了最近熱門的 POODLE (SSLv3 漏洞) 偵測 (2014/10/21)
  • 2014/10/21 更新: 10/14 時有個 SSLv3 的漏洞被發佈 CVE-2014-3566 ,由於預設採用 SSLv3 的瀏覽器很少(幾乎沒有),且多半還可以走 TLS ,所以 Linode 就建議把 SSLv3 給關掉,Linode 網站 上提有供各種 Open source web server 的 SSLv3 關閉方法,請自行參閱。F5 也提供了對應措施,有趣的是,F5 早在 2014/03/03 發表的 11.5.0 版本時就把 SSLv3 給關掉了
  • 2020/04/07 更新: 沒想到從 2020/01/31 開始,TLS 1.0 和 1.1 也變成不那麼安全了,全打到 Grade B 去

讓你的 SSL 更安全 – 移除弱 SSL 加密方式 (Cipher) 有 “ 3 則迴響 ”

發表留言