進度條

[不是工程師] 你的網站被顯示為不安全嗎?安裝SSL憑證前你可能會想知道的事!

網路對談間的諜報第一戰-就讓SSL來做諜戰間的資料傳遞

作者: Vincent Ke 更新日期:
「不是工程師」系列是以生活化 / 口語化的方式,
提供科技用詞或是功能另外一種理解的方式,
所以很多用詞與邏輯可能不是那麼的嚴謹,還請見諒。

 

HTTPS是一系列的文章,但是因為發表後才發現有些以為大家都知道的事情其實沒那麼普及(工程師同溫層)
所以發表的順序上面沒有很順暢,比較順暢的順序會是下面所列:

HTTPS 三部曲

1. [不是工程師] 差一個字差很多,HTTP 不等於 HTTPS
2. [不是工程師] 你的網站被顯示為不安全嗎?安裝SSL憑證前你可能會想知道的事!
3. [不是工程師] 為何HTTPS憑證有貴有便宜還更可以免費?讓我們從CA原理開始講起。

 

 

大家一定對諜報戰這個名詞很熟悉吧,特別是在網路真假難辯之中,這樣的爾虞我詐更是防不勝防,在網路安全與資安概念盛行之前,大家對把信用卡資料輸入在網頁上面這件事情都相當戒慎恐懼,畢竟在網路這樣開放的環境裡,深怕只要疏忽了一個環節,就有可能讓所有資料的公諸於世,而這些資料上除了隱含了那些我們不該公佈的機密性資料外,也包含了那些不願意開放給大家知道的小祕密,究竟這樣的資料傳輸上,是不是也有什麼樣的秘密管道,來讓買賣雙方的資料不會輕易得被第三方給竊取呢?

 

(By Fabio Lanari - Internet1.jpg by Rock1997 modified., GFDL, https://commons.wikimedia.org/w/index.php?curid=20995390)

 

 

安全通訊協定(Secure Sockets Layer)就是一個十分常見的加密性傳輸方式,目前也很廣泛的應用在各大電子商務網站裡,相信大家對SSL這個名詞一定也相當熟悉,今天就讓小編來解密一下。

 

SSL中文為"安全套接層協議" ,顧名思義就是一種通訊安全協定,最早是Netscape(網景)公司所提出,目地是為了保障兩個應用端的雙方裡的資料傳輸,可保持機密性及完整性,並透過第三方機構,來驗證雙方的身份,已確保我們所傳輸的資訊,可以完整且正確的提交給對方手上,並不會被有心人士截取,畢竟在現實生活中都有冒名頂替的案件層出不窮,這樣的方式在網路世界中絕對也是必須得避免的一大關卡。

 

而目前SSL技術已經廣泛的應用在HTTPS連線上,想必大家常常會發現瀏覽器下方(或是Chorme的網址旁)會有一個鑰匙(或是鎖)的圖案吧,不用懷疑,這就是SSL憑證的圖示。

 

(中文版本)




(英文版本)
 

 

校正小編補充:
Chrome 56版已經在今年(2018年)上線了,如果網站沒有安裝最基本的SSL,會被顯示不安全

如下圖:


 

 

 

SSL除了是一種協議,從他的單字來看,裡頭的Layer表示一個層的概念,中文可以稱做為

"安全套接層協議",從網站架構我們可以知道會有所謂的應用層(Application Layer),

以及傳輸層(Transport layer或是可稱做TCP層),而SSL的用途則是在這兩層中間加了一個祕密溝通

通道,讓應用層的數據可以透過加密的方式,在傳輸時得到了保密的效果。

 

 

 

而SSL主要分為兩層,上層主要為SSL Handshake Protocol (另外還有SSL Change Cipher spec及SSL Alert通訊協定),下層為SSL Record Protocol。SSL Handshake Protocol,中文可以翻譯成交握溝通或是握手溝通, 主要目的就是為了讓通信的雙方如何利用它,來讓彼此可以安全的協商出一份密鑰,並透過第三方機構的認證來確保溝通的安全性;而 Record Protocol則定義了傳輸的格式。

 


其中SSL Handshake Protocol是指在傳輸之前,溝通雙方(用戶端與伺服器端)是先討論好該使用的加密演算法或密鑰交換演算法等等機制,並在伺服器和用戶端之間可以安全地交換密鑰及了解雙方的身分認證等規則,讓雙方有所遵循,並透過這樣的機制來確認雙方的身份。

 

相信大家都有看過風聲(或是玩過桌遊的風聲吧)吧,概念上很像遊戲中的情報傳遞以及驗證,簡單來說就是兩方之間先透過這樣的握手方式,來定義好彼此之間該如何交換驗證身份的情報、驗證方式以及驗證格式等等的,來確保彼此之間的身份為真。

 

 


而這中間SSL的傳遞上,通常會使用一種叫做公鑰加密法(或稱非對稱加密法)的方式來做加密,公鑰加密法的目地是使用兩種不同的加密金鑰:公鑰(public key)、私鑰(private key) 。

 

以Server端為例,在傳輸資料時要先生成公鑰和私鑰兩把鑰匙,當然從名稱上來看就可以了解,公鑰是可以開放給全世界知道的,私鑰就是只有自己主機端才有的。例如一般的使用者在透過瀏覽器瀏覽網站時,可以拿到server的公鑰後透過瀏覽器的加密,來建立Https

 


在這個過程中,為確保在公鑰交換的過程裡,雙方的身份都沒有被冒用,所以在SSL裡面會有一個第三方認證的機構加入,來回覆雙方這個信賴的問題,這個機構就是所謂的"認證中心(CA)"。

 

 


 

 

而這樣的機制正也是SSL Handshake 要處理的問題,回到諜報戰的SSL Handshake上的原理,SSL使用者在TCP建立之後,會發出一個兩方的多次握手,把這個握手想成就是諜報的溝通吧,流程如下(裡面包含兩種加密方式)


1.使用者:嘿,我有個秘密要跟你說,請用下面加密方法跟我溝通(附上加密方法與SSL版本列表),但是這個訊息沒有加密過喔,不然你解不開!


2.伺服器:好的,我選這兩個(SSL版本,與之後通訊的加密方式),不過我們還沒有設定好加密方式,所以這次回應你我也不加密。


3.伺服器:請你先驗證我的訊息是否真的從我這邊來的,這是我的公鑰(public key)和認證CA(認證公鑰是屬於這個網站URL的),這也沒有加密!
 

4.使用者:了解,我看一下,我查一下我的列表,如果CA驗證錯誤就不跟你聊了,你可能不是那個人。

(列表是內含在瀏覽器一開始就存在的,也有可能過期,但是瀏覽器會更新,如果使用其他方式連線,就有可能需要自己Update)
 

5.使用者:屬實,我們以後聊天就用你選定的方式傳輸吧,傳輸都要用密碼加密,我這邊利用密鑰加密生成一個新的密碼A(Secret key 或稱為 Client key)給你。但是怕這個新密碼A被別人偷走,所以我用你給我的公鑰(public key)加密他,這樣就只有擁有私鑰(private key)的你才能解開了,加密完我自己也解不開。請收。

 

6.伺服器:好的(用自己的私鑰解密,獲得密碼A - Secret key),那我要把我的消息給你囉,以後我們都用密碼A來做為加解密的方式吧!! 


7.使用者:Blah Blah Blah... (以密碼A - Secret key加密形式送出,與公私鑰無關,Secret key可以同時用來加密或是解密,為密鑰加密)

 

校正小編補充:

(網路上資訊順序個別都有一點出入,這邊是依照IBM的版本,參考資料一資料二,中間的差異應該來自於SSL版本的不同。)
(規格是被規定在RFC 5246裡面,如果有出入以該規格為準,連結)
 

 

 

所以從這個握手的過程中,中間共使用了兩種方式做加密(非對稱加密及密鑰加密),目的就是為了把這個密鑰A來做傳遞,而密鑰A本身也受著公私鑰的非對稱加密法做保護,這樣兩種加密方式的結合,好處就是強化上述加密流程的不可逆性,因為在上述的過程中,沒有伺服器的私鑰就沒辦法了解使用者傳遞的密鑰A訊息,只有伺服器端本身可以用私鑰去解密這些訊息;反之別人一但沒有私鑰,就算拿到公鑰加密後的訊息,更無將這個訊息抽絲剝繭,所以這樣的流程也可以確保訊息被破解的機率變小。

 

 

而另外一位功臣CA所扮演的角色是相當重要,因為瀏覽器通常會先埋入這些CA公司的相關資料,所以只要透過SSL連線,且CA機構確認無誤後,通常不會有警告訊息,而伺服器端提供的憑證,也會透過瀏覽器這裡檢驗相符合,來驗證公鑰的正確性,避免有心人士在中間佯裝自己是Server端,利用假的公鑰來截取這些秘密資料,而這也是所謂的中間人攻擊。



但SSL真的就萬無一失嗎?

 

 

SSL在1994年被提出後,因為有著漏洞的問題,而持續做版本的更新,並在1996年提出的現今最廣泛使用的SSL 3.0,但為了可以更加解決傳輸上的安全性問題,傳輸層安全協議(Transport Layer Security,縮寫TLS)也在之後被提出,而Google也在2014發布SSL3.0的設計缺陷,建議所有使用者接直接升級TLS。


諜報戰可還沒完呢,TLS在這中間扮演什麼樣的角色呢,在下一篇裡會接續為各位介紹。

 


最後,如果你喜歡我們的文章,別忘了到我們的FB粉絲團按讚喔!!

Medium vincent

Vincent Ke

喜歡把混亂的事情變的簡單 用嘴巴做事其實很可以 但要結合靈活的腦袋思考 就一起來拆解吧