?
一.????
協(xié)議
SSL(SecureSocketLayer)
是
netscape
公司提出的主要用于
web
的安全通信標(biāo)準(zhǔn)
,
分為
2.0
版和
3.0
版
.TLS (TransportLayerSecurity)
是
IETF
的
TLS
工作組在
SSL3.0
基礎(chǔ)之上提出的安全通信標(biāo)準(zhǔn)
,
目前版本是
1.0,
即
RFC2246.SSL/TLS
提供的安全機(jī)制可以保證應(yīng)用層數(shù)據(jù)在互聯(lián)網(wǎng)絡(luò)傳輸不被監(jiān)聽(tīng)
,
偽造和竄改
.
一般情況下的網(wǎng)絡(luò)協(xié)議應(yīng)用中,數(shù)據(jù)在機(jī)器中經(jīng)過(guò)簡(jiǎn)單的由上到下的幾次包裝,就進(jìn)入網(wǎng)絡(luò),如果這些包被截獲的話,那么可以很容易的根據(jù)網(wǎng)絡(luò)協(xié)議得到里面的數(shù)據(jù)
.
由網(wǎng)絡(luò)監(jiān)聽(tīng)工具可以很容易的做到這一點(diǎn)。
SSL
就是為了加密這些數(shù)據(jù)而產(chǎn)生的協(xié)議,可以這么理解,它是位與應(yīng)用層和
TCP/IP
之間的一層,數(shù)據(jù)經(jīng)過(guò)它流出的時(shí)候被加密,再往
TCP/IP
送,而數(shù)據(jù)從
TCP/IP
流入之后先進(jìn)入它這一層被解密,同時(shí)它也能夠驗(yàn)證網(wǎng)絡(luò)連接倆端的身份。
它的主要功能就是倆個(gè):
一:加密解密在網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包
,
同時(shí)保護(hù)這些數(shù)據(jù)不被修改
,
和偽造。
二:驗(yàn)證網(wǎng)絡(luò)對(duì)話中雙方的身份
SSL
協(xié)議包含倆個(gè)子協(xié)議,一個(gè)是包協(xié)議,一個(gè)是握手協(xié)議。包協(xié)議是說(shuō)明
SSL
的數(shù)據(jù)包應(yīng)該如何封裝的。握手協(xié)議則是說(shuō)明通信雙方如何協(xié)商共同決定使用什么算法以及算法使用的
key
。很明顯包協(xié)議位于握手協(xié)議更下一層。我們暫時(shí)對(duì)包協(xié)議的內(nèi)容沒(méi)有興趣。
SSL
握手過(guò)程說(shuō)簡(jiǎn)單點(diǎn)就是:通信雙方通過(guò)不對(duì)稱(chēng)加密算法來(lái)協(xié)商好一個(gè)對(duì)稱(chēng)加密算法以及使用的
key,
然后用這個(gè)算法加密以后所有的數(shù)據(jù)完成應(yīng)用層協(xié)議的數(shù)據(jù)交換。
握手一般都是由
client
發(fā)起的,
SSL
也不例外。
1client
送給
server
它自己本身使用的
ssl
的
version(ssl
一共有三個(gè)
version),
加密算法的一些配置,和一些隨機(jī)產(chǎn)生的數(shù)據(jù),以及其他在
SSL
協(xié)議中需要用到的信息。
2server
送給
client
它自己的
SSL
的
version,
加密算法的配置,隨機(jī)產(chǎn)生的數(shù)據(jù),還會(huì)用自己的私有密鑰加密
SERVER-HELLO
信
息。
Server
還同時(shí)把自己的證書(shū)文件給送過(guò)去。同時(shí)有個(gè)可選的項(xiàng)目,就是
server
可以要求需要客戶的
certificate
。
3client
就用
server
送過(guò)來(lái)的
certificate
來(lái)驗(yàn)證
server
的身份。如果
server
身份驗(yàn)證沒(méi)通過(guò),本次通信結(jié)束。通過(guò)證書(shū)驗(yàn)證
之后,得到
server
的公共密鑰,解開(kāi)
server
送來(lái)的被其用私有密鑰加密過(guò)的
SERVER-HELLO
信息,看看對(duì)頭與否。如果不對(duì),說(shuō)明對(duì)方只有
該
server
的公共密鑰而沒(méi)有私有密鑰,必是假的。通信告吹。
4client
使用到目前為止所有產(chǎn)生了的隨機(jī)數(shù)據(jù)
(sharedsecret),client
產(chǎn)生本次握手中的
premastersecret(
這個(gè)步
驟是有可能有
server
的參與的,由他們使用的加密算法決定
),
并且把這個(gè)用
server
的公共密鑰加密,送回給
server.
如果
server
要求需
要驗(yàn)證
client,
那么
client
也需要自己把自己的證書(shū)送過(guò)去,同時(shí)送一些自己簽過(guò)名的數(shù)據(jù)過(guò)去。
SSL
協(xié)議有倆種技術(shù)來(lái)產(chǎn)生
sharedsecret(
真不好意思,又是一個(gè)很難意譯的詞組
),
一種是
RSA,
一種是
EDH.
RSA
就是我們上一章說(shuō)過(guò)的一種不對(duì)稱(chēng)加密算法。首先
server
把自己的
RSA
公共密鑰送給
client,client
于是用這個(gè)
key
加密一個(gè)隨機(jī)產(chǎn)生的值
(
這個(gè)隨機(jī)產(chǎn)生的值就是
sharedsecret)
,再把結(jié)果送給
server.
EDH
也是一種不對(duì)稱(chēng)加密算法,但它與
RSA
不同的是,它好象沒(méi)有自己固定的公共密鑰和私有密鑰,都是在程序跑起來(lái)的時(shí)候產(chǎn)生的,用完就
K
掉。其他的步驟倆者就差不多了。
RSA,DSA,DH
三種不對(duì)稱(chēng)加密算法的區(qū)別也就在這里。
RSA
的密鑰固定,后倆個(gè)需要一個(gè)參數(shù)來(lái)臨時(shí)生成
key.DH
甚至要求雙方使用同樣的參數(shù),這個(gè)參數(shù)要事先指定。如果
SSL
庫(kù)沒(méi)有
load
進(jìn)這個(gè)參數(shù),
DH
算法就沒(méi)辦法用。
DSA
沒(méi)研究過(guò)。
5Server
驗(yàn)證完
client
的身份之后,然后用自己的私有密鑰解密得到
premastersecret
然后雙方利用這個(gè)
premastersecret
來(lái)共同協(xié)商,得到
mastersecret.
6
雙方用
master
一起產(chǎn)生真正的
sessionkey,
著就是他們?cè)谑O碌倪^(guò)程中的對(duì)稱(chēng)加密的
key
了。這個(gè)
key
還可以用來(lái)驗(yàn)證數(shù)據(jù)完整性。雙方再交換結(jié)束信息。握手結(jié)束。
接下來(lái)雙方就可以用協(xié)商好的算法和
key
來(lái)用對(duì)稱(chēng)加密算法繼續(xù)下面的過(guò)程了。
很簡(jiǎn)單吧?其實(shí)要復(fù)雜一些的,我簡(jiǎn)化了很多來(lái)說(shuō)。
不過(guò)還是有個(gè)問(wèn)題,喜歡搗蛋的人雖然看不懂他們?cè)诮涣餍┦裁矗鄹目偪梢园桑?/span>
記得我們?cè)诩用芩惴ɡ锩娼榻B過(guò)的哈希算法嗎?就是為了對(duì)付這種搗蛋者的。在每次送信息的時(shí)候,附帶把整條信息的哈希值也送過(guò)去,接收方收到信息的時(shí)候,也
把收到的內(nèi)容哈希一把,然后和對(duì)方送來(lái)的哈希值對(duì)比一下,看看是否正確。搗蛋者如果亂改通信內(nèi)容,哈希出來(lái)的值是不同的,那么就很容易被發(fā)現(xiàn)了。
但這樣子,搗蛋者至少可以學(xué)舌。他可以把之前監(jiān)聽(tīng)到的內(nèi)容重復(fù)發(fā)給某一方,而這些內(nèi)容肯定是正確的
,
無(wú)法驗(yàn)證出有問(wèn)題的。哎,
SSL
是怎么對(duì)付這種人的我還沒(méi)看出來(lái)。有篇文章說(shuō):多放點(diǎn)隨機(jī)數(shù)在信息里可以對(duì)付,我也沒(méi)去研究這句話是什么意思。