## SSL/TLS
HTTP使用明文傳輸模聋,明文傳輸主要有一下三大風(fēng)險:
- 竊聽風(fēng)險
- 篡改風(fēng)險
- 冒充風(fēng)險
SSL/TLS協(xié)議就是為了解決這三大風(fēng)險而設(shè)計的韭畸,它可以達(dá)到如下的效果:
- 所有信息都是加密傳輸悔叽,第三方無法竊聽
- 具有校驗機制,一旦被篡改祖很,通信雙方會立即發(fā)現(xiàn)
- 配備身份證書壮啊,放置身份被冒充
SSL/TLS協(xié)議的基本思想就是采用公鑰加密算法〔希基本過程就是client先向server索要公鑰棵磷,然后用公鑰加密信息,服務(wù)器收到密文后晋涣,用自己的私鑰解密仪媒。
這里有幾個問題:
1. 如何保證client收到的server的公鑰不是冒充的?使用CA服務(wù)器谢鹊。
2. 非對稱加密計算量大的問題算吩?每一次對話,client和server都會生成一個對稱加密的密鑰佃扼,它用于加密信息偎巢,對稱加密的速度非常快兼耀。而服務(wù)器的公鑰只用于加密那個對稱加密密鑰压昼。
3. client沒有將client的公鑰傳給server,如果server想向client用非對稱加密的方式傳遞信息瘤运,那么server只能用server的私鑰給信息加密窍霞,然后client用server的公鑰解開。而公鑰是server分發(fā)給所有人的拯坟,這樣顯然很容易就會發(fā)生信息被竊取的情況但金。需要避免server用server的私鑰加密信息的情況。
## SSL/TLS過程
1. client向server發(fā)出加密通信的請求郁季,其中client會生成一個隨機數(shù)傲绣,稍后用于生成加密信息的對稱密鑰掠哥。
2. server收到client請求之后,向client發(fā)出回應(yīng)秃诵。server回應(yīng)的內(nèi)容包括server的證書续搀、一個server生成的隨機數(shù)(稍后用于生成加密信息的對稱密鑰)等。
3. client收到server發(fā)的信息之后菠净,首先驗證服務(wù)器證書禁舷。如果證書不是可信機構(gòu)頒布、或者證書中的域名與實際域名不一致毅往、或者證書已經(jīng)過期牵咙,就會向訪問者顯示一個警告,由其選擇是否還要繼續(xù)通信攀唯。如果證書沒有問題洁桌,client就會從證書中取出server的公鑰。然后生成一個隨機數(shù)作為對稱密鑰侯嘀,用server的公鑰加密該對稱密鑰另凌。
4. server收到client發(fā)送的密文后,用私鑰解開戒幔,得到對稱加密的密鑰吠谢。至此整個握手階段全部結(jié)束。client和server使用對稱密鑰加密內(nèi)容進(jìn)行通信诗茎。
需要注意的是工坊,SSL/TLS握手階段都是使用的明文傳輸。
## HTTPS
HTTPS實際上就是使用上面SSL/TLS握手敢订,然后用對稱密鑰加密傳輸之前HTTP傳輸?shù)拿魑膬?nèi)容王污。
## 數(shù)字簽名
數(shù)字簽名的作用主要是為了防止內(nèi)容被篡改。
比如SSL/TLS握手階段楚午,server將自己的公鑰發(fā)送給client這個過程是明文傳輸昭齐,存在被第三方篡改的風(fēng)險。
數(shù)字簽名的過程是先將內(nèi)容用hash算法生成摘要醒叁,然后使用一個私鑰對摘要進(jìn)行加密生成數(shù)字簽名司浪,然后將數(shù)字簽名貼在內(nèi)容的后面泊业。接收方收到內(nèi)容后把沼,要驗證內(nèi)容是否被篡改,只需要將數(shù)字簽名用公鑰解密吁伺,然后和內(nèi)容hash之后的結(jié)果進(jìn)行對比饮睬,如果不一致,一定發(fā)生了篡改篮奄。
## CA&數(shù)字證書
CA(證書中心)的作用就是給server頒發(fā)數(shù)字證書捆愁,確認(rèn)server的公鑰是可信的割去,防止第三方冒充。
server的數(shù)字證書:server的公鑰等信息+CA的數(shù)字簽名昼丑。
server將自己的公鑰等信息交給CA呻逆,CA將信息hash之后用自己的私鑰加密生成CA的數(shù)字簽名,然后server的公鑰等信息和CA的數(shù)字簽名一起封裝成數(shù)字證書頒發(fā)給server菩帝,之后server就使用CA為其頒發(fā)的數(shù)字證書咖城。client在接受到信息之后,只需要用CA的公鑰驗證一下CA的數(shù)字簽名即可知道server的公鑰等信息是否被篡改過呼奢。這里為了簡化模型宜雀,可以認(rèn)為client上的CA公鑰一定是可信的。只要client在SSL/TLS握手階段獲得的server公鑰是可信的握础,中間人是沒有機會竊取辐董、篡改、冒充的禀综。
## 總結(jié)
什么時候用公鑰加密信息简烘?什么時候用私鑰加密信息?
加密信息:公鑰加密菇存,私鑰解密夸研。內(nèi)容不希望被別人看到。
簽名:私鑰簽名依鸥,公鑰驗證亥至。讓對方知道是我的發(fā)的,不希望被別人冒充贱迟、篡改姐扮。