HTTPS基礎(chǔ)

本章是HTTPS那些事兒的第一篇文章,其他相關(guān)文章請參見:前言
本篇主要講解Https的基礎(chǔ)知識,涉及到以下幾點(diǎn):

  • HTTP、SSL/TSL矿辽、HTTPS是什么
  • HTTPS握手過程
  • CA證書是什么

* 注意

本文純手工打造,轉(zhuǎn)載請注明出處郭厌。

HTTP袋倔、SSL/TSL、HTTPS是什么

  1. HTTP是什么
    HTTP的全程是Hyper-Text Transfer Protocol折柠,它可能是當(dāng)今互聯(lián)網(wǎng)上使用的最重要的協(xié)議宾娜。我們?nèi)粘Mㄟ^瀏覽器訪問網(wǎng)站的時候使用的就是該協(xié)議,比如使用PC瀏覽器訪問簡書的首頁扇售,瀏覽器地址欄中會顯示:https://www.reibang.com/前塔。我特意加粗了https,為什么是https不是http呢承冰?請參見"HTTPS是什么"章節(jié)华弓。
  2. SSL/TSL是什么
    首先SSL是Secure Sockets Layer的縮寫,中文翻譯過來是“安全套接層”困乒。它是在上世紀(jì)90年代中期寂屏,由網(wǎng)景公司設(shè)計(jì)的。設(shè)計(jì)該協(xié)議的目的是為了解決HTTP采用明文傳輸娜搂,所帶來的傳輸內(nèi)容會被偷窺(嗅探)和篡改的問題迁霎。
    在1999年,SSL 因?yàn)閼?yīng)用廣泛百宇,成為了互聯(lián)網(wǎng)上的事實(shí)標(biāo)準(zhǔn)欧引。IETF 決定把 SSL 標(biāo)準(zhǔn)化,標(biāo)準(zhǔn)化之后的名稱改為 TLS(Transport Layer Security)恳谎,中文翻譯過來是“傳輸層安全協(xié)議”。為什么把SSL和TLS寫成SSL/TLS呢,因?yàn)檫@兩者其實(shí)是同一個東西因痛,只不過是在發(fā)展到不同階段婚苹,名稱不同而已。
  3. HTTPS是什么
    終于說到了重點(diǎn)HTTPS鸵膏,HTTPS是什么呢膊升?說白了HTTPS就是“HTTP 協(xié)議”和“SSL/TLS 協(xié)議”的組合,可以把 HTTPS 大致理解為——“HTTP over SSL”或“HTTP over TLS”(反正 SSL 和 TLS 差不多)谭企。
    可以簡單理解為在SSL之上傳輸HTTP協(xié)議廓译,舉個例子:可以把HTTP看成是紙質(zhì)信封包裝的信,可以被輕易打開并查看信的內(nèi)容债查。SSL好比是裝信封的保險(xiǎn)箱非区,保險(xiǎn)箱需要密碼才能打開。加了保險(xiǎn)箱之后的信件盹廷,需要有密碼的人才能查看到征绸,這樣信件的傳輸就更加安全了。

HTTPS握手過程

前面說到SSL是為了解決HTTP明文傳輸帶來的問題俄占,所以SSL采用的是加密傳輸管怠。發(fā)送方通過密鑰加密明文,接收方通過密鑰解密成明文缸榄。該密鑰是傳輸成功的關(guān)鍵渤弛,那么這個密鑰是怎么來的呢?這就涉及到我們所說的HTTPS握手了甚带,握手結(jié)束后發(fā)送方和接收方就會得到密鑰了她肯。那么HTTPS的握手過程是怎么樣的呢?


HTTPS握手(單向認(rèn)證)

1). Client Hello
Client發(fā)起連接請求欲低,請求參數(shù)包括客戶端支持的TLS版本列表辕宏、加密算法列表、壓縮算法列表砾莱、隨機(jī)數(shù)random_C和一些擴(kuò)展信息
2). Server Hello
Server接收到Client的Hello請求后瑞筐,根據(jù)Server端的配置以及Client Hello發(fā)送的參數(shù),篩選出與Client最兼容的TLS版本腊瑟、加密算法版本聚假、壓縮算法版本以及隨機(jī)數(shù)random_S
3). Server證書
向client端發(fā)送Server的CA證書
4). Server Hello Finish
通知Client端Server Hello信息發(fā)送結(jié)束
5). 校驗(yàn)Server證書
Client接收到Server證書后,通過本地的證書信任信息進(jìn)行校驗(yàn)闰非,確認(rèn)Server的CA證書是否由可信機(jī)構(gòu)頒發(fā)膘格。除此之外,還會校驗(yàn)證書是否還在有效期财松、域名是否與當(dāng)前訪問域名匹配等
6). Client Key Exchange
Server的CA證書校驗(yàn)通過后瘪贱,Client生成隨機(jī)數(shù)Pre_Master纱控,并采用Server證書中的公鑰加密發(fā)送給Server端。此刻菜秦,客戶端已經(jīng)獲取到全部的生成密鑰需要的信息甜害,則通過協(xié)商的算法生成通信密鑰enc_key:

enc_key=Fuc(**random_C**, **random_S**, **Pre-Master**)

7). Change Cipher Spec
密鑰enc_key生成后,通知Server后續(xù)的通信Client端都使用enc_key進(jìn)行加密通信
8). Finish Handshake
結(jié)合之前所有通信參數(shù)的 hash 值與其它相關(guān)信息生成一段數(shù)據(jù)球昨,使用協(xié)商密鑰 enc_key 與協(xié)商算法將其加密尔店,然后發(fā)送給服務(wù)器用于驗(yàn)證服務(wù)端其生成的enc_key是否正確
9). Change Cipher Spec
Server接收到Client Handshake Finish消息后,生成自己的enc_key主慰,并用enc_key驗(yàn)證Client Handshake Finish信息是否正確嚣州。如果正確,則通知Client后續(xù)通信Server端都使用協(xié)商密鑰enc_key進(jìn)行加密通信
10). Finish Handshake
Server也結(jié)合所有當(dāng)前的通信參數(shù)信息生成一段數(shù)據(jù)并采用協(xié)商密鑰 enc_key與協(xié)商算法加密共螺,并發(fā)送到客戶端
最后该肴,Client端校驗(yàn)Server Finish Handshake信息,如果校驗(yàn)通過璃谨,則會將enc_key作為后續(xù)加密通信的密鑰沙庐。

以上所描述的其實(shí)就是我們說所的單向認(rèn)證過程,如果是雙向認(rèn)證佳吞,只是在單向認(rèn)證的過程中增加Server端對Client端的證書認(rèn)證過程而已拱雏。

CA證書是什么

HTTPS握手過程中,在第3步Server端會發(fā)送其CA證書到Client端底扳。這里所說的CA證書的作用是用來證明當(dāng)前訪問的服務(wù)器是Client想要訪問的服務(wù)器铸抑,而不是他人偽裝成的假服務(wù)器。那么這個CA證書是什么呢衷模?
舉個生活中的例子:
在你去銀行辦卡的時候鹊汛,你要怎么證明你是你呢?一般銀行會要求你出示身份證阱冶,然后驗(yàn)證身份證是否可信刁憋,同時比對上面的照片是不是你。這里所說的身份證就是證明你是你的證據(jù)木蹬,與我們所說的CA證書作用相同至耻。身份證有一個最大的特性:由國家所信任的公安部門頒發(fā)的,銀行可以通過公安部門來校驗(yàn)?zāi)愕纳矸葑C是否可信镊叁。
所以尘颓,為了使CA證書也被大家都信任的話,也引入了類似的機(jī)構(gòu)晦譬,該機(jī)構(gòu)稱為CA(Certification Authority的簡稱)疤苹,該結(jié)構(gòu)頒發(fā)的證書稱為CA證書。HTTPS握手過程中敛腌,Client端會通過本地的證書信任信息校驗(yàn)Server證書卧土,這里所說的證書信任信息其實(shí)就是CA機(jī)構(gòu)相關(guān)的信息惫皱。

CA證書怎么來?

Server端想要獲取到CA證書夸溶,必須向CA機(jī)構(gòu)提出申請逸吵,當(dāng)CA機(jī)構(gòu)審核通過后,才會為Server頒發(fā)證書缝裁。那么這個過程涉及到什么信息呢?
首先CA機(jī)構(gòu)會有自己的公私鑰ca.pub和ca.pri足绅,Server也需要有自己的公私鑰server.pub和server.pri捷绑。
在Server提出申請時,需要提供server.pub和服務(wù)器信息——明文信息(包括證書申請信息氢妈、證書頒發(fā)機(jī)構(gòu)粹污、證書過期時間等)。CA接收到請求后首量,通過各種手段確認(rèn)Server信息的合法性壮吩,通過后會將明文做hash,然后再使用ca.pri對hash進(jìn)行簽名加缘,最后將簽名和明文信息明文放到一起鸭叙,就是我們的CA證書。證書信息類似于下圖:

CA證書結(jié)構(gòu)

有了證書后拣宏,Server端就可以使用證書來發(fā)布服務(wù)了沈贝,Client在會使用CA機(jī)構(gòu)公布的ca.pub對Server的CA證書進(jìn)行校驗(yàn):
首先將明文做hash得到h1,然后通過ca.pub來校驗(yàn)h1與證書中的簽名勋乾,也就是公鑰驗(yàn)簽的過程宋下。
如果你是JAVA開發(fā)人員,可以通過JDK提供的工具KeyTool模擬以上描述的證書申請過程辑莫,可以參考本系列的第四篇《使用keytool模擬CA證書頒發(fā)過程》学歧。

總結(jié)

本篇對HTTP、SSL/TSL各吨、HTTPS枝笨,以及HTTPS中設(shè)計(jì)的HTTPS握手和CA證書做了詳細(xì)描述,解釋了HTTPS相關(guān)的基本概念绅你。本系列文章后續(xù)還會講述java中的HTTPS那些事兒以及Spring的RestTemplate與HTTPS伺帘,如果有興趣請參見后續(xù)文章〖删猓可通過此處尋找到本系列文章的目錄伪嫁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市偶垮,隨后出現(xiàn)的幾起案子张咳,更是在濱河造成了極大的恐慌帝洪,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脚猾,死亡現(xiàn)場離奇詭異葱峡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)龙助,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門砰奕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人提鸟,你說我怎么就攤上這事军援。” “怎么了称勋?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵胸哥,是天一觀的道長。 經(jīng)常有香客問我赡鲜,道長空厌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任银酬,我火速辦了婚禮嘲更,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捡硅。我一直安慰自己哮内,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布壮韭。 她就那樣靜靜地躺著北发,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喷屋。 梳的紋絲不亂的頭發(fā)上琳拨,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機(jī)與錄音屯曹,去河邊找鬼狱庇。 笑死,一個胖子當(dāng)著我的面吹牛恶耽,可吹牛的內(nèi)容都是我干的密任。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼偷俭,長吁一口氣:“原來是場噩夢啊……” “哼浪讳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涌萤,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤淹遵,失蹤者是張志新(化名)和其女友劉穎口猜,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體透揣,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡济炎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辐真。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片须尚。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖侍咱,靈堂內(nèi)的尸體忽然破棺而出恨闪,到底是詐尸還是另有隱情,我是刑警寧澤放坏,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站老玛,受9級特大地震影響淤年,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜡豹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一麸粮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧镜廉,春花似錦弄诲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至塔插,卻和暖如春梗摇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背想许。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工伶授, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人流纹。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓糜烹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親漱凝。 傳聞我的和親對象是個殘疾皇子疮蹦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355

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