The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何在 IIS7 / IIS7.5 安裝 SSL 憑證(含 IIS7 匯入憑證的 Bug)

先前我曾經寫過一篇【購買與安裝 SSL 憑證完全攻略 (以 IIS7 為例) 】文章,文章裡鉅細靡遺的解說如何從購買 SSL 憑證到安裝 SSL 憑證到 IIS 上的過程,而且都有詳細的圖文解說,不過我最近卻發現當透過 IIS7/IIS7.5 管理員匯入 SSL 憑證且將憑證設定為「不允許匯出此憑證」時,就會導致該憑證無法正確繫結到站台的狀況,所以特別撰文提醒各位如何才能夠安全的管理憑證使用,又能正常運作於 IIS7 之中。

基本上匯入憑證的過程非常簡單,我們開啟 IIS 管理原之後先點選伺服器節點,也就是下圖 “WEB” 這裡,然後點選「伺服器憑證」這一項:

接著我們在右側視窗的空白處按下滑鼠右鍵,點選「匯入」功能

在選取 憑證檔案 (.pfx) 與輸入當初匯出憑證時輸入的 密碼 後,還有一個選項是「允許匯出此憑證」的勾選項目,此選項在資安要求較高的伺服器上都是建議不要勾選比較安全,這樣一來就算你的伺服器被駭客拿下,也可以保護你的憑證不會被駭客取走,本文最後會提到憑證被劫走會有什麼樣的資安風險。

以前我在匯入憑證時,其實還是會勾選這個選項,因為客戶通常不會妥善保管憑證,這一點從我們經常接手客戶的主機來管理就很清楚的知道了,只要問到客戶憑證檔在哪,有 90% 的機會客戶會回答你說:「我不知道,應該在伺服器上吧,你自己去找」,這就是業界的現實狀況啊! :-p

如果你也會勾選 允許匯出此憑證,那麼應該不會感覺到我本篇文章提到的問題。不過若你選擇不勾選這個選項,那麼接下來的步驟就會讓你非常挫折。

當我們匯入完憑證後,接下來當然是在網站的地方設定「站台繫結」,如下圖示,當你在設定繫結並按下「確定」鍵後,竟然會發生【指定的登入工作階段不存在。可能已被終止。(發生例外狀況於 HRESULT: 0x80070520)】的錯誤,這樣的錯誤還真讓人丈二金剛摸不著頭緒阿!

在解決此問題之前,我們先在比較一下兩個憑證管理介面的關係,如下圖是「憑證主控台」與「IIS 管理員」的 伺服器憑證 管理單元,當我們從 IIS 管理員匯入憑證時,其實匯入的目的地正式憑證主控台在 本機電腦 的「個人/憑證」這個位置,相對的,我們直接從憑證主控台匯入憑證到 本機電腦 的「個人/憑證」也一樣會出現在「IIS 管理員」的伺服器憑證這裡。

解決問題的方法,就是從「憑證主控台」匯入憑證,如此一來 IIS 在 站台繫結 的地方就不會出問題!

以下是匯入的步驟說明:

選取匯入憑證檔案時,記得要選取含有私密金鑰的 個人資訊交換 (*.pfx ; *.p12) 檔案類型:

憑證匯入精靈執行到輸入私密金鑰密碼步驟時,就有一個與 IIS 管理員一樣的選項,但是文字描述不太一樣,這裡稱為「將這個金鑰設定成可匯出」,在憑證主控台這裡預設就是沒有勾選,不像是 IIS 管理員裡預設是勾選的。

這裡匯入成功之後,IIS 就可以正確的設定站台繫結到該憑證,也不會再出現錯誤了。

 

憑證被有心人士劫走會有什麼樣的資安風險?

在各種網路攻擊的手法中,有個常聽到的 中間人攻擊 (Man-in-the-Middle Attack) 手法,他是指駭客能夠扮演中間人角色。我們每天都在上網,你的電腦與伺服器之間流通的網路封包 (透過網路傳輸的資料) 都會經過許多的網路設備,像是路由器 (Router)、網路交換器 (Switch)、IP 分享器 (NAT)、… 等等,所以你與伺服器之間的「中間人」其實有非常多人,任何一個流經的網路設備都可以收錄你傳遞的封包,其中當然包括帳號、密碼等,不過這些 ISP 業者的工程師一般來說應該不會無聊到去擷取客戶的封包,畢竟這是違法的,但駭客秘密的在從事各種攻擊與竊取資料的活動,所以重要的資料要在網路上傳遞,最好還是要透過加密的方式傳輸,資料才不會被有心人士劫走。

所以駭客只要成為了中間人,能做的事情真的非常多,他能夠冒充伺服器接收您傳送的訊息,然後再冒充你把訊息傳給真正的服務器, 因此可以在通訊兩端不知情的情況下竊取或更改你所傳遞的訊息或封包。甚至於駭客也能把從伺服器回傳給你的資料先修改過再回傳給你 (例如將程式或文件加入病毒或木馬),所以中間人的存在的確會對網路安全帶來極大的風險。

我們會選擇使用 SSL 憑證,就是為了讓我們在瀏覽網站的時候,能夠讓使用者有個安心的網路瀏覽環境,所以像大多數知名的電子商務網站都會將網站內的部分功能透過 SSL 的通道讓使用者使用,像是會員登入、變更密碼、修改個人資料、訂單查詢等會牽扯到個人資料的部分都應該使用 SSL 憑證來將網路資料進行加密後傳輸。

在網站的 SSL 憑證妥善的保管之下,使用者連接你的網站時是安全的,不過如果你的 IIS 主機上的 SSL 憑證被設定為「允許匯出憑證」的話,那麼當你的主機被駭客入侵,駭客就能更輕易的匯出你的憑證,而當憑證被匯出後,相當於 SSL 憑證的私密金鑰被拿走,當他成為中間人之後,他就可以輕易的對你用 SSL 憑證加密過的資料進行解密,解密後修改完再加密傳給使用者,這樣的過程神不知鬼不覺的,非常恐怖!重點是,你可能還不知道你的金鑰被偷走了!就好像你家的大門鑰匙被多打了一把鑰匙一樣,但是不知道是哪個小偷去打的,他可以任意進出你家的那種感覺。

所以針對正式部署的環境,我還是建議金鑰在匯入時不要勾選「將這個金鑰設定成可匯出」選項,這樣才能確保 SSL 憑證的安全性,不過你就必須真的好好思考如何保管這些 SSL 憑證了。其實就算你的 SSL 憑證真的找不到了,那也沒關係,通常負責代理 SSL 憑證的公司都有補發憑證的服務,重新申請一把遺失的憑證大多不用多付費,就是麻煩了點而已。

相關連結