簡介
HTTPS(超文本傳輸安全協(xié)議)是一種通過計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行安全通信的傳輸協(xié)議。HTTPS 經(jīng)由 HTTP 進(jìn)行通信,但利用SSL/TLS來加密數(shù)據(jù)包固逗。HTTPS開發(fā)的主要目的峡继,是提供對(duì)網(wǎng)站服務(wù)器的身份認(rèn)證岸梨,保護(hù)交換數(shù)據(jù)的隱私與完整性。HTTPS 的作用有:1篷扩、內(nèi)容加密兄猩,建立一個(gè)信息安全通道,來保證數(shù)據(jù)傳輸?shù)陌踩?鉴未、身份認(rèn)證枢冤,確認(rèn)網(wǎng)站的真實(shí)性;3铜秆、數(shù)據(jù)完整性淹真,防止內(nèi)容被第三方冒充或者篡改。
連接建立
- 1连茧、客戶端發(fā)起請(qǐng)求核蘸。
客戶端先向服務(wù)器發(fā)出加密通信的請(qǐng)求,由于客戶端對(duì)一些加解密算法的支持程度不一樣啸驯,但是在TLS協(xié)議傳輸過程中必須使用同一套加解密算法才能保證數(shù)據(jù)能夠正常的加解密客扎,因此在這一步,客戶端需要向服務(wù)器提供以下信息:
1罚斗、支持的協(xié)議版本徙鱼,比如TLS 1.0版
2、一個(gè)客戶端生成的隨機(jī)數(shù)针姿,用于生成對(duì)話密鑰
3袱吆、支持的加密方法,比如RSA公鑰加密
4距淫、支持的壓縮方法
- 2绞绒、服務(wù)器響應(yīng)請(qǐng)求。
服務(wù)端在接收到客戶端的請(qǐng)求之后榕暇,服務(wù)端需要確定加密協(xié)議的版本处铛,以及加密的算法饲趋,然后也生成一個(gè)隨機(jī)數(shù),以及將自己的證書發(fā)送給客戶端一并發(fā)送給客戶端撤蟆,這里的隨機(jī)數(shù)是整個(gè)過程的第二個(gè)隨機(jī)數(shù)奕塑。
1、協(xié)議的版本
2家肯、加密的算法
3龄砰、隨機(jī)數(shù),用于生成對(duì)話密鑰
4讨衣、服務(wù)器證書
- 3换棚、客戶端回應(yīng)。
客戶端首先會(huì)對(duì)服務(wù)器下發(fā)的證書進(jìn)行驗(yàn)證反镇,如果證書不是可信機(jī)構(gòu)頒布固蚤、或者證書中的域名與實(shí)際域名不一致、或者證書已經(jīng)過期歹茶,就會(huì)向訪問者顯示一個(gè)警告夕玩,由其選擇是否還要繼續(xù)通信。如果驗(yàn)證通過惊豺,則向服務(wù)器發(fā)送以下信息燎孟。
1、一個(gè)隨機(jī)數(shù)尸昧。該隨機(jī)數(shù)用服務(wù)器公鑰加密揩页,第三個(gè)隨機(jī)數(shù)。
2烹俗、編碼改變通知爆侣,表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送。
3幢妄、客戶端握手結(jié)束通知兔仰,表示客戶端的握手階段已經(jīng)結(jié)束。這一項(xiàng)同時(shí)也是前面發(fā)送的所有內(nèi)容的hash值磁浇,用來供服務(wù)器校驗(yàn)斋陪。
- 4朽褪、服務(wù)器回應(yīng)置吓。
服務(wù)端在接收到客戶端傳過來的第三個(gè)隨機(jī)數(shù)的加密數(shù)據(jù)之后,使用私鑰對(duì)這段加密數(shù)據(jù)進(jìn)行解密缔赠,并用它生成本次會(huì)話所用的會(huì)話密鑰衍锚,然后向客戶端最后發(fā)送下面信息。
1嗤堰、編碼改變通知戴质,表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送度宦。
2、服務(wù)器握手結(jié)束通知告匠,表示服務(wù)器的握手階段已經(jīng)結(jié)束戈抄。這一項(xiàng)同時(shí)也是前面發(fā)送的所有內(nèi)容的hash值,用來供客戶端校驗(yàn)后专。
HTTPS和HTTP的區(qū)別
1划鸽、http是超文本傳輸協(xié)議,信息是明文傳輸戚哎;https 則是具有安全性的ssl加密傳輸協(xié)議裸诽。
2、HTTP 和 HTTPS 使用的連接方式不同型凳,端口號(hào)也不一樣丈冬,前者是80,后者是443甘畅。
3埂蕊、HTTP 的連接很簡單,是無狀態(tài)的橄浓;HTTPS 協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸粒梦、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比 HTTP 協(xié)議安全荸实。
4匀们、HTTPS 對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行了加解密,因此它比 HTTP 慢准给。
問題
- 1泄朴、如何保證公鑰不被篡改?
數(shù)字簽名技術(shù)
數(shù)字簽名技術(shù)就是對(duì)“非對(duì)稱密鑰加解密”和“數(shù)字摘要“兩項(xiàng)技術(shù)的應(yīng)用露氮,它將摘要信息用發(fā)送者的私鑰加密祖灰,與原文一起傳送給接收者。接收者只有用發(fā)送者的公鑰才能解密被加密的摘要信息畔规,然后用HASH函數(shù)對(duì)收到的原文產(chǎn)生一個(gè)摘要信息局扶,與解密的摘要信息對(duì)比。如果相同叁扫,則說明收到的信息是完整的三妈,在傳輸過程中沒有被修改,否則說明信息被修改過莫绣,因此數(shù)字簽名能夠驗(yàn)證信息的完整性畴蒲。
將公鑰放在數(shù)字證書中。只要證書是可信的对室,公鑰就是可信的模燥。
- 2咖祭、證書包含哪些內(nèi)容?
1蔫骂、證書頒發(fā)機(jī)構(gòu)的名稱么翰;
2、證書本身的數(shù)字簽名辽旋;
3硬鞍、證書持有者的公鑰;
4戴已、證書簽名用到的Hash算法固该;
- 3、如何驗(yàn)證證書的有效性糖儡?
1伐坏、證書頒發(fā)機(jī)構(gòu)的驗(yàn)證。如果是瀏覽器不認(rèn)識(shí)的機(jī)構(gòu)握联,直接認(rèn)為是危險(xiǎn)證書桦沉;
2、證書篡改的驗(yàn)證金闽。根據(jù)瀏覽器內(nèi)置的CA纯露,使用它的公鑰對(duì)數(shù)字簽名進(jìn)行解密得到摘要A,然后再根據(jù)簽名的Hash算法計(jì)算出證書的摘要B代芜,對(duì)比A與B埠褪,若相等則正常,若不相等則是被篡改過的挤庇。
3钞速、證書過期失效的驗(yàn)證。瀏覽器將網(wǎng)站提供的證書的序列號(hào)通過OCSP發(fā)送給證書頒發(fā)機(jī)構(gòu)嫡秕,后者會(huì)告訴瀏覽器證書是否還是有效的渴语。
- 4、HTTPS 比 HTTP 建立連接更耗時(shí)嗎昆咽?
我們可以用以下 curl 相關(guān)命令查看連接建立的詳細(xì)信息:
curl -w "TCP handshake: %{time_connect}, SSL handshake: %{time_appconnect}\n" -so /dev/null https://www.baidu.com/
截圖如下:
從上圖可以看出 HTTPS 連接建立的時(shí)間大概是 HTTP 的3倍左右驾凶,從而可以知道 HTTPS 建立連接的過程比 HTTP 慢。
- 5掷酗、為什么一定要用三個(gè)隨機(jī)數(shù)调违,來生成會(huì)話密鑰?
因?yàn)榭蛻舳撕头?wù)器使用三個(gè)隨機(jī)數(shù)一同生成的密鑰就不容易被猜出了汇在,一個(gè)偽隨機(jī)可能完全不隨機(jī)翰萨,可是是三個(gè)偽隨機(jī)就十分接近隨機(jī)了脏答,每增加一個(gè)自由度糕殉,隨機(jī)性增加的可不是一亩鬼。如果有人竊取通信數(shù)據(jù),他很容易知道雙方選擇的加密方法阿蝶,以及三個(gè)隨機(jī)數(shù)中的兩個(gè)雳锋,整個(gè)通話的安全,取決于第三個(gè)隨機(jī)數(shù) Premaster secret 能不能被破解羡洁。
- 6玷过、HTTPS 都是使用非對(duì)稱加密加密數(shù)據(jù)嗎?
SSL協(xié)議在握手階段使用的是非對(duì)稱加密筑煮,在傳輸階段使用的是對(duì)稱加密辛蚊,也就是說在SSL上傳送的數(shù)據(jù)是使用對(duì)稱密鑰加密的。因?yàn)榉菍?duì)稱加密的速度緩慢真仲,耗費(fèi)資源袋马。
- 7、如何避免中間人攻擊秸应?
1虑凛、中間人攻擊一般都是根據(jù) CA 來展開的,因此软啼,不要隨意添加第三方 CA 信任桑谍;
2、在客戶端進(jìn)行代碼層面的證書校驗(yàn)祸挪,校驗(yàn)方式一般有兩種锣披,證書自身校驗(yàn)和公鑰校驗(yàn);
3贿条、數(shù)據(jù)傳輸?shù)臅r(shí)候盈罐,對(duì)數(shù)據(jù)本身進(jìn)行加密;
(待續(xù))