SSL的那些事兒

SSL的那些事兒

timg-2

Https氓扛,SSL 平時我們都聽的挺多塌衰,知道它是用來加密的豌注,但是對于里面的工作原理不是很清楚,所以在這里我也總結(jié)下 SSL 的工作原理揉忘,希望大家能夠幫助到大家跳座。

PS:其實這篇文章寫了很久了,是在一次公司的內(nèi)部培訓(xùn)準備的泣矛,寫了幾天PPT疲眷,也看了好多資料,雖然講完了您朽,但是一直放在自己的iCloud里了狂丝,最近又突然看到它了,想到畢竟也是花了時間在上面哗总,還是想整理下發(fā)出來几颜,和大家一起學(xué)習探討。

目錄

  1. 不安全的Case
  2. SSL出現(xiàn)的背景
  3. SSL的演進
  4. SSL的工作流程
  5. 小結(jié)

一讯屈,不安全的Case

明文傳輸

眾所周知蛋哭,明文傳輸肯定是不安全的。下面這個例子里涮母,A 告訴 B 的每一句話谆趾,都會被 C 看到躁愿。

SSL-TLSpic.003

密文傳輸

這種對稱加密傳輸?shù)倪^程是需要通信雙方都能提前知道加密密鑰,然后才能讀懂雙方發(fā)送的密文沪蓬。一旦雙方其中有一方泄露了加密密鑰彤钟,整個通信過程就會有危險了。下面這個例子跷叉,如果 C 不管通過什么途徑獲取到了加密密鑰逸雹,那么 C 就能看到 AB 之間的通信內(nèi)容了。

SSL:TLSpic.004

二云挟,SSL出現(xiàn)的背景

基于萬維網(wǎng)的電子商務(wù)和網(wǎng)上銀行等新興應(yīng)用峡眶,極大地方便了人們的日常生活,受到人們的青睞植锉。由于這些應(yīng)用都需要在網(wǎng)絡(luò)上進行在線交易,它們對網(wǎng)絡(luò)通信的安全性提出了更高的要求峭拘。傳統(tǒng)的萬維網(wǎng)協(xié)議HTTP不具備安全機制——采用明文的形式傳輸數(shù)據(jù)俊庇、不能驗證通信雙方的身份、無法防止傳輸?shù)臄?shù)據(jù)被篡改等鸡挠,導(dǎo)致HTTP無法滿足電子商務(wù)和網(wǎng)上銀行等應(yīng)用的安全性要求辉饱。

與此同時,所有行業(yè)都面臨著如下三大風險:

  • 竊聽風險(eavesdropping):第三方可以獲知通信內(nèi)容拣展。
  • 篡改風險(tampering):第三方可以修改通信內(nèi)容彭沼。
  • 冒充風險(pretending):第三方可以冒充他人身份參與通信。

那么什么是SSL呢备埃?相信大家都會有這個疑問姓惑。

  • SSL(Secure Socket Layer)是netscape公司設(shè)計的主要用以保障在Internet上數(shù)據(jù)傳輸安全,利用數(shù)據(jù)加密(Encryption)技術(shù)按脚,可確保數(shù)據(jù)在網(wǎng)絡(luò)上之傳輸過程中不會被截取及竊聽于毙。一般通用之規(guī)格為40 bit之安全標準,美國則已推出128 bit之更高安全標準辅搬,但限制出境唯沮。當前版本為3.0。它已被廣泛地用于Web瀏覽器與服務(wù)器之間的身份認證和加密數(shù)據(jù)傳輸堪遂。

  • IETF(www.ietf.org)將SSL作了標準化介蛉,即RFC2246,并將其稱為TLS(Transport Layer Security),從技術(shù)上講溶褪,TLS1.0與SSL3.0的差別非常微小币旧。

  • 在WAP的環(huán)境下,由于手機及手持設(shè)備的處理和存儲能力有限竿滨,wap論壇(www.wapforum.org)在TLS的基礎(chǔ)上做了簡化佳恬,提出了WTLS協(xié)議(Wireless Transport Layer Security)捏境,以適應(yīng)無線的特殊環(huán)境。

三毁葱,SSL的演進

在講到SSL演進之前垫言,還是先跟大家講下我們的對稱加密和非對稱加密。

對稱加密 symmetric cryptographic

  • 簡單的說就是加密和解密用的同一個密鑰倾剿。常見的有DES筷频,RC5。
  • 優(yōu)點:加解密速度快前痘。缺點:容易暴露密鑰凛捏。
  • 公式:E(msg, key) = emsg, D(emsg, key) = msg芹缔。

非對稱加密 asymmetric cryptographic

  • 是指一對加密密鑰與解密密鑰坯癣,這兩個密鑰是數(shù)學(xué)相關(guān),用某用戶密鑰加密后所得的信息最欠,只能用該用戶的解密密鑰才能解密示罗。如果知道了其中一個,并不能計算出另外一個芝硬。因此如果公開了一對密鑰中的一個蚜点,并不會危害到另外一個的秘密性質(zhì)。稱公開的密鑰為公鑰拌阴;不公開的密鑰為私鑰绍绘。
  • 簡單的說就是加密密鑰與解密密鑰不同,分私鑰和公鑰迟赃。這種方法大多用于密鑰交換陪拘,RSA便是一個我們熟知的例子。
  • 優(yōu)點:安全性高纤壁,不用暴露私鑰藻丢。缺點:加解密速度慢。
  • 公式:E(msg, publickey) = emsg摄乒, D(emsg, publickey) != msg悠反, D(emsg, privatekey) = msg。

公鑰加密和私鑰解密

下面這個圖例子里馍佑,其實是有兩個場景:

  1. B 手上是有一對密鑰的斋否,一個公鑰和一個私鑰,然后在 AB 通信的過程中拭荤,B 把公鑰交給 A茵臭,私鑰是自己保管的,然后 A 就可以拿著這個公鑰去加密談話內(nèi)容了舅世,而且這個加密的內(nèi)容只能是 B 才能解密的旦委。
  2. 流程是 1 里面是一樣的奇徒,主要是加密的內(nèi)容換成了一個對稱密鑰,然后用對稱密鑰去保證通信安全缨硝。
SSL-TLSpic.009

但是摩钙,如果只是提供公鑰和私鑰,任何人都可以是 B查辩,只要跟 C 謊稱自己就是那個 B胖笛,然后提供公鑰代替 B 的公鑰,這樣的導(dǎo)致的結(jié)果是 A 根本不知道自己是在跟一個假 B 在聊天宜岛,后果很嚴重长踊。

SSL-TLSpic.011

證書

由于存在上面的身份不確認的問題,這里我們引入了證書來幫助證明 B 就是 B萍倡,而不是假 B身弊。

那么什么是證書呢? 簡單的理解證書是一個包含身份ID(類似我們的身份證)列敲,和公鑰信息的一個數(shù)字文件佑刷。

數(shù)字證書就是互聯(lián)網(wǎng)通訊中標志通訊各方身份信息的一串數(shù)字,提供了一種在Internet上驗證通信實體身份的方式酿炸,其作用類似于司機的駕駛執(zhí)照或日常生活中的身份證。它是由一個由權(quán)威機構(gòu)-----CA機構(gòu)涨冀,又稱為證書授權(quán)(Certificate Authority)中心發(fā)行的填硕,人們可以在網(wǎng)上用它來識別對方的身份。數(shù)字證書是一個經(jīng)證書授權(quán)中心數(shù)字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件鹿鳖。最簡單的證書包含一個公開密鑰扁眯、名稱以及證書授權(quán)中心的數(shù)字簽名

目前數(shù)字證書的格式普遍采用的是X.509V3國際標準,一個標準的X.509數(shù)字證書包含以下一些內(nèi)容:

剛才上面有講寂拆,證書其實是由 CA 發(fā)放的翔冀,這里就會牽扯到 CA 的概念了爽醋。簡單點講,CA 是一個信任中心绣版,可以理解是跟央行一樣,央行發(fā)行的紙歼疮,你信嗎杂抽? 這個紙,你當然不信韩脏,但是你信任央行啊缩麸,信任政府啊,自然這個紙它就值錢了赡矢。所以同理杭朱,CA 發(fā)放的證書自然也是真實可靠的阅仔。

  • CA機構(gòu),又稱為證書授證(Certificate Authority)中心弧械,作為電子商務(wù)交易中受信任的第三方八酒,承擔公鑰體系中公鑰的合法性檢驗的責任。CA中心為每個使用公開密鑰的用戶發(fā)放一個數(shù)字證書梦谜,數(shù)字證書的作用是證明證書中列出的用戶合法擁有證書中列出的公開密鑰丘跌。CA機構(gòu)的數(shù)字簽名使得攻擊者不能偽造和篡改證書。它負責產(chǎn)生唁桩、分配并管理所有參與網(wǎng)上交易的個體所需的數(shù)字證書闭树,因此是安全電子交易的核心環(huán)節(jié)。由此可見荒澡,建設(shè)證書授權(quán)(CA)中心报辱,是開拓和規(guī)范電子商務(wù)市場必不可少的一步。為保證用戶之間在網(wǎng)上傳遞信息的安全性单山、真實性碍现、可靠性、完整性和不可抵賴性米奸,不僅需要對用戶的身份真實性進行驗證昼接,也需要有一個具有權(quán)威性、公正性悴晰、唯一性的機構(gòu)慢睡,負責向電子商務(wù)的各個主體頒發(fā)并管理符合國內(nèi)、國際安全電子交易協(xié)議標準的電子商務(wù)安全證書铡溪。
  • 數(shù)字證書頒發(fā)過程一般為:管理員只需生成“證書請求”(后綴大多為.csr)漂辐,它包含你的個人信息和公鑰,然后把這份請求交給諸如Globlesign棕硫,verisign等有CA服務(wù)公司(當然髓涯,連同幾百美金),你的證書請求經(jīng)驗證后哈扮,CA用它的私鑰簽名纬纪,形成正式的證書發(fā)還給你。管理員再在server上導(dǎo)入這個證書就行了滑肉。

下圖就是 CA用戶證書 的一個組織結(jié)構(gòu):

所以育八,只要引入了證書,那相當于赦邻,客戶端會去獲取到服務(wù)器的證書髓棋,然后會去判斷這個證書是否是我們的 CA 所發(fā)放的,自然就校驗了證書的合法性。最后的結(jié)構(gòu)就是我們的 B 小伙終于可以證明自己了按声,而不用哭暈在廁所里了膳犹。

SSL-TLSpic.016

說到這里,可能有的小伙伴會問签则,由于商業(yè)證書都是要買的须床,沒有錢怎么辦?或者是說我們的服務(wù)都是內(nèi)網(wǎng)的渐裂,不用考慮太多豺旬。那有什么可以滿足這種訴求嗎? 既然有我們的 CA柒凉,那有沒有不是 CA 的呢族阅? 答案是有的。就是我們可以自己來當這個非官方 CA膝捞,相當于搭建一個私服坦刀,自己玩,自己嗨蔬咬。

Self-signed certificate:由自己的私鑰簽名而非第三方CA簽發(fā)的證書鲤遥。如果你不想花那筆錢,可以自己做CA林艘,現(xiàn)在有一些工具(openssl盖奈,keynote)可以幫助生成自定義的CA,服務(wù)器的證書和自簽名狐援。當服務(wù)器端安裝好有自定義CA簽名的證書時钢坦,這個時候客戶端是需要導(dǎo)入自定義的CA證書,意味著客戶端“信任”這個CA簽署的證書)咕村。而商業(yè)CA的一般不用,因為它們已經(jīng)內(nèi)置在系統(tǒng)中了蚊俺。

但是建議商業(yè)服務(wù)器還是要買個證書來保證安全懈涛。

數(shù)字簽名

由于公鑰加密只能協(xié)商出一個會話密鑰,通過會話密鑰可以保證通信的機密性泳猬。但是不能保證通信的完整性批钠。簡單的說就是證書能夠保證通信的內(nèi)容不被破解,但是不能保證內(nèi)容被篡改得封。

在下面的例子里埋心,A 小伙和 B 小伙通過一段時間的溝通已經(jīng)互有好感,此時 B 小伙想要告訴 A 小伙:"我喜歡你"忙上。但是居心叵測的 C 非要過來插一腳拷呆,在后面補一句變成了:"我喜歡你 我去年買了個表",可想而知,從此世界少了一對茬斧,不知道 C 是出于什么心態(tài)啊腰懂。不管怎么樣,C 成功篡改了通信內(nèi)容项秉。

SSL-TLSpic.018

那么問題來了绣溜,有什么辦法可以讓 A 小伙和 B 小伙在一起呢。

duang娄蔼,duang怖喻,duang,數(shù)字簽名來了岁诉。數(shù)字簽名就是為了解決信息被篡改的干活锚沸。

數(shù)字簽名是指用原文進行HASH運算得到摘要信息并用發(fā)送者的私鑰加密,與原文一起傳送給接收者唉侄。接收者只有用發(fā)送者的公鑰才能解密被加密的摘要信息咒吐,然后用HASH函數(shù)對收到的原文產(chǎn)生一個摘要信息,與解密的摘要信息對比属划。如果相同恬叹,則說明收到的信息是完整的,在傳輸過程中沒有被修改同眯,否則說明信息被修改過绽昼,因此數(shù)字簽名能夠驗證信息的完整性。

SSL-TLSpic.020

有了數(shù)字簽名的幫助须蜗,誰都無法阻止 AB 在一起了硅确。而這一切都是 SSL 自動幫我們做了,就是這么自然明肮,但是了解里面的原理還是很有必要的菱农。

SSL-TLSpic.022

四,SSL的工作流程

首先來說下它的架構(gòu)柿估,SSL是一個介于HTTP協(xié)議與TCP之間的一個可選層循未。

---------
| HTTP |
---------
| SSL |
---------
| TCP |
---------
| IP |
---------

  • SSL層: 借助SSL層協(xié)議的的信道安全的協(xié)商出一份加密密鑰,并用此密鑰來加密HTTP請求秫舌,SSL在TCP之上建立了一個加密通道的妖,通過這一層的數(shù)據(jù)經(jīng)過了加密,因此達到保密的效果
  • TCP層:與web server的443端口建立連接足陨,傳遞SSL處理后的數(shù)據(jù)嫂粟。
  • SSL協(xié)議可分為部分: SSL記錄協(xié)議(SSL Record Protocol):它建立在可靠的傳輸協(xié)議(如TCP)之上,為高層協(xié)議提供數(shù)據(jù)封裝墨缘、壓縮星虹、加密等基本功能的支持零抬。 SSL握手協(xié)議(SSL Handshake Protocol):它建立在SSL記錄協(xié)議之上,用于在實際的數(shù)據(jù)傳輸開始前搁凸,通訊雙方進行身份認證媚值、協(xié)商加密算法、交換加密密鑰等护糖。

握手的過程

簡單的說客戶端會發(fā)出一個 ClientHello 來發(fā)起握手褥芒,這個消息里面包含了自己可實現(xiàn)的算法列表和其它一些需要的消息,服務(wù)器端會回應(yīng)一個 ServerHello嫡良,這里面確定了這次通信所需要的算法锰扶,然后發(fā)過去自己的證書(里面包含了身份和自己的公鑰)∏奘埽客戶端在收到這個消息后會生成一個秘密消息坷牛,用服務(wù)器的公鑰加密后傳過去,然后服務(wù)器端用自己的私鑰解密后很澄,會話密鑰協(xié)商成功京闰,雙方可以用同一份會話密鑰來安全通信了。

SSL:TLSpic.025

舉個更形象的例子:

我們假設(shè)A與B通信甩苛,A是SSL客戶端蹂楣,B是SSL服務(wù)器端,加密后的消息放在方括號[]里讯蒲,以突出明文消息的區(qū)別痊土。雙方的處理動作的說明用圓括號()括起。
A:我想和你安全的通話墨林,我這里的對稱加密算法有DES,RC5,密鑰交換算法有RSA和DH赁酝,摘要算法有MD5和SHA。
B:我們用DES-RSA-SHA這對組合好了旭等。這是我的證書酌呆,里面有我的名字和公鑰,你拿去驗證一下我的身份(把證書發(fā)給A)搔耕。目前沒有別的可說的了隙袁。
A:(查看證書上B的名字是否無誤,并通過手頭早已有的CA的證書驗證了B的證書的真實性度迂,如果其中一項有誤藤乙,發(fā)出警告并斷開連接猜揪,這一步保證了B的公鑰的真實性)產(chǎn)生一份秘密消息惭墓,這份秘密消息處理后將用作加密密鑰,加密初始化向量和hmac的密鑰而姐。將這份秘密消息-協(xié)議中稱為per_master_secret-用B的公鑰加密腊凶,封裝成稱作ClientKeyExchange的消息。由于用了B的公鑰,保證了第三方無法竊聽)
我生成了一份秘密消息钧萍,并用你的公鑰加密了褐缠,給你(把ClientKeyExchange發(fā)給B)
注意,下面我就要用加密的辦法給你發(fā)消息了风瘦!
(將秘密消息進行處理队魏,生成加密密鑰,加密初始化向量和hmac的密鑰)
[我說完了]
B:(用自己的私鑰將ClientKeyExchange中的秘密消息解密出來万搔,然后將秘密消息進行處理胡桨,生成加密密鑰,加密初始化向量和hmac的密鑰瞬雹,這時雙方已經(jīng)安全的協(xié)商出一套加密辦法了)
注意昧谊,我也要開始用加密的辦法給你發(fā)消息了!
[我說完了]
A: [我的秘密是...]
B: [其它人不會聽到的...]

小結(jié)

自此酗捌,我們終于撥開了 SSL 的迷霧呢诬,SSL 一個看似簡單的東西,里面涵蓋了對稱加密胖缤,非對稱加密尚镰,證書 和 數(shù)字簽名。對 SSL 感興趣的小伙伴了解下這些還是有好處的草姻,至少都是和我們學(xué)習工作息息相關(guān)的钓猬。

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市撩独,隨后出現(xiàn)的幾起案子敞曹,更是在濱河造成了極大的恐慌,老刑警劉巖综膀,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澳迫,死亡現(xiàn)場離奇詭異,居然都是意外死亡剧劝,警方通過查閱死者的電腦和手機橄登,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讥此,“玉大人拢锹,你說我怎么就攤上這事√言” “怎么了卒稳?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長他巨。 經(jīng)常有香客問我充坑,道長减江,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任捻爷,我火速辦了婚禮辈灼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘也榄。我一直安慰自己巡莹,他們只是感情好,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布甜紫。 她就那樣靜靜地躺著榕莺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棵介。 梳的紋絲不亂的頭發(fā)上钉鸯,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機與錄音邮辽,去河邊找鬼唠雕。 笑死,一個胖子當著我的面吹牛吨述,可吹牛的內(nèi)容都是我干的岩睁。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼揣云,長吁一口氣:“原來是場噩夢啊……” “哼捕儒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起邓夕,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤刘莹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后焚刚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體点弯,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年矿咕,在試婚紗的時候發(fā)現(xiàn)自己被綠了抢肛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡碳柱,死狀恐怖捡絮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情莲镣,我是刑警寧澤福稳,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站剥悟,受9級特大地震影響灵寺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜区岗,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一略板、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧慈缔,春花似錦叮称、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至娱节,卻和暖如春挠蛉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肄满。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工谴古, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人稠歉。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓掰担,卻偏偏與公主長得像,于是被迫代替她去往敵國和親怒炸。 傳聞我的和親對象是個殘疾皇子带饱,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容