8.3
HTTPS的握手方式
HTTPS在傳輸數(shù)據(jù)之前需要客戶端(瀏覽器)與服務(wù)端(網(wǎng)站)之間進(jìn)行一次握手癣疟,在握手過程中將確立雙方加密傳輸數(shù)據(jù)的密碼信息翘单。TLS/SSL中使用了非對稱加密佑稠,對稱加密以及HASH算法。
握手過程的簡單描述如下:
(1)瀏覽器將自己支持的一套加密規(guī)則發(fā)送給網(wǎng)站令野。
(2)網(wǎng)站從中選出一組加密算法與HASH算法,并將自己的身份信息以證書的形式發(fā)回給瀏覽器王财。證書里面包含了網(wǎng)站地址,加密公鑰四康,以及證書的頒發(fā)機(jī)構(gòu)等信息搪搏。
(3)獲得網(wǎng)站證書之后瀏覽器要做以下工作:
a)驗(yàn)證證書的合法性(頒發(fā)證書的機(jī)構(gòu)是否合法,證書中包含的網(wǎng)站地址是否與正在訪問的地址一致等)闪金,如果證書受信任疯溺,則瀏覽器欄里面會(huì)顯示一個(gè)小鎖頭,否則會(huì)給出證書不受信的提示哎垦。
b)如果證書受信任囱嫩,或者是用戶接受了不受信的證書,瀏覽器會(huì)生成一串隨機(jī)數(shù)的密碼漏设,并用證書中提供的公鑰加密墨闲。
c)使用約定好的HASH計(jì)算握手消息,并使用生成的隨機(jī)數(shù)對消息進(jìn)行加密郑口,最后將之前生成的所有信息發(fā)送給網(wǎng)站鸳碧。
(4)網(wǎng)站接收瀏覽器發(fā)來的數(shù)據(jù)之后要做以下的操作:
a)使用自己的私鑰將信息解密取出密碼,使用密碼解密瀏覽器發(fā)來的握手消息犬性,并驗(yàn)證HASH是否與瀏覽器發(fā)來的一致瞻离。
b)使用密碼加密一段握手消息,發(fā)送給瀏覽器乒裆。
(5)瀏覽器解密并計(jì)算握手消息的HASH套利,如果與服務(wù)端發(fā)來的HASH一致,此時(shí)握手過程結(jié)束鹤耍,之后所有的通信數(shù)據(jù)將由之前瀏覽器生成的隨機(jī)密碼并利用對稱加密算法進(jìn)行加密肉迫。
這里瀏覽器與網(wǎng)站互相發(fā)送加密的握手消息并驗(yàn)證,目的是為了保證雙方都獲得了一致的密碼稿黄,并且可以正常的加密解密數(shù)據(jù)喊衫,為后續(xù)真正數(shù)據(jù)的傳輸做一次測試。另外杆怕,HTTPS一般使用的加密與HASH算法如下:
非對稱加密算法:RSA格侯,DSA/DSS
對稱加密算法:AES,RC4财著,3DES
HASH算法:MD5联四,SHA1,SHA256
其中非對稱加密算法用于在握手過程中加密生成的密碼撑教,對稱加密算法用于對真正傳輸?shù)臄?shù)據(jù)進(jìn)行加密朝墩,而HASH算法用于驗(yàn)證數(shù)據(jù)的完整性。由于瀏覽器生成的密碼是整個(gè)數(shù)據(jù)加密的關(guān)鍵,因此在傳輸?shù)臅r(shí)候使用了非對稱加密算法對其加密收苏。非對稱加密算法會(huì)生成公鑰和私鑰亿卤,公鑰只能用于加密數(shù)據(jù),因此可以隨意傳輸鹿霸,而網(wǎng)站的私鑰用于對數(shù)據(jù)進(jìn)行解密排吴,所以網(wǎng)站都會(huì)非常小心的保管自己的私鑰,防止泄漏懦鼠。