HTTPS 工作原理

在說htttps 之前鸳谜,我們先了解一下加密膝藕,會對后面說https 好理解一點(diǎn)

一 加密方式

加密按照加密方式,可以分為以下三種方式

1.1 單向加密

叫做不可逆加密咐扭,對明文的加密產(chǎn)生一個密文芭挽,不能再通過密文,解出來對應(yīng)的明文
一般用于產(chǎn)生消息摘要蝗肪,密鑰加密等袜爪,常見的單向加密有:

  • MD5 : 相信這個大家都都熟悉了,一個明文薛闪,md5 以后辛馆,對應(yīng)一個唯一的密文
  • SHA : 其中又分為 sha192 , sha256
    特點(diǎn):
  1. 不可逆
  2. 輸入一樣,輸出必然相同

1.2 對稱加密

對稱加密豁延,用一個密鑰昙篙,對明文進(jìn)行加密,同理诱咏,同這把密鑰瓢对,也可以對密文進(jìn)行解密
加密和解密,用同一個密鑰胰苏,這種加密方法就是 對稱加密
常用的對稱加密方法有:

  • DES
  • 3DES
  • AES
    特點(diǎn):
  1. 加密方和解密使用同一密鑰
  2. 加密解密的速度比較快

1.3 非對稱加密

對稱加密使用同一把密鑰,相反醇疼,非對稱加密腰池,使用公鑰和私鑰進(jìn)行加密解密
可以使用私鑰加密挂捻,公鑰進(jìn)行解密,同理,也可以使用公鑰加密滋将,私鑰進(jìn)行解密
常見非對稱加密方式的有:

  • RSA
  • DSA
    我們平時最常用的就是 RSA
    特點(diǎn):
  1. 使用兩把密鑰進(jìn)行加密和解密,即公鑰和私鑰
  2. 公鑰加密私鑰解密损合,私鑰加密公鑰可以解密
  3. 加密或者解密非区,速度非常慢
  4. 私鑰和公鑰是成對出現(xiàn)的

二 加密知識總結(jié)

單向加密: 不可逆卵蛉,只要輸入的內(nèi)容一樣,輸出的密文一定是一樣的么库,有任何修改傻丝, 產(chǎn)生的密文都是不同的
對稱加密: 加密和解密使用同一把密鑰,加密解密速度特別快
非對稱加密: 使用公鑰和私鑰進(jìn)行加密和解密诉儒,公鑰加密私鑰解葡缰,私鑰加密公鑰解。加密解密的過程非常慢
公鑰:就是可以公開給別人的
私鑰:就是不可以公開給別人忱反,是自己私有保留的泛释。

注:以上內(nèi)容,純粹是加密的知識温算,和 https 沒有任何關(guān)系怜校。下面我們開始講解 https 的過程。我們先看一個需求
解決了這個需求注竿,就明白了 https 的過程了茄茁。

從一個需求開始

假設(shè)有這樣一個需求:小波和小浪需要通信,少男少女寫情書嘛蔓搞,肯定不想讓別人看到胰丁,所以需要安全的通信。

問題一:小波如何安全的把內(nèi)容傳給小浪喂分?

通過上面的加密知識锦庸,很容易就想到,把通信的內(nèi)容蒲祈,給加密了就行了

問題二:使用哪種加密方式加密呢甘萧?

單向加密肯定不行,小浪收到信梆掸,解不出來扬卷,這戀愛沒法談
對稱加密可以 ,小浪只要有密鑰酸钦,就可以把內(nèi)容解出來
非對稱加密也可以 怪得,小波用自己的私鑰加密,小浪拿到小波的公鑰卑硫,也可以把內(nèi)容解出來

問題三:對稱加密徒恋,非對稱加密都可以,到底使用哪種呢欢伏?

對稱加密速度快入挣,非對稱加密速度慢
對于小波,小浪這倆人來說硝拧,經(jīng)常一聊就是幾個小時径筏,數(shù)據(jù)是非常多的
如果使用非對稱加密葛假,因?yàn)榧用芤猜饷芤猜烫瘢臅r間了聊训,肯定不選擇
那么答案就是,使用對稱加密方式 夷恍,因?yàn)榧用芸彀∧д#〔ㄐ±耍汲钟型话衙荑€酿雪,雙方互相都能解密出來對方發(fā)的信遏暴。
總結(jié):小波和小浪通信,使用對稱加密指黎,假如密鑰是 S , 雙方都使用同一把密鑰 S 進(jìn)行加密朋凉,解密
這樣小波和小浪就能愉快的通信了,而且內(nèi)容是加密的醋安,加密解密的速度也很快杂彭,這就聊咋了
但是這樣有一個隱患,就是密鑰 S 吓揪, 在傳輸?shù)倪^程中亲怠,不小心被 老王 截獲了
造成的后果就是:小波,小浪以及老王柠辞,都有相同的密鑰 S
那么团秽,小波和小浪之間沒有秘密可言了,他們發(fā)的信叭首,老王都能解開看习勤,看完再加密,再發(fā)給小浪焙格,這不得壞事了

1.png

那么如何解決 密鑰S 在傳輸?shù)倪^程中图毕,被別人截獲的情況呢?
對稱加密方式對密鑰S進(jìn)行加密眷唉, 再傳輸予颤,那么此時的密鑰S1也是有被截獲的風(fēng)險
那就再對 S1 進(jìn)行加密,再傳輸...... 冬阳, 這樣就無限套娃了蛤虐。肯定是不得行的摩泪。


現(xiàn)在的問題,變成了:小波如何把 密鑰S 安全的傳給小浪劫谅?

問題四:小波如何安全的把密鑰S 傳輸給小浪见坑?

如果密鑰S 的傳輸過程不安全嚷掠,后面的通信就是不安全的,反之荞驴,如何密鑰S 能安全的傳輸給小浪不皆,后面的通信就是安全的。
通過上面的加密知識熊楼,有下面這樣一個安全的加密傳輸方式

  1. 小波使用非對稱加密進(jìn)行通信霹娄,首先小波生成了自己的一對私鑰和公鑰,為了方便鲫骗,分別叫做 privateKey, publicKey
  2. 小波把 publicKey 給了小浪
  • 方法一 小波用自己的 privateKey犬耻,對 密鑰S 進(jìn)行加密,加密后的密文 S0 傳輸給小浪执泰,小浪用 publicKeyS0 解密出來 密鑰S
  • 方法二 小浪用 publicKey密鑰S 進(jìn)行加密枕磁,加密后的密文 S0 傳輸給小波,小波用 privatekeyS0 解密出來 密鑰S
    上面术吝,方法一 是不可行的计济,因?yàn)樾〔ǖ?publicKey 是公開的,誰都可以下載排苍,也就是說沦寂,老王也有小波的 publicKey,也可以對 S0 進(jìn)行解密出來 密鑰S
    方法二是可行的淘衙,因?yàn)?privateKey 只有小波有传藏,小浪用小波的公鑰進(jìn)行加密,只有小波能解開幔翰,其它任何人都解不開
    所以上面的解決方案就是:
    使用非對稱加密 方式漩氨,對 密鑰S 進(jìn)行加密,進(jìn)行傳輸
    有人說遗增,不對啊叫惊,非對稱加密 性能不好,加密解密特別慢做修,要不剛一開始霍狰,小波,小浪直接使用非對稱加密 進(jìn)行通信饰及,不就行了嘛
    說的是對的蔗坯,不過我們這里只是使用非對稱加密密鑰S 進(jìn)行加密,這個數(shù)據(jù)量很小的燎含,而且密鑰S 安全的傳輸給對方之后
    后面的通信就直接使用對稱加密了宾濒,這樣效率就高了,而非對稱加密只是在開始協(xié)商怎么安全傳輸密鑰S 的階段使用了屏箍,此階段完成后绘梦,就不再需要使用了橘忱。
    通過上面可知:非對稱加密有這樣的特性
    我只要拿到誰的公鑰,我和誰通信卸奉,就是安全的
    比如钝诚,你有一對私鑰和公鑰,我只要拿到你的公鑰榄棵,然后用你的公鑰進(jìn)行加密傳輸內(nèi)容凝颇,只有你自己能解開,因?yàn)樗借€只有你自己有
    如下:
    2.png

    反過來疹鳄,小波用自己的私鑰加密拧略,其它人使用小波的公鑰解密,這個過程的作用是什么的呢尚辑?
    答案是:驗(yàn)證身份的辑鲤。
    只要小波用自己的私鑰加密,其它人用小波的公鑰如果能解開杠茬,那么證明這封信一定以及肯定是小波寫的
    比如你需要發(fā)一個通知月褥,但是又要確保這個通知一定是你發(fā)的,為了怕別人在中間涂改(比如古代假傳圣旨瓢喉,就是沒有做好身份驗(yàn)證)
    你可以用你的私鑰對通知進(jìn)行加密宁赤,其它人想看的話,通過下載你的公鑰栓票,進(jìn)行解密决左,能解密出來,說明通知一定是你發(fā)的走贪。
    因?yàn)槠渌巳绻谥虚g涂改佛猛,但是又沒有你的私鑰重新加密,所以是行不通的坠狡。
    總結(jié) :通過以上的描述继找,我們解決了好幾個問題,經(jīng)過了以下幾個過程逃沿。
  1. 小波和小浪為了安全的通信婴渡,采用加密方式,對內(nèi)容進(jìn)行加密傳輸
  2. 對比來對比去凯亮,只能選對稱加密這種加密方式边臼,對內(nèi)容進(jìn)行加密傳輸
  3. 但是對稱加密的密鑰S ,傳輸過程不安全假消,容易被老王竊取柠并,怎么辦呢
  4. 小波想到了非對稱加密方式,于是就生成了一對私鑰公鑰,并且把公鑰給了小浪
  5. 小浪就用公鑰對密鑰S 進(jìn)行加密臼予,傳給小波
  6. 因?yàn)槭怯昧诵〔ǖ墓€加密的亿傅,又因?yàn)樗借€只有小波自己有,所以瘟栖,只有小波能解密。這個過程哪怕老王截獲了密文谅阿,也解密不了
  7. 這樣半哟,小波用自己的私鑰解密出來了 密鑰S
  8. 此時 小波和小浪就用對稱加密, 密鑰S 签餐, 進(jìn)行愉快的通信了寓涨,比如商量彩禮給多少,酒席在哪辦氯檐,蜜月在哪度
  9. 這樣戒良,這個通信過程就是安全的了。
    上面的過程很完美冠摄,但是道高一尺糯崎,魔高一丈啊,老王腦子靈光特別好使啊河泳,又想出來一招
    既然你倆用非對稱加密沃呢,我截取到密文也解密不了,那就換個法子拆挥。
    如果小浪在獲取小波的公鑰的過程薄霜,出了問題,比如小浪獲取的不是小波的公鑰纸兔,而且老王的公鑰呢(此時小浪還以為手里的公鑰是小波的呢)
    會發(fā)生什么惰瓜?先看一下圖(也就是所謂的中間人攻擊)
    5.png

    根據(jù)上圖,老王汉矿,也叫做中間人崎坊,上圖就是中間人攻擊,流程如下:
  10. 小浪在獲取小波公鑰的過程中负甸,被老王給掉包成了自己的公鑰流强,發(fā)給了小浪
  11. 小浪誤以為手里的公鑰是小波的 (其實(shí)是老王的公鑰了),所以就用老王的公鑰對密鑰S 進(jìn)行加密呻待,得到密文S0
  12. 密文S0 發(fā)給小波的過程中打月,被老王攔截,老王就用自己的私鑰解密蚕捉,得到了密鑰S
  13. 老王得到密鑰S 后奏篙,自己備份一份,再把此 密鑰S,用小波的公鑰加密秘通,得到密文S1, 發(fā)給小波
  14. 小波得到 密文S1 后为严,用自己的私鑰解密,得到 密鑰S
  15. 以后肺稀,小波和小浪第股,就用對稱加密方式, 密鑰S 進(jìn)行通信了
  16. 他倆還以為很安全话原,其實(shí)通信的內(nèi)容早就被老王先看了一遍了夕吻。還是不安全
    啊啊啊,要瘋了繁仁,為了通信安全涉馅,我們就加密,但是加密的密鑰傳輸又不安全了
    為了密鑰傳輸安全黄虱,我們生產(chǎn)了私鑰公鑰對稚矿,把公鑰給小浪,小浪用公鑰對密鑰加密再傳輸
    這樣就只有小波能解密了捻浦,沒曾想晤揣,公鑰的傳輸又不安全了。
    談個戀愛好難啊朱灿,老王啊碉渡,干的都叫啥事啊。母剥。滞诺。
    出了問題,總得解決啊环疼,現(xiàn)在是傳輸公鑰的過程习霹,又不安全了
    這和上面的問題 怎么把信件內(nèi)容安全的傳輸給對方?以及怎``么把密鑰安全的傳輸給對方炫隶?``是類似的
    現(xiàn)在這個問題是:怎么把公鑰安全的傳輸給對方淋叶?
    感覺進(jìn)入到了死循環(huán)了,不管是把 信件內(nèi)容安全傳輸伪阶,還是把密鑰安全傳輸煞檩,還是把 公鑰安全安全傳輸
    本質(zhì)都是類似的,只不過傳輸?shù)臇|西不一樣栅贴,采用的方法不一樣

問題五:小波如何安全的把自己的公鑰傳輸給小浪

經(jīng)過上面我們解決的問題可以知道

  • 如何安全的把通信內(nèi)容傳輸給對方斟湃?
    解決方法:我們用對稱加密的方式進(jìn)行通信
  • 如何安全的把密鑰S 安全的傳輸給對方 ?
    解決方法:采用非對稱加密方式檐薯,小波把自己的公鑰給小浪
    小浪用小波的公鑰對密鑰S 加密傳給小波凝赛,小波用自己的私鑰解密
    這個過程只有小波能解密注暗,所以是安全的
    現(xiàn)在新的問題是:公鑰如何安全傳輸給對方 ?
    難道再用對稱或者非對稱加密墓猎?都不對捆昏。這樣已經(jīng)行不通了。
    想象一下毙沾,生活中骗卜,我們有個矛盾,有個問題左胞,我們最相信的是誰膨俐,肯定是政府啊
    現(xiàn)在我從小波那下載公鑰已經(jīng)不靠譜了,已經(jīng)不安全了
    到底我應(yīng)該相信誰呢罩句?到底從誰那獲取的公鑰是小波真正的公鑰呢?
    所以敛摘,我們也搞一個機(jī)構(gòu)门烂,我們大家都相信這個機(jī)構(gòu),反正我就是無條件百分百相信這個機(jī)構(gòu)兄淫,這是規(guī)定屯远。
    我們把這個機(jī)構(gòu)起一個名字,叫做 CA 機(jī)構(gòu)
    好了捕虽,現(xiàn)在我們把問題拋給了 CA 機(jī)構(gòu)慨丐,小浪也好,小麗也好泄私,小美也好房揭,只要獲取小波的公鑰,都從 CA 那里獲取
    CA 機(jī)構(gòu)哪來的小波的公鑰呢晌端?肯定是小波給的啊捅暴,對于小波來說,反正我已經(jīng)把我的公鑰給你 CA 了咧纠,你 CA 機(jī)構(gòu)就得保證安全的傳輸給別人
    這 CA 也是夠倒霉的蓬痒,你們搞不定的活,全拋給了我漆羔,又不是我和小浪談戀愛梧奢。。演痒。
    抱怨歸抱怨亲轨,CA 是怎么解決的呢?
    答案是 數(shù)字證書 鸟顺, 怎么又出來一個名字瓶埋,數(shù)字證書是個什么鬼,是不是已經(jīng)繞暈了,不要急养筒,這個時候暈了曾撤,再回過過頭再看看前面的寫的
    多看看幾遍,別忘了晕粪,筆者也是看了 N 多遍挤悉,自己問自己問題,自己來嘗試解決巫湘,才搞明白這個過程的装悲。
    先來說一個結(jié)論:數(shù)字證書就是解決公鑰傳輸問題的
    重要的事件重復(fù)三遍 :數(shù)字證書就是解決公鑰傳輸問題的數(shù)字證書就是解決公鑰傳輸問題的 尚氛,數(shù)字證書就是解決公鑰傳輸問題的
    在說數(shù)字證書之前诀诊,我們先解決這樣一個問題

問題六:信件的傳輸過程中,如何保證內(nèi)容不被篡改阅嘶,即信息的完整性属瓣?

結(jié)合前面學(xué)到的加密知識,我們可以用單向加密算法讯柔,我們以 md5 加密算法舉例

  1. 小波給小浪寫完信后抡蛙,用 md5 對信件的內(nèi)容作一次加密運(yùn)算,得到一個唯一的字符串魂迄,我們把這個字符串起個名粗截,叫做摘要
  2. 小波在信件的底部,寫上單向加密算法 md5, 以及 md5 對信件內(nèi)容運(yùn)算出來的摘要捣炬,一塊發(fā)給小浪
  3. 小浪收到信后熊昌,看到信件底部是 md5 算法,于是就用 md5 對信件內(nèi)容進(jìn)行加密算法湿酸,得到 新的摘要
  4. 小浪將 新的摘要 和信件底部附加的 摘要 進(jìn)行對比浴捆,如果相等,說明信件沒有被人改過
  5. 如果不相等稿械,說明信件內(nèi)容被別人改過了选泻。
    如下圖表示此過程。


    4.png

    但就是上面這個過程美莫,也是有問題的页眯,如果老王又出現(xiàn)了呢

  6. 首先老王拿到信了,把信給改了
  7. 老王用 md5 算法 厢呵,重新把信件內(nèi)容給 md5 一下窝撵,得到新的加密串
  8. 老五把新的加密串,放在信件底部襟铭,發(fā)給了小浪
  9. 此時小浪收到信后碌奉,是沒辦法判斷出來短曾,信件是不是被篡改過的。
    如下圖表示:
    所以赐劣,單純的使用單向加密算法 嫉拐,生成摘要,是不能保證內(nèi)容的完整性的
    那么如何才能保證信件的完整性魁兼,不被人篡改呢婉徘?
    答案是,簽名
    又出來一個名詞咐汞,簽名盖呼,本文的名詞太多了。
    通過前面學(xué)習(xí)化撕,我們知道几晤,非對稱加密,有 2 個作用植阴,其中一個就是身份認(rèn)證
    還是上面的例子我蟹瘾, 我們改一下:
  10. 小波用 md5 對信件內(nèi)容進(jìn)行運(yùn)算,得到一個字符串墙贱,我們起名叫摘要
  11. 小波用自己的私鑰對摘要進(jìn)行加密運(yùn)算,得到另一個字符串贱傀,我們起名叫簽名
  12. 將 md5, 摘要惨撇, 簽名一塊發(fā)給小浪
  13. 小浪用小波的公鑰對簽名進(jìn)行解密,到得信件摘要府寒,假如為 d1
  14. 小浪用 md5 對信件內(nèi)容進(jìn)行運(yùn)算魁衙,得到信件摘要,假如為 d2
  15. 對比 d1 和 d2 是否相等株搔,相等說明信件內(nèi)容沒有被篡改過
  16. d1 和 d2 不相等剖淀,說明信件內(nèi)容被篡改過。
    此時纤房,這個過程就是安全的了
    如果老王再次截取了信件纵隔,老王可以修改信件內(nèi)容,再次用 md5 算出一個新的摘要出來
    但是簽名炮姨,老王是修改不了的捌刮。因?yàn)楹灻怯玫男〔ǖ乃借€加密的,就算老王能解密出來
    老王是沒有辦法生成新的簽名的舒岸,因?yàn)樾〔ǖ乃借€只有小波自己有绅作。
    而且小浪收到信后,是用小波的公鑰進(jìn)行對簽名解密的蛾派,老王假如用自己的私鑰對摘要進(jìn)行加密生成新的簽名
    小浪用小波的公鑰是解密不了的俄认。
    此時再來進(jìn)行一時概念的定義
    摘要 :md5(或者其它單向加密算法)个少,對內(nèi)容進(jìn)行加密出來的字符串,就叫做摘要
    簽名 :小波用私鑰對摘要進(jìn)行加密眯杏,加密出來簽字串夜焦,就叫做簽名
    驗(yàn)簽 :小浪用小波的公鑰,對簽名進(jìn)行解密操作役拴,解密出來的摘要和原來的對比糊探,就叫做驗(yàn)簽

問題七:數(shù)字證書是怎么由來的?

數(shù)字證書是由 CA 機(jī)構(gòu)頒發(fā)的河闰,首先小波如果想要有一個數(shù)字證書科平,就需要向 CA 機(jī)構(gòu)申請
CA 機(jī)構(gòu)就會給小波頒發(fā)一張數(shù)字證書,里面包含了

  1. 公鑰:小波的公鑰
  2. 頒發(fā)者:CA(證書認(rèn)證機(jī)構(gòu))
  3. 有效期:證書的使用期限
  4. 摘要算法:指定的摘要算法姜性,用來計算證書的摘要
  5. 指紋:也就是證書的摘要瞪慧,保證證書的完整性
  6. 簽名算法:用于生成簽名,確保證書是由 CA 簽發(fā)
  7. 序列號:證書的唯一標(biāo)識
    知道了證書里面包含的內(nèi)容部念,我們了解一下證書是如何產(chǎn)生的弃酌?
  8. 將小波的公鑰,頒發(fā)者儡炼,有效期妓湘,摘要算法 ,哈希算法寫入證書
  9. CA 根據(jù)證書中的指定的哈希算法乌询,計算出整個證書的摘要榜贴,即 digest
  10. CA 根據(jù)簽名算法以及上一步計算出來的摘要,CA用自己的私鑰對摘要進(jìn)行加密妹田,生成 CA 的簽名唬党,即 signature
  11. 最后把摘要,簽名以及證書的基本信息鬼佣,一起發(fā)布驶拱,就得到了小波的證書

問題八:數(shù)字證書的作用

從上面我們知道,數(shù)字證書就是解決公鑰傳輸問題的晶衷,同時我們也知道蓝纲,數(shù)字證書就是一個文件
既然數(shù)字證書是用來解決公鑰的安全傳輸?shù)模敲吹降兹绾谓鉀Q傳輸問題的呢
現(xiàn)在小波有了自己的證書了晌纫,我們就不會公開傳輸公鑰了驻龟,只需要傳輸證書就行了
那么,小波和小浪現(xiàn)在需要安全的通信缸匪,那么流程是怎么樣的呢翁狐?如下

  1. 小波把自己的數(shù)字證書發(fā)送給小浪
  2. 擔(dān)心證書被老王掉包,小浪需要對證書進(jìn)行驗(yàn)證凌蔬,驗(yàn)證什么呢露懒?
  3. 其實(shí)就是驗(yàn)證此數(shù)字到底是不是 CA 機(jī)構(gòu)頒發(fā)的闯冷,不是 CA 機(jī)構(gòu)頒發(fā)的證書,我們就認(rèn)為傳輸是不安全的懈词。
  4. 驗(yàn)證數(shù)字證書是不是 CA 頒發(fā)的蛇耀,需要有 CA的公鑰 。坎弯。纺涤。(為啥需要 CA 的公鑰啊,因?yàn)樽C書上的簽名抠忘,是 CA 的私鑰加密的啊撩炊,只有 CA 的公鑰才能解密啊)
    啊啊啊崎脉,受不了啦拧咳,搞了半天怎么又需要公鑰,我們講了半天的數(shù)字證書囚灼,就是為了傳輸公鑰的
    所以骆膝,換成下面的描述會好點(diǎn)
    驗(yàn)證數(shù)字證書是不是 CA 頻發(fā)的,需要 CA 的數(shù)字證書(因?yàn)槔锩嬗?CA 的公鑰)
  5. 那我們?nèi)ツ睦镎?CA 的數(shù)字證書呢灶体?從上面的描述阅签,我們知道了,需要一個數(shù)字證書蝎抽,就向 CA 申請政钟,CA 給我們頒發(fā)。
  6. 那么 CA 機(jī)構(gòu)自己的數(shù)字證書哪來的呢织中?答案是也是自己給自己頒發(fā)的锥涕,那么我們從哪里獲取呢衷戈?
  7. 如果從網(wǎng)上狭吼,或者從其它服務(wù)器下載,又有可能會被掉包殖妇,又不安全了刁笙。
  8. 這真的是個傷心的故事,但是今天兔哥非要把這個故事講完谦趣。
  9. 從網(wǎng)上下載或者從其它服務(wù)器下載數(shù)字證書疲吸,都不安全的,那么怎么樣才是安全的呢前鹅?
  10. 答案就是:你的電腦安裝操作系統(tǒng)的時候摘悴,操作系統(tǒng)里面,就已經(jīng)內(nèi)置了非常多的 CA 機(jī)構(gòu)的數(shù)字證書了
  11. 也就說舰绘,只要你安裝了操作系統(tǒng)蹂喻,不管是 windows, linux, 或者 mac , 或者你剛買的電腦葱椭,里面都已經(jīng)有了 CA 機(jī)構(gòu)的數(shù)字證書了
  12. 這個是可以相信的,是真的 CA 機(jī)構(gòu)的數(shù)字證書口四,不會有假孵运。(除非你安裝的是盜版的操作系統(tǒng),所以我們盡量用正版操作系統(tǒng))
    上面的過程真的是復(fù)雜啊蔓彩,兔哥也是花了很久才搞明白的治笨,知道這塊面試會坑很多人,其實(shí) https 過程不知道赤嚼,也沒啥關(guān)系
    也不影響你寫代碼旷赖,但是那些面試官就死愛問這塊,好像他們能搞懂這個過程很了不起似的探膊,你問點(diǎn)設(shè)計模式它不香嘛杠愧。
  13. 我們的電腦,天生就有 CA 的數(shù)字證書逞壁,而且是真的流济。天生的。上天定的腌闯,上天最大
    那么我們就可以對數(shù)字證書進(jìn)行辨別真?zhèn)瘟恕?/li>

問題九:對數(shù)字證書的驗(yàn)證

從上面可以知道:
小浪收到了小波的數(shù)字證書绳瘟,首先要對數(shù)字證書進(jìn)行驗(yàn)證,就是驗(yàn)證此數(shù)字證書是不是 CA 頒發(fā)的
因?yàn)槲覀儾僮飨到y(tǒng)里面內(nèi)置了所有 CA 機(jī)構(gòu)的數(shù)字證書姿骏,所以糖声,我們就可以對數(shù)字證書進(jìn)行驗(yàn)證
在說流程之前,先來簡單的復(fù)習(xí)一下前面的分瘦,摘要和簽名怎么來的

摘要 = md5 (證書內(nèi)容) :單向加密算法蘸泻,比如 md5,對證書整個內(nèi)容進(jìn)行加密嘲玫,得到摘要悦施,也叫做證書的指紋
簽名 = privateKey (摘要) : 私鑰對上一步摘要加密,產(chǎn)生簽名
數(shù)字證書的驗(yàn)證流程如下:

  1. 小浪用內(nèi)置的 CA 的數(shù)字證書去团,得到 CA 的公鑰
  2. 小波發(fā)過來的數(shù)字證書抡诞,我們假如叫做 C , 小浪用 CA 的公鑰對 C 證書里面的簽名進(jìn)行解密土陪,得到摘要 D
  3. 小浪根據(jù) C 證書里面的摘要算法昼汗,假如是 md5,小浪用 md5 對證書整個內(nèi)容進(jìn)行計算鬼雀,得到摘要 D1
  4. 小浪對比摘要 D 和摘要 D1 是否相等
  5. 如果 D == D1 顷窒,那么說明此證書就是 CA 頒發(fā)的
  6. 如果 D != D1 , 那么說明此證書不是 CA 頒發(fā)的源哩,是有風(fēng)險的鞋吉,不安全的
    假如證書驗(yàn)證通過出刷,就說明此證書的確是 CA 頒發(fā)的,此時小浪就可以從數(shù)字證書中拿到小波的公鑰了
    因?yàn)樾〔ㄔ谏暾垟?shù)字證書時坯辩,數(shù)字證書中所有者是小波馁龟,CA 是會驗(yàn)證小波的身份的,所以數(shù)字證書中小波的公鑰是真實(shí)的
    由至此漆魔,我們總算完成了一件事:小波正確的把自己的公鑰安全的傳輸給了小浪
    這件事的成立 坷檩,接下來我們的工作就好做多了。接下來改抡,我們看一下具體的傳輸過程

問題十 :完整的傳輸過程

下面我們看一下小波再次給小浪通信矢炼,就和前面的不一樣了,我們來看下:

  1. 小波把寫完的信阿纤,在信的底部句灌,附加上摘要算法,假如是 MD5欠拾, 以及通過 MD5 算出來的摘要
  2. 小波用自己的私鑰胰锌,對上一步的摘要進(jìn)行加密,得到簽名
  3. 小波把摘要算法藐窄,摘要资昧,簽名都附加到信件底部以后,再把自己的數(shù)字證書荆忍,一起發(fā)送給小浪
  4. 小浪收到信后格带,首先用自己的 CA 數(shù)字證書,拿到 CA 公鑰刹枉,再用 CA 公鑰對數(shù)字證書進(jìn)行驗(yàn)證(也就是上面我們講的流程)
  5. 數(shù)字證書驗(yàn)證通過后叽唱,說明證書就是 CA 頒發(fā)的,沒有被篡改
  6. 小浪就從證書中拿到了小波的公鑰
  7. 有了小波的公鑰微宝,接下來的過程棺亭,就是對信件內(nèi)容進(jìn)行驗(yàn)證了
    對信件內(nèi)容的驗(yàn)證流程如下(前面其實(shí)我們講過)
  8. 小浪用小波的公鑰,對信件的簽名進(jìn)行解密芥吟,得到信件的摘要 D1
  9. 小浪用摘要算法侦铜,對信件進(jìn)行運(yùn)算专甩,得到信件的摘要 D2
  10. 小浪對比 D1 是否等于 D2
  11. 如果不相等钟鸵,說明信件被人篡改過,不安全
  12. 如果相等涤躲,說明棺耍,信件內(nèi)容沒有被篡改過
  13. 相等的情況,小浪就拿到了信件的內(nèi)容
    總結(jié):
    以上所有的內(nèi)容种樱,是數(shù)字證書蒙袍,加密解密俊卤,簽名,驗(yàn)簽的過程害幅,還沒有正式講 https 的過程呢消恍。
    有了以上的知識,我們講起來 https 就容易的多了以现。下面我們看一張圖
    6.png

    我們以訪問 www.helloworld.net 網(wǎng)站為例狠怨,講解 https 的過程
    此過程分為 3 個階段,我們在下面描述此 3 個階段
    訪問 www.helloworld.net 的過程 階段如下
  • 網(wǎng)站申請證書階段
  1. 網(wǎng)站向 CA 機(jī)構(gòu)申請數(shù)字證書(需要提交一些材料邑遏,比如域名)
  2. CA 向證書中寫入摘要算法佣赖,域名,網(wǎng)站的公鑰等重要信息
  3. CA 根據(jù)證書中寫入的摘要算法记盒,計算出證書的摘要
  4. CA 用自己的私鑰對摘要進(jìn)行加密憎蛤,計算出簽名
  5. CA 生成一張數(shù)字證書,頒發(fā)給了 www.helloworld.net
  6. 網(wǎng)站的管理員纪吮,把證書放在自己的服務(wù)器上
  • 瀏覽器驗(yàn)證證書階段
  1. 瀏覽器在地址欄中輸入 https://www.helloworld.net俩檬,并回車
  2. 服務(wù)器將數(shù)字證書發(fā)送給瀏覽器
  3. 瀏覽器用操作系統(tǒng)內(nèi)置的 CA 的數(shù)字證書,拿到 CA 的公鑰
  4. 瀏覽器用 CA 公鑰對 www.helloworld.net 的數(shù)字證書進(jìn)行驗(yàn)簽
  5. 具體就是碾盟,瀏覽器用 CA 公鑰犁河,對 helloworld 的數(shù)字證書中的簽名進(jìn)行解密,得到摘要 D1
  6. 瀏覽器根據(jù) helloworld 數(shù)字證書中的摘要算法摇予,計算出證書的摘要 D2
  7. 對比 D1 和 D2 是否相等珊膜。
  8. 如果不相等,說明證書被掉包了
  9. 如果相等嚼沿,說明證書驗(yàn)證通過了估盘。
  • 協(xié)商對稱加密密鑰階段
  1. 瀏覽器驗(yàn)證數(shù)字證書通過以后
  2. 瀏覽器拿到數(shù)字證書中的公鑰,也就是 www.helloworld.net 網(wǎng)站的公鑰
  3. 瀏覽器有了網(wǎng)站的公鑰后骡尽,就用公鑰進(jìn)行對密鑰S 進(jìn)行加密攀细,加密以后的密文發(fā)送給服務(wù)器
  4. 服務(wù)器收到密文后,用自己的私鑰進(jìn)行解密境钟,得到密鑰S
  5. 此后瀏覽器俭识,服務(wù)器雙方就用密鑰S 進(jìn)行對稱加密的通信了。
    終止所述磁椒,終于講完了玫芦,花了整整一天的時間
    過程那么多桥帆,其實(shí)抓住幾個關(guān)鍵的問題是很簡單的,本質(zhì)上還是兩個人调窍,如何安全高效的進(jìn)行通信
    我們再次簡單的總結(jié)一下张遭,采用一問一答的方式菊卷,我覺得比較好
    問題一:小波和小浪安全的通信,怎么做歉甚?
    答:通過加密
    問題二:通過哪種加密方式通信扑眉,更高效腰素?
    答:對稱加密
    因?yàn)椋瑔蜗蚣用芎獗悖瑳]辦法解密洋访,不行
    非對稱加密姻政,太慢,也不行
    只有對稱加密理肺,速度快
    問題三:采用對稱加密妹萨,密鑰 S 怎么安全傳輸炫欺?
    答:小浪使用小波的公鑰品洛,對密鑰S 進(jìn)行加密,傳給小波
    小波用自己的私鑰解密
    問題四:小波如何安全的把自己的公鑰傳輸給小浪帽揪?
    答:使用數(shù)字證書
    具體就是 小波向 CA 申請一個自己的數(shù)字證書转晰,把自己的公鑰放在證書中
    小波將數(shù)字證書發(fā)送給小浪
    問題五:小浪如何驗(yàn)證數(shù)字證書的真實(shí)性士飒?
    答:小浪用操作系統(tǒng)內(nèi)置的 CA 的數(shù)字證書酵幕,拿到 CA 的公鑰,用 CA 的公鑰邓深,對數(shù)字證書進(jìn)行驗(yàn)簽
    驗(yàn)簽通過庐完,說明數(shù)字證書是真的徘熔。
    以上幾個問題酷师,希望讀者多問問自己,如果是自己懂讯,應(yīng)該怎么解決這個問題褐望。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瘫里,一起剝皮案震驚了整個濱河市谨读,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铐尚,老刑警劉巖宣增,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件统舀,死亡現(xiàn)場離奇詭異劳景,居然都是意外死亡盟广,警方通過查閱死者的電腦和手機(jī)筋量,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門桨武,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呀酸,“玉大人,你說我怎么就攤上這事窿吩∪已悖” “怎么了轧邪?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵忌愚,是天一觀的道長菜循。 經(jīng)常有香客問我癌幕,道長勺远,這世上最難降的妖魔是什么胶逢? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任饰潜,我火速辦了婚禮彭雾,結(jié)果婚禮上薯酝,老公的妹妹穿的比我還像新娘吴菠。我一直安慰自己,他們只是感情好占哟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谬哀,像睡著了一般史煎。 火紅的嫁衣襯著肌膚如雪篇梭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天悍手,我揣著相機(jī)與錄音,去河邊找鬼坦康。 笑死诡延,一個胖子當(dāng)著我的面吹牛肆良,可吹牛的內(nèi)容都是我干的惹恃。 我是一名探鬼主播朗儒,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼榆鼠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起神妹,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鸵荠,失蹤者是張志新(化名)和其女友劉穎姨伤,沒想到半個月后乍楚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年芜壁,在試婚紗的時候發(fā)現(xiàn)自己被綠了顷牌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窟蓝。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡套耕,死狀恐怖冯袍,靈堂內(nèi)的尸體忽然破棺而出康愤,到底是詐尸還是另有隱情择膝,我是刑警寧澤踊赠,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站伦籍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏作儿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妒蛇。 院中可真熱鬧,春花似錦陶耍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽留凭。三九已至,卻和暖如春求冷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留塞琼,地道東北人毅往。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓渴丸,卻偏偏與公主長得像戒幔,于是被迫代替她去往敵國和親诗茎。 傳聞我的和親對象是個殘疾皇子王污,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

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

  • 前言 最近在面試中被問到了HTTPS的相關(guān)問題司浪,加上密碼學(xué)也剛好學(xué)到公鑰密碼學(xué)饮睬,我就趁熱打鐵割去,整理一下HTTPS相...
    卓三陽閱讀 2,956評論 0 5
  • HTTPS(HyperText Transfer Protocol over Secure Socket Laye...
    david161閱讀 1,711評論 0 0
  • 本文摘錄參考: 細(xì)說 CA 和證書(主要講解 CA 的使用) 數(shù)字簽名是什么?(簡單理解原理) 深入淺出 HTTP...
    foveni閱讀 230評論 0 0
  • 在上網(wǎng)獲取信息的過程中向拆,我們接觸最多的信息加密傳輸方式也莫過于 HTTPS 了。每當(dāng)訪問一個站點(diǎn),瀏覽器的地址欄中...
    jianshu小趙閱讀 1,131評論 0 0
  • HTTPS 在內(nèi)容傳輸?shù)募用苌鲜褂玫氖菍ΨQ加密噪奄,非對稱加密只作用在證書驗(yàn)證階段 SSL采用一種叫做公開密鑰加密(P...
    next_discover閱讀 870評論 0 1