1、什么是https?什么是https證書(shū)?什么是TLS?
答:HTTPS是一種通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行安全通信的傳輸協(xié)議,經(jīng)由HTTP進(jìn)行通信,利用SSL/TLS建立全信道,加密數(shù)據(jù)包。HTTPS使用的主要目的是提供對(duì)網(wǎng)站服務(wù)器的身份認(rèn)證,同時(shí)保護(hù)交換數(shù)據(jù)的隱私與完整性。
答:HTTPS證書(shū),又稱(chēng)SSL證書(shū),是一種數(shù)字證書(shū)。由CA(Certificate Authority證書(shū)頒發(fā)機(jī)構(gòu))頒發(fā)。
答:TLS是傳輸層加密協(xié)議。
2、根CA從哪里來(lái)?
答:每個(gè)瀏覽器都有根證書(shū)庫(kù),所以大多數(shù)操作系統(tǒng)的根CA證書(shū)是默認(rèn)安裝的。
- 為什么需要CA機(jī)構(gòu)頒發(fā)證書(shū)?
答:防止”中間人“攻擊,同時(shí)可以為網(wǎng)站提供身份證明。
4、數(shù)字證書(shū)是如何生成的?
答:先hash再加密。網(wǎng)站把自己的公鑰和其他信息提供給CA,CA會(huì)對(duì)這些信息和公鑰進(jìn)行哈希運(yùn)算得到一串更短的字符(提高加解密速度,非對(duì)稱(chēng)加密效率較差),然后用CA自己的私鑰對(duì)這串哈希字符進(jìn)行加密,就得到“數(shù)字簽名”了。
所以雖然“數(shù)字證書(shū)”的網(wǎng)站信息都是明文的,但是核心就在于CA的“數(shù)字簽名”了。因?yàn)榧用艿乃借€只有CA知道。
5、瀏覽器如何保證網(wǎng)站發(fā)來(lái)的數(shù)字證書(shū)的合法性?
答:
a、公鑰驗(yàn)簽。用CA公鑰給“數(shù)字證書(shū)”里的“數(shù)字簽名”進(jìn)行解密,得到一串哈希字符。
然后對(duì)“數(shù)字證書(shū)”的內(nèi)容進(jìn)行同樣的哈希運(yùn)算,也得到一串哈希字符。
然后比較兩串哈希字符串是否一致。如果一致,說(shuō)明“數(shù)字證書(shū)”是靠譜的,沒(méi)有被篡改。
b、域名對(duì)比。瀏覽器還會(huì)對(duì)比證書(shū)里的“主題背景”的CN公用名,或者“擴(kuò)展程序”里的“證書(shū)主題背景的備用名稱(chēng)”,是否和域名一致,一致那就證明這份證書(shū)是該網(wǎng)站的。
c、有效期檢查。瀏覽器還會(huì)檢查證書(shū)的有效期是否過(guò)期。
以上第3點(diǎn)和第4點(diǎn),就是典型的 CA私鑰簽名,公鑰驗(yàn)簽。
6、https用的是對(duì)稱(chēng)加密還是非對(duì)稱(chēng)加密?
答:HTTPS 在內(nèi)容傳輸?shù)募用苌鲜褂玫氖菍?duì)稱(chēng)加密,非對(duì)稱(chēng)加密只作用在證書(shū)驗(yàn)證階段。
7、為什么數(shù)據(jù)傳輸是用對(duì)稱(chēng)加密的?
第一:非對(duì)稱(chēng)加密的加解密效率是非常低的,而 http 的應(yīng)用場(chǎng)景中通常端與端之間存在大量的交互,非對(duì)稱(chēng)加密的效率是無(wú)法接受的。
第二:在 HTTPS 的場(chǎng)景中只有服務(wù)端保存了私鑰,一對(duì)公私鑰只能實(shí)現(xiàn)單向的加解密,所以HTTPS 中內(nèi)容傳輸加密采取的是對(duì)稱(chēng)加密,而不是非對(duì)稱(chēng)加密。
8、 使用https會(huì)被抓包嗎?
答:會(huì)被抓包,HTTPS 只防止用戶(hù)在不知情的情況下通信被監(jiān)聽(tīng),如果用戶(hù)主動(dòng)授信,是可以構(gòu)建“中間人”網(wǎng)絡(luò),代理軟件可以對(duì)傳輸內(nèi)容進(jìn)行解密。
9、HTTPS必須在每次請(qǐng)求中都要先在SSL/TLS層進(jìn)行握手傳輸密鑰嗎?
答:顯然每次請(qǐng)求都經(jīng)歷一次密鑰傳輸過(guò)程非常耗時(shí),那怎么達(dá)到只傳輸一次呢?靠“session”。
服務(wù)器會(huì)為每個(gè)瀏覽器(或客戶(hù)端軟件)維護(hù)一個(gè)session ID,在TSL握手階段傳給瀏覽器,瀏覽器生成好密鑰傳給服務(wù)器后,服務(wù)器會(huì)把該密鑰存到相應(yīng)的session ID下,之后瀏覽器每次請(qǐng)求都會(huì)攜帶session ID,服務(wù)器會(huì)根據(jù)session ID找到相應(yīng)的密鑰并進(jìn)行解密加密操作,這樣就不必要每次重新制作、傳輸密鑰了!
10、https加密方案/原理 總結(jié):

① 證書(shū)驗(yàn)證階段:
1)瀏覽器發(fā)起 HTTPS 請(qǐng)求;
2)服務(wù)端返回 HTTPS 證書(shū);
3)客戶(hù)端驗(yàn)證證書(shū)是否合法,如果不合法則提示告警。
② 數(shù)據(jù)傳輸階段:
1)當(dāng)證書(shū)驗(yàn)證合法后,在本地生成隨機(jī)數(shù);
2)通過(guò)公鑰加密隨機(jī)數(shù),并把加密后的隨機(jī)數(shù)傳輸?shù)椒?wù)端;
3)服務(wù)端通過(guò)私鑰對(duì)隨機(jī)數(shù)進(jìn)行解密;
4)服務(wù)端通過(guò)客戶(hù)端傳入的隨機(jī)數(shù)構(gòu)造對(duì)稱(chēng)加密算法,對(duì)返回結(jié)果內(nèi)容進(jìn)行加密后傳輸。