第225期 / July 5, 2016

研發新視界

分享到臉書!分享到維特!分享到噗浪!分享到Google+!分享到微博!轉寄友人友善列印

網路安全SSL簡介

作者/陳新颺

[發表日期:2016/5/13]

前言

在這個資訊發達且快速演進的世代,人們生活與網路密不可分,相較過去,現在幾乎隨時都在接觸網路,不管是透過網路查詢資料或探索新知,或與其他人的交流與分享,無時無刻都在使用網路,或透過網路來使用其他功能。

既然網路對於我們如此的重要,那麼網路安全這個議題也就伴隨而來了:隨著網路的無遠弗屆,人們可以很容易取得網路上的資源,或者是提供資源給其他人,那麼在我們並不想如此開放的提供給所有人時又該如何做,如何確保雙方交換的資料的正確性,是否有在傳輸時被竄改或者被截取。當然如此重要的問題早就有許多解決方法被提出,也不斷隨著時代演進在更新,而這裡將介紹的安全通訊協定(Secure Sockets Layer),就是一個十分常見的加密性傳輸方式。


《圖一》SSL簡易流程圖


SSL簡介

Secure Socket Layer(縮寫SSL,以下亦以SSL稱之),可以在Internet上提供秘密性傳輸。最早是Netscape公司所提出,SSL的目標在於保證兩個應用間通訊的機密性和完整性以及可驗證伺服器身分,目前已廣泛的應用在HTTP連線上,當使用者以https方式連上網頁時,若發現瀏覽器有鑰匙鎖或鑰匙的圖案(不同瀏覽器與版本顯示的位置與圖案可能會有差異)。


《圖二》不同瀏覽器所顯示的圖案,由上至下為chrome、IE11、IE8


SSL在1994年就被提出,但因有許多漏洞問題並未公開,隨後1995發布2.0版,以及1996年提出的現在最為廣泛使用的3.0版,為了更加解決一些安全問題以及強化部分功能,傳輸層安全協議(Transport Layer Security,縮寫TLS)也在往後被提出並不斷在更新。Google也在2014發布在SSL3.0發現設計缺陷,建議使用者接升級TLS,有關於TLS相關內容也會本篇最後介紹簡單的設定方式。

SSL的連線可簡單劃分為以下四個步驟:

1.SSL Client端發出ClientHello給SSL伺服器端。告知伺服器端本身可實現的算法列表和其他一些需要的資訊。
2.SSL的服務器端在接收ClientHello後會回應一個ServerHello,裡面確定了這次通訊所需要的演算法,並送出伺服器本身的憑證(資訊內包含身分及公鑰)。
3.SSL Client會新增一個秘密金鑰,並利用伺服器傳來的公鑰來加密,而且會回傳加密後的秘密金鑰密文給伺服器。
4.伺服器使用自己的私鑰解開秘密金鑰密文,取得秘密金鑰後,即利用此秘密金鑰來相互通訊。


《圖三》SSL的加密與傳輸流程


產生SSL憑證說明

前段介紹到的流程,其使用的憑證格式通常為x509,當您選擇在您的網頁伺服器上啟動SSL時,網頁伺服器將建立兩把密鑰,一把私鑰和一把公鑰,公鑰不需去作保密並且還置放在憑證需求檔(Certificate Signing Request,簡稱CSR)裡,它是一個包含您詳細資料的檔案,您必須將此CSR傳送給認證中心,透過 SSL 憑證申請程序,發證中心(Certification Authority)將驗證您的詳細資料然後核發一個包含您詳細資料的憑證,如此您才被允許使用SSL。

產生憑證請求檔以及後續匯入憑證的流程如下:(以下截圖以Windows Server 2012為例)
1.進入IIS管理員,選擇伺服器憑證,並於右方選單選擇建立憑證要求
2.輸入相關資訊,包含key的長度
3.最後將檔案做儲存,並提供給發證中心
4.收到發證中心回覆的檔案後,回到原本產生憑證請求檔的機器,進入IIS管理員,選擇伺服器憑證,並於右方選單選擇完成憑證要求
5.選擇回覆的檔案,並設定憑證名稱與存放位置,最後即可完成SSL憑證申請動作


《圖四》產生憑證請求檔



《圖五》完成憑證要求


若要將憑證匯入到其他機器上做匯入,則可以參考以下流程:
1.開始(選單),選擇執行,輸入mmc(嵌入式管理單元之管理工具),於檔案頁籤中選擇新增移除嵌入式管理單元
2.左邊點選憑證並新增至右邊,新增時選擇電腦帳戶與本機電腦
3.找到剛匯入的憑證,右鍵選擇匯出,並選擇匯出私密金鑰
4.格式選擇個人資訊交換 – PKCS #12
5.輸入之後做匯入動作時需要使用的密碼,並選擇檔案存放路徑與名稱
6.於要匯入憑證的機器,執行步驟1與步驟2,並於憑證-個人點選右鍵,選擇所有工作-匯入
7.選擇剛剛產生的檔案並輸入密碼後即可完成匯入


《圖六》匯入憑證操作畫面



《圖七》x509憑證的內容


所有 SSL憑證都是發給公司或是法人,典型的 SSL 憑證將包括您的網域名稱(domain name)、您的公司名稱(company name)等等的資料,同時也包含了憑證的到期日和負責核發此憑證的發證中心詳細資料。

當一個瀏覽器連結到一個安全網站時,它將收到這個網站的SSL憑證並且檢驗它是否過期、它是否是已經被瀏覽器信任的發證中心所核發的,以及它是否如核發時所登記的內容被該網站使用,假如有任何一項檢查不通過,瀏覽器將顯示一個警告訊息給使用者。


《圖八》SSL憑證內容


除了匯入憑證後,我們就可以瀏覽該憑證相關的網頁外,當然也可以透過程式來做連線,例如取得一個需要憑證的WebService,同樣先該在台電腦上匯入憑證,並在程式建立連線時設定該憑證內容,就可以順利使用該服務,程式碼大致如下範例所示。



並可以用以下程式來取得結果。
response.Conten:回傳的內容
response.StatusCode:處理狀況(可參閱HttpStatusCode)

TLS的簡介與設定

TLS在很早就已被提出,早期的TLS與SSL差異並不大,一直到了2008年的TLS1.2版對於加密部分才有較大的修正。另前面所提及的,Google發布在SSL 3.0中發現設計缺陷,建議禁用此一協議。攻擊者可以向TLS發送虛假錯誤提示,然後將安全連接強行降級到過時且不安全的SSL 3.0,然後就可以利用其中的設計漏洞竊取敏感資訊。Google在自己公司相關產品中陸續禁止回溯相容,強制使用TLS協議。這邊也將說明該如何停用SSL並啟用TLS的步驟。

1.於執行(或是命令提示字元),輸入regedit,開啟登錄編輯程式
2.進入以下路徑HKey_Local_Machine\System\CurrentControlSet\Control\SecurityProviders \SCHANNEL\Protocols\
3.於Protocols右鍵->新增->機碼,增加TLS 1.1與TLS 1.2
4.於TLS 1.1與TLS 1.2右鍵->新增->機碼,增加Client與Server
5.於TLS 1.1與TLS 1.2的Client/Server (共四個)目錄右方右鍵->新增->DWORD新增一筆名稱為DisabledByDefault,數值資料為0。新增一筆名稱為Enabled,數值資料為1
6.重新啟動機器
7.開啟IE,於網際網路選項->進階,將SSL取消勾選,並勾選TLS 1.1與TLS 1.2後按確定


《圖九》TLS的基碼設定內容



《圖十》IE的TLS的設定


另也可以透過以下網站檢查電腦是否已經支援SSL/TLS,以及確認目前各家瀏覽器與其版本的支援狀況,可以做為設定完成之後的檢查,或者是判斷是否有需要變更或更新瀏覽器。
https://www.ssllabs.com/ssltest/viewMyClient.html


《圖十一》檢測後的部分內容


結語

對於一個支援SSL的網站而言,使用者可以透過憑證認證的方式與該網站建立起安全且可信任的連線,藉由這樣的功能,可以更有效地保證資料的保密性與可靠性,使客戶與伺服器應用之間的通信不被攻擊者竊聽。當然這方面的議題也不是到這裡就結束,網路安全這一塊也一直有更好的對策被提出,就連這篇提到的TLS也仍然有新版的草案持續在發展,相信未來網路安全這部分也會越來越完善。

參考資料

1.傳輸層安全協議 - wikipedia

2.網站SSL加密原理簡介