HTTPS詳解

轉(zhuǎn)載自http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html

文中首先解釋了加密解密的一些基礎(chǔ)知識(shí)和概念诫龙,然后通過(guò)一個(gè)加密通信過(guò)程的例子說(shuō)明了加密算法的作用狡忙,以及數(shù)字證書(shū)的出現(xiàn)所起的作用训柴。接著對(duì)數(shù)字證書(shū)做一個(gè)詳細(xì)的解釋?zhuān)⒂懻撘幌聎indows中數(shù)字證書(shū)的管理宏所,最后演示使用makecert生成數(shù)字證書(shū)。如果發(fā)現(xiàn)文中有錯(cuò)誤的地方慧库,或者有什么地方說(shuō)得不夠清楚葵诈,歡迎指出!

1掌腰、基礎(chǔ)知識(shí)

  這部分內(nèi)容主要解釋一些概念和術(shù)語(yǔ),最好是先理解這部分內(nèi)容张吉。

1.1齿梁、公鑰密碼體制(public-key cryptography)

公鑰密碼體制分為三個(gè)部分,公鑰芦拿、私鑰士飒、加密解密算法,它的加密解密過(guò)程如下:

加密:通過(guò)加密算法和公鑰對(duì)內(nèi)容(或者說(shuō)明文)進(jìn)行加密蔗崎,得到密文酵幕。加密過(guò)程需要用到公鑰。

解密:通過(guò)解密算法和私鑰對(duì)密文進(jìn)行解密缓苛,得到明文芳撒。解密過(guò)程需要用到解密算法和私鑰。注意未桥,由公鑰加密的內(nèi)容笔刹,只能由私鑰進(jìn)行解密,也就是說(shuō)冬耿,由公鑰加密的內(nèi)容舌菜,如果不知道私鑰,是無(wú)法解密的亦镶。

公鑰密碼體制的公鑰和算法都是公開(kāi)的(這是為什么叫公鑰密碼體制的原因)日月,私鑰是保密的。大家都以使用公鑰進(jìn)行加密缤骨,但是只有私鑰的持有者才能解密爱咬。在實(shí)際的使用中,有需要的人會(huì)生成一對(duì)公鑰和私鑰绊起,把公鑰發(fā)布出去給別人使用精拟,自己保留私鑰。

1.2虱歪、對(duì)稱(chēng)加密算法(symmetric key algorithms)

在對(duì)稱(chēng)加密算法中蜂绎,加密使用的密鑰和解密使用的密鑰是相同的。也就是說(shuō)实蔽,加密和解密都是使用的同一個(gè)密鑰荡碾。因此對(duì)稱(chēng)加密算法要保證安全性的話,密鑰要做好保密局装,只能讓使用的人知道坛吁,不能對(duì)外公開(kāi)劳殖。這個(gè)和上面的公鑰密碼體制有所不同,公鑰密碼體制中加密是用公鑰拨脉,解密使用私鑰哆姻,而對(duì)稱(chēng)加密算法中,加密和解密都是使用同一個(gè)密鑰玫膀,不區(qū)分公鑰和私鑰矛缨。

    // 密鑰,一般就是一個(gè)字符串或數(shù)字帖旨,在加密或者解密時(shí)傳遞給加密/解密算法箕昭。前面在公鑰密碼體制中說(shuō)到的公鑰、私鑰就是密鑰解阅,公鑰是加密使用的密鑰落竹,私鑰是解密使用的密鑰。

1.3货抄、非對(duì)稱(chēng)加密算法(asymmetric key algorithms)

在非對(duì)稱(chēng)加密算法中述召,加密使用的密鑰和解密使用的密鑰是不相同的。前面所說(shuō)的公鑰密碼體制就是一種非對(duì)稱(chēng)加密算法蟹地,他的公鑰和是私鑰是不能相同的积暖,也就是說(shuō)加密使用的密鑰和解密使用的密鑰不同,因此它是一個(gè)非對(duì)稱(chēng)加密算法怪与。

1.4夺刑、RSA簡(jiǎn)介

RSA是一種公鑰密碼體制,現(xiàn)在使用得很廣泛分别。如果對(duì)RSA本身有興趣的性誉,后面看我有沒(méi)有時(shí)間寫(xiě)個(gè)RSA的具體介紹。

RSA密碼體制是一種公鑰密碼體制茎杂,公鑰公開(kāi),私鑰保密纫雁,它的加密解密算法是公開(kāi)的煌往。 由公鑰加密的內(nèi)容可以并且只能由私鑰進(jìn)行解密,并且由私鑰加密的內(nèi)容可以并且只能由公鑰進(jìn)行解密轧邪。也就是說(shuō)刽脖,RSA的這一對(duì)公鑰、私鑰都可以用來(lái)加密和解密忌愚,并且一方加密的內(nèi)容可以由并且只能由對(duì)方進(jìn)行解密曲管。

1.5、簽名和加密

我們說(shuō)加密硕糊,是指對(duì)某個(gè)內(nèi)容加密院水,加密后的內(nèi)容還可以通過(guò)解密進(jìn)行還原腊徙。 比如我們把一封郵件進(jìn)行加密,加密后的內(nèi)容在網(wǎng)絡(luò)上進(jìn)行傳輸檬某,接收者在收到后撬腾,通過(guò)解密可以還原郵件的真實(shí)內(nèi)容。

這里主要解釋一下簽名恢恼,簽名就是在信息的后面再加上一段內(nèi)容民傻,可以證明信息沒(méi)有被修改過(guò),怎么樣可以達(dá)到這個(gè)效果呢场斑?一般是對(duì)信息做一個(gè)hash計(jì)算得到一個(gè)hash值漓踢,注意,這個(gè)過(guò)程是不可逆的漏隐,也就是說(shuō)無(wú)法通過(guò)hash值得出原來(lái)的信息內(nèi)容喧半。在把信息發(fā)送出去時(shí),把這個(gè)hash值加密后做為一個(gè)簽名和信息一起發(fā)出去锁保。 接收方在收到信息后薯酝,會(huì)重新計(jì)算信息的hash值,并和信息所附帶的hash值(解密后)進(jìn)行對(duì)比爽柒,如果一致吴菠,就說(shuō)明信息的內(nèi)容沒(méi)有被修改過(guò),因?yàn)檫@里hash計(jì)算可以保證不同的內(nèi)容一定會(huì)得到不同的hash值浩村,所以只要內(nèi)容一被修改做葵,根據(jù)信息內(nèi)容計(jì)算的hash值就會(huì)變化。當(dāng)然心墅,不懷好意的人也可以修改信息內(nèi)容的同時(shí)也修改hash值酿矢,從而讓它們可以相匹配,為了防止這種情況怎燥,hash值一般都會(huì)加密后(也就是簽名)再和信息一起發(fā)送瘫筐,以保證這個(gè)hash值不被修改。至于如何讓別人可以解密這個(gè)簽名铐姚,這個(gè)過(guò)程涉及到數(shù)字證書(shū)等概念策肝,我們后面在說(shuō)到數(shù)字證書(shū)時(shí)再詳細(xì)說(shuō)明,這里您先只需先理解簽名的這個(gè)概念隐绵。

2之众、一個(gè)加密通信過(guò)程的演化

  我們來(lái)看一個(gè)例子,現(xiàn)在假設(shè)“服務(wù)器”和“客戶(hù)”要在網(wǎng)絡(luò)上通信依许,并且他們打算使用RSA(參看前面的RSA簡(jiǎn)介)來(lái)對(duì)通信進(jìn)行加密以保證談話內(nèi)容的安全棺禾。由于是使用RSA這種公鑰密碼體制,“服務(wù)器”需要對(duì)外發(fā)布公鑰(算法不需要公布峭跳,RSA的算法大家都知道)膘婶,自己留著私鑰缺前。“客戶(hù)”通過(guò)某些途徑拿到了“服務(wù)器”發(fā)布的公鑰竣付,客戶(hù)并不知道私鑰诡延。“客戶(hù)”具體是通過(guò)什么途徑獲取公鑰的古胆,我們后面再來(lái)說(shuō)明肆良,下面看一下雙方如何進(jìn)行保密的通信:

2.1 第一回合:

“客戶(hù)”->“服務(wù)器”:你好

“服務(wù)器”->“客戶(hù)”:你好,我是服務(wù)器

“客戶(hù)”->“服務(wù)器”:逸绎?惹恃??棺牧?

因?yàn)橄⑹窃诰W(wǎng)絡(luò)上傳輸?shù)奈撞冢腥丝梢悦俺渥约菏恰胺?wù)器”來(lái)向客戶(hù)發(fā)送信息。例如上面的消息可以被黑客截獲如下:

“客戶(hù)”->“服務(wù)器”:你好

“服務(wù)器”->“客戶(hù)”:你好颊乘,我是服務(wù)器

“客戶(hù)”->“黑客”:你好// 黑客在“客戶(hù)”和“服務(wù)器”之間的某個(gè)路由器上截獲“客戶(hù)”發(fā)給服務(wù)器的信息参淹,然后自己冒充“服務(wù)器”

“黑客”->“客戶(hù)”:你好,我是服務(wù)器

因此“客戶(hù)”在接到消息后乏悄,并不能肯定這個(gè)消息就是由“服務(wù)器”發(fā)出的浙值,某些“黑客”也可以冒充“服務(wù)器”發(fā)出這個(gè)消息。如何確定信息是由“服務(wù)器”發(fā)過(guò)來(lái)的呢檩小?有一個(gè)解決方法开呐,因?yàn)橹挥蟹?wù)器有私鑰,所以如果只要能夠確認(rèn)對(duì)方有私鑰规求,那么對(duì)方就是“服務(wù)器”筐付。因此通信過(guò)程可以改進(jìn)為如下:

2.2 第二回合:

“客戶(hù)”->“服務(wù)器”:你好

“服務(wù)器”->“客戶(hù)”:你好,我是服務(wù)器

“客戶(hù)”->“服務(wù)器”:向我證明你就是服務(wù)器

“服務(wù)器”->“客戶(hù)”:你好阻肿,我是服務(wù)器 {你好瓦戚,我是服務(wù)器}[私鑰|RSA]

// 注意這里約定一下,{} 表示RSA加密后的內(nèi)容丛塌,[ | ]表示用什么密鑰和算法進(jìn)行加密伤极,后面的示例中都用這種表示方式,例如上面的 {你好姨伤,我是服務(wù)器}[私鑰|RSA] 就表示用私鑰對(duì)“你好,我是服務(wù)器”進(jìn)行加密后的結(jié)果庸疾。

為了向“客戶(hù)”證明自己是“服務(wù)器”乍楚, “服務(wù)器”把一個(gè)字符串用自己的私鑰加密,把明文和加密后的密文一起發(fā)給“客戶(hù)”届慈。對(duì)于這里的例子來(lái)說(shuō)徒溪,就是把字符串 “你好忿偷,我是服務(wù)器”和這個(gè)字符串用私鑰加密后的內(nèi)容 {你好,我是服務(wù)器}[私鑰|RSA] 發(fā)給客戶(hù)臊泌。

“客戶(hù)”收到信息后鲤桥,她用自己持有的公鑰解密密文析蝴,和明文進(jìn)行對(duì)比僚焦,如果一致,說(shuō)明信息的確是由服務(wù)器發(fā)過(guò)來(lái)的令境。也就是說(shuō)“客戶(hù)”把 {你好播揪,我是服務(wù)器}[私鑰|RSA] 這個(gè)內(nèi)容用公鑰進(jìn)行解密贮喧,然后和“你好,我是服務(wù)器”對(duì)比猪狈。因?yàn)橛伞胺?wù)器”用私鑰加密后的內(nèi)容箱沦,由并且只能由公鑰進(jìn)行解密,私鑰只有“服務(wù)器”持有雇庙,所以如果解密出來(lái)的內(nèi)容是能夠?qū)Φ蒙系奈叫危钦f(shuō)明信息一定是從“服務(wù)器”發(fā)過(guò)來(lái)的。

假設(shè)“黑客”想冒充“服務(wù)器”:

“黑客”->“客戶(hù)”:你好疆前,我是服務(wù)器

“客戶(hù)”->“黑客”:向我證明你就是服務(wù)器

“黑客”->“客戶(hù)”:你好寒跳,我是服務(wù)器 {你好,我是服務(wù)器}[峡继?冯袍??|RSA]//這里黑客無(wú)法冒充碾牌,因?yàn)樗恢浪借€康愤,無(wú)法用私鑰加密某個(gè)字符串后發(fā)送給客戶(hù)去驗(yàn)證。

“客戶(hù)”->“黑客”:舶吗?征冷??誓琼?

由于“黑客”沒(méi)有“服務(wù)器”的私鑰检激,因此它發(fā)送過(guò)去的內(nèi)容,“客戶(hù)”是無(wú)法通過(guò)服務(wù)器的公鑰解密的腹侣,因此可以認(rèn)定對(duì)方是個(gè)冒牌貨叔收!

到這里為止,“客戶(hù)”就可以確認(rèn)“服務(wù)器”的身份了傲隶,可以放心和“服務(wù)器”進(jìn)行通信饺律,但是這里有一個(gè)問(wèn)題,通信的內(nèi)容在網(wǎng)絡(luò)上還是無(wú)法保密跺株。為什么無(wú)法保密呢复濒?通信過(guò)程不是可以用公鑰脖卖、私鑰加密嗎?其實(shí)用RSA的私鑰和公鑰是不行的巧颈,我們來(lái)具體分析下過(guò)程畦木,看下面的演示:

2.3 第三回合:

“客戶(hù)”->“服務(wù)器”:你好

“服務(wù)器”->“客戶(hù)”:你好,我是服務(wù)器

“客戶(hù)”->“服務(wù)器”:向我證明你就是服務(wù)器

“服務(wù)器”->“客戶(hù)”:你好砸泛,我是服務(wù)器 {你好十籍,我是服務(wù)器}[私鑰|RSA]

“客戶(hù)”->“服務(wù)器”:{我的帳號(hào)是aaa,密碼是123晾嘶,把我的余額的信息發(fā)給我看看}[公鑰|RSA]

“服務(wù)器”->“客戶(hù)”:{你的余額是100元}[私鑰|RSA]

注意上面的的信息 {你的余額是100元}[私鑰]妓雾,這個(gè)是“服務(wù)器”用私鑰加密后的內(nèi)容,但是我們之前說(shuō)了垒迂,公鑰是發(fā)布出去的械姻,因此所有的人都知道公鑰,所以除了“客戶(hù)”机断,其它的人也可以用公鑰對(duì){你的余額是100元}[私鑰]進(jìn)行解密楷拳。所以如果“服務(wù)器”用私鑰加密發(fā)給“客戶(hù)”,這個(gè)信息是無(wú)法保密的吏奸,因?yàn)橹灰泄€就可以解密這內(nèi)容欢揖。然而“服務(wù)器”也不能用公鑰對(duì)發(fā)送的內(nèi)容進(jìn)行加密,因?yàn)椤翱蛻?hù)”沒(méi)有私鑰奋蔚,發(fā)送個(gè)“客戶(hù)”也解密不了她混。

這樣問(wèn)題就又來(lái)了,那又如何解決呢泊碑?在實(shí)際的應(yīng)用過(guò)程坤按,一般是通過(guò)引入對(duì)稱(chēng)加密來(lái)解決這個(gè)問(wèn)題,看下面的演示:

2.4 第四回合:

“客戶(hù)”->“服務(wù)器”:你好

“服務(wù)器”->“客戶(hù)”:你好馒过,我是服務(wù)器

“客戶(hù)”->“服務(wù)器”:向我證明你就是服務(wù)器

“服務(wù)器”->“客戶(hù)”:你好臭脓,我是服務(wù)器 {你好,我是服務(wù)器}[私鑰|RSA]

“客戶(hù)”->“服務(wù)器”:{我們后面的通信過(guò)程腹忽,用對(duì)稱(chēng)加密來(lái)進(jìn)行来累,這里是對(duì)稱(chēng)加密算法和密鑰}[公鑰|RSA] //藍(lán)色字體的部分是對(duì)稱(chēng)加密的算法和密鑰的具體內(nèi)容,客戶(hù)把它們發(fā)送給服務(wù)器窘奏。

“服務(wù)器”->“客戶(hù)”:{OK嘹锁,收到!}[密鑰|對(duì)稱(chēng)加密算法]

“客戶(hù)”->“服務(wù)器”:{我的帳號(hào)是aaa着裹,密碼是123领猾,把我的余額的信息發(fā)給我看看}[密鑰|對(duì)稱(chēng)加密算法]

“服務(wù)器”->“客戶(hù)”:{你的余額是100元}[密鑰|對(duì)稱(chēng)加密算法]

在上面的通信過(guò)程中,“客戶(hù)”在確認(rèn)了“服務(wù)器”的身份后,“客戶(hù)”自己選擇一個(gè)對(duì)稱(chēng)加密算法和一個(gè)密鑰瘤运,把這個(gè)對(duì)稱(chēng)加密算法和密鑰一起用公鑰加密后發(fā)送給“服務(wù)器”。注意匠题,由于對(duì)稱(chēng)加密算法和密鑰是用公鑰加密的拯坟,就算這個(gè)加密后的內(nèi)容被“黑客”截獲了,由于沒(méi)有私鑰韭山,“黑客”也無(wú)從知道對(duì)稱(chēng)加密算法和密鑰的內(nèi)容郁季。

由于是用公鑰加密的,只有私鑰能夠解密钱磅,這樣就可以保證只有服務(wù)器可以知道對(duì)稱(chēng)加密算法和密鑰梦裂,而其它人不可能知道(這個(gè)對(duì)稱(chēng)加密算法和密鑰是“客戶(hù)”自己選擇的,所以“客戶(hù)”自己當(dāng)然知道如何解密加密)盖淡。這樣“服務(wù)器”和“客戶(hù)”就可以用對(duì)稱(chēng)加密算法和密鑰來(lái)加密通信的內(nèi)容了年柠。

總結(jié)一下,RSA加密算法在這個(gè)通信過(guò)程中所起到的作用主要有兩個(gè):

因?yàn)樗借€只有“服務(wù)器”擁有褪迟,因此“客戶(hù)”可以通過(guò)判斷對(duì)方是否有私鑰來(lái)判斷對(duì)方是否是“服務(wù)器”冗恨。

客戶(hù)端通過(guò)RSA的掩護(hù),安全的和服務(wù)器商量好一個(gè)對(duì)稱(chēng)加密算法和密鑰來(lái)保證后面通信過(guò)程內(nèi)容的安全味赃。

如果這里您理解了為什么不用RSA去加密通信過(guò)程掀抹,而是要再確定一個(gè)對(duì)稱(chēng)加密算法來(lái)保證通信過(guò)程的安全,那么就說(shuō)明前面的內(nèi)容您已經(jīng)理解了心俗。(如果不清楚傲武,再看下2.3和2.4,如果還是不清楚城榛,那應(yīng)該是我們說(shuō)清楚揪利,您可以留言提問(wèn)。)

到這里吠谢,“客戶(hù)”就可以確認(rèn)“服務(wù)器”的身份土童,并且雙方的通信內(nèi)容可以進(jìn)行加密,其他人就算截獲了通信內(nèi)容工坊,也無(wú)法解密献汗。的確,好像通信的過(guò)程是比較安全了王污。

但是這里還留有一個(gè)問(wèn)題罢吃,在最開(kāi)始我們就說(shuō)過(guò),“服務(wù)器”要對(duì)外發(fā)布公鑰昭齐,那“服務(wù)器”如何把公鑰發(fā)送給“客戶(hù)”呢尿招?我們第一反應(yīng)可能會(huì)想到以下的兩個(gè)方法:

a)把公鑰放到互聯(lián)網(wǎng)的某個(gè)地方的一個(gè)下載地址,事先給“客戶(hù)”去下載。

b)每次和“客戶(hù)”開(kāi)始通信時(shí)就谜,“服務(wù)器”把公鑰發(fā)給“客戶(hù)”怪蔑。

但是這個(gè)兩個(gè)方法都有一定的問(wèn)題,

對(duì)于a)方法丧荐,“客戶(hù)”無(wú)法確定這個(gè)下載地址是不是“服務(wù)器”發(fā)布的缆瓣,你憑什么就相信這個(gè)地址下載的東西就是“服務(wù)器”發(fā)布的而不是別人偽造的呢,萬(wàn)一下載到一個(gè)假的怎么辦虹统?另外要所有的“客戶(hù)”都在通信前事先去下載公鑰也很不現(xiàn)實(shí)弓坞。

對(duì)于b)方法,也有問(wèn)題车荔,因?yàn)槿魏稳硕伎梢宰约荷梢粚?duì)公鑰和私鑰渡冻,他只要向“客戶(hù)”發(fā)送他自己的私鑰就可以冒充“服務(wù)器”了。示意如下:

“客戶(hù)”->“黑客”:你好 //黑客截獲“客戶(hù)”發(fā)給“服務(wù)器”的消息

“黑客”->“客戶(hù)”:你好忧便,我是服務(wù)器族吻,這個(gè)是我的公鑰 //黑客自己生成一對(duì)公鑰和私鑰,把公鑰發(fā)給“客戶(hù)”茬腿,自己保留私鑰

“客戶(hù)”->“黑客”:向我證明你就是服務(wù)器

“黑客”->“客戶(hù)”:你好呼奢,我是服務(wù)器 {你好,我是服務(wù)器}[黑客自己的私鑰|RSA] //客戶(hù)收到“黑客”用私鑰加密的信息后切平,是可以用“黑客”發(fā)給自己的公鑰解密的握础,從而會(huì)誤認(rèn)為“黑客”是“服務(wù)器”

因此“黑客”只需要自己生成一對(duì)公鑰和私鑰,然后把公鑰發(fā)送給“客戶(hù)”悴品,自己保留私鑰禀综,這樣由于“客戶(hù)”可以用黑客的公鑰解密黑客的私鑰加密的內(nèi)容,“客戶(hù)”就會(huì)相信“黑客”是“服務(wù)器”苔严,從而導(dǎo)致了安全問(wèn)題定枷。這里問(wèn)題的根源就在于,大家都可以生成公鑰届氢、私鑰對(duì)欠窒,無(wú)法確認(rèn)公鑰對(duì)到底是誰(shuí)的。 如果能夠確定公鑰到底是誰(shuí)的退子,就不會(huì)有這個(gè)問(wèn)題了岖妄。例如,如果收到“黑客”冒充“服務(wù)器”發(fā)過(guò)來(lái)的公鑰寂祥,經(jīng)過(guò)某種檢查荐虐,如果能夠發(fā)現(xiàn)這個(gè)公鑰不是“服務(wù)器”的就好了。

為了解決這個(gè)問(wèn)題丸凭,數(shù)字證書(shū)出現(xiàn)了福扬,它可以解決我們上面的問(wèn)題腕铸。先大概看下什么是數(shù)字證書(shū),一個(gè)證書(shū)包含下面的具體內(nèi)容:

證書(shū)的發(fā)布機(jī)構(gòu)

證書(shū)的有效期

公鑰

證書(shū)所有者(Subject)

簽名所使用的算法

指紋以及指紋算法

證書(shū)的內(nèi)容的詳細(xì)解釋會(huì)在后面詳細(xì)解釋?zhuān)@里先只需要搞清楚一點(diǎn)铛碑,數(shù)字證書(shū)可以保證數(shù)字證書(shū)里的公鑰確實(shí)是這個(gè)證書(shū)的所有者(Subject)的狠裹,或者證書(shū)可以用來(lái)確認(rèn)對(duì)方的身份。也就是說(shuō)汽烦,我們拿到一個(gè)數(shù)字證書(shū)酪耳,我們可以判斷出這個(gè)數(shù)字證書(shū)到底是誰(shuí)的。至于是如何判斷的刹缝,后面會(huì)在詳細(xì)討論數(shù)字證書(shū)時(shí)詳細(xì)解釋。現(xiàn)在把前面的通信過(guò)程使用數(shù)字證書(shū)修改為如下:

2.5 第五回合:

“客戶(hù)”->“服務(wù)器”:你好

“服務(wù)器”->“客戶(hù)”:你好颈将,我是服務(wù)器梢夯,這里是我的數(shù)字證書(shū) //這里用證書(shū)代替了公鑰

“客戶(hù)”->“服務(wù)器”:向我證明你就是服務(wù)器

“服務(wù)器”->“客戶(hù)”:你好,我是服務(wù)器 {你好晴圾,我是服務(wù)器}[私鑰|RSA]

注意颂砸,上面第二次通信,“服務(wù)器”把自己的證書(shū)發(fā)給了“客戶(hù)”死姚,而不是發(fā)送公鑰人乓。“客戶(hù)”可以根據(jù)證書(shū)校驗(yàn)這個(gè)證書(shū)到底是不是“服務(wù)器”的都毒,也就是能校驗(yàn)這個(gè)證書(shū)的所有者是不是“服務(wù)器”色罚,從而確認(rèn)這個(gè)證書(shū)中的公鑰的確是“服務(wù)器”的。后面的過(guò)程和以前是一樣账劲,“客戶(hù)”讓“服務(wù)器”證明自己的身份戳护,“服務(wù)器”用私鑰加密一段內(nèi)容連同明文一起發(fā)給“客戶(hù)”,“客戶(hù)”把加密內(nèi)容用數(shù)字證書(shū)中的公鑰解密后和明文對(duì)比瀑焦,如果一致腌且,那么對(duì)方就確實(shí)是“服務(wù)器”,然后雙方協(xié)商一個(gè)對(duì)稱(chēng)加密來(lái)保證通信過(guò)程的安全榛瓮。到這里铺董,整個(gè)過(guò)程就完整了,我們回顧一下:

2.6 完整過(guò)程:

step1: “客戶(hù)”向服務(wù)端發(fā)送一個(gè)通信請(qǐng)求

“客戶(hù)”->“服務(wù)器”:你好

step2: “服務(wù)器”向客戶(hù)發(fā)送自己的數(shù)字證書(shū)禀晓。證書(shū)中有一個(gè)公鑰用來(lái)加密信息精续,私鑰由“服務(wù)器”持有

“服務(wù)器”->“客戶(hù)”:你好,我是服務(wù)器匆绣,這里是我的數(shù)字證書(shū)

step3: “客戶(hù)”收到“服務(wù)器”的證書(shū)后驻右,它會(huì)去驗(yàn)證這個(gè)數(shù)字證書(shū)到底是不是“服務(wù)器”的,數(shù)字證書(shū)有沒(méi)有什么問(wèn)題崎淳,數(shù)字證書(shū)如果檢查沒(méi)有問(wèn)題堪夭,就說(shuō)明數(shù)字證書(shū)中的公鑰確實(shí)是“服務(wù)器”的。檢查數(shù)字證書(shū)后,“客戶(hù)”會(huì)發(fā)送一個(gè)隨機(jī)的字符串給“服務(wù)器”用私鑰去加密森爽,服務(wù)器把加密的結(jié)果返回給“客戶(hù)”恨豁,“客戶(hù)”用公鑰解密這個(gè)返回結(jié)果,如果解密結(jié)果與之前生成的隨機(jī)字符串一致爬迟,那說(shuō)明對(duì)方確實(shí)是私鑰的持有者橘蜜,或者說(shuō)對(duì)方確實(shí)是“服務(wù)器”。

“客戶(hù)”->“服務(wù)器”:向我證明你就是服務(wù)器付呕,這是一個(gè)隨機(jī)字符串 //前面的例子中為了方便解釋?zhuān)玫氖恰澳愫谩钡葍?nèi)容计福,實(shí)際情況下一般是隨機(jī)生成的一個(gè)字符串。

“服務(wù)器”->“客戶(hù)”:{一個(gè)隨機(jī)字符串}[私鑰|RSA]

step4: 驗(yàn)證“服務(wù)器”的身份后徽职,“客戶(hù)”生成一個(gè)對(duì)稱(chēng)加密算法和密鑰象颖,用于后面的通信的加密和解密。這個(gè)對(duì)稱(chēng)加密算法和密鑰姆钉,“客戶(hù)”會(huì)用公鑰加密后發(fā)送給“服務(wù)器”说订,別人截獲了也沒(méi)用,因?yàn)橹挥小胺?wù)器”手中有可以解密的私鑰潮瓶。這樣陶冷,后面“服務(wù)器”和“客戶(hù)”就都可以用對(duì)稱(chēng)加密算法來(lái)加密和解密通信內(nèi)容了。

“服務(wù)器”->“客戶(hù)”:{OK毯辅,已經(jīng)收到你發(fā)來(lái)的對(duì)稱(chēng)加密算法和密鑰埂伦!有什么可以幫到你的?}[密鑰|對(duì)稱(chēng)加密算法]

“客戶(hù)”->“服務(wù)器”:{我的帳號(hào)是aaa思恐,密碼是123赤屋,把我的余額的信息發(fā)給我看看}[密鑰|對(duì)稱(chēng)加密算法]

“服務(wù)器”->“客戶(hù)”:{你好,你的余額是100元}[密鑰|對(duì)稱(chēng)加密算法]

…… //繼續(xù)其它的通信

2.7 其它問(wèn)題:

上面的過(guò)程已經(jīng)十分接近HTTPS的真實(shí)通信過(guò)程了壁袄,完全可以按照這個(gè)過(guò)程去理解HTTPS的工作原理类早。但是我為了方便解釋?zhuān)厦嬗行┘?xì)節(jié)沒(méi)有說(shuō)到,有興趣的人可以看下這部分的內(nèi)容嗜逻∩В可以跳過(guò)不看,無(wú)關(guān)緊要栈顷。

【問(wèn)題1】

上面的通信過(guò)程中說(shuō)到逆日,在檢查完證書(shū)后,“客戶(hù)”發(fā)送一個(gè)隨機(jī)的字符串給“服務(wù)器”去用私鑰加密萄凤,以便判斷對(duì)方是否真的持有私鑰室抽。但是有一個(gè)問(wèn)題,“黑客”也可以發(fā)送一個(gè)字符串給“服務(wù)器”去加密并且得到加密后的內(nèi)容靡努,這樣對(duì)于“服務(wù)器”來(lái)說(shuō)是不安全的坪圾,因?yàn)楹诳涂梢园l(fā)送一些簡(jiǎn)單的有規(guī)律的字符串給“服務(wù)器”加密晓折,從而尋找加密的規(guī)律,有可能威脅到私鑰的安全兽泄。所以說(shuō)漓概,“服務(wù)器”隨隨便便用私鑰去加密一個(gè)來(lái)路不明的字符串并把結(jié)果發(fā)送給對(duì)方是不安全的。

〖解決方法〗

每次收到“客戶(hù)”發(fā)來(lái)的要加密的的字符串時(shí)病梢,“服務(wù)器”并不是真正的加密這個(gè)字符串本身胃珍,而是把這個(gè)字符串進(jìn)行一個(gè)hash計(jì)算,加密這個(gè)字符串的hash值(不加密原來(lái)的字符串)后發(fā)送給“客戶(hù)”蜓陌,“客戶(hù)”收到后解密這個(gè)hash值并自己計(jì)算字符串的hash值然后進(jìn)行對(duì)比是否一致觅彰。也就是說(shuō),“服務(wù)器”不直接加密收到的字符串钮热,而是加密這個(gè)字符串的一個(gè)hash值缔莲,這樣就避免了加密那些有規(guī)律的字符串,從而降低被破解的機(jī)率霉旗。“客戶(hù)”自己發(fā)送的字符串蛀骇,因此它自己可以計(jì)算字符串的hash值厌秒,然后再把“服務(wù)器”發(fā)送過(guò)來(lái)的加密的hash值和自己計(jì)算的進(jìn)行對(duì)比,同樣也能確定對(duì)方是否是“服務(wù)器”擅憔。

【問(wèn)題2】

在雙方的通信過(guò)程中鸵闪,“黑客”可以截獲發(fā)送的加密了的內(nèi)容,雖然他無(wú)法解密這個(gè)內(nèi)容暑诸,但是他可以搗亂蚌讼,例如把信息原封不動(dòng)的發(fā)送多次,擾亂通信過(guò)程个榕。

〖解決方法〗

可以給通信的內(nèi)容加上一個(gè)序號(hào)或者一個(gè)隨機(jī)的值篡石,如果“客戶(hù)”或者“服務(wù)器”接收到的信息中有之前出現(xiàn)過(guò)的序號(hào)或者隨機(jī)值,那么說(shuō)明有人在通信過(guò)程中重發(fā)信息內(nèi)容進(jìn)行搗亂西采,雙方會(huì)立刻停止通信凰萨。有人可能會(huì)問(wèn),如果有人一直這么搗亂怎么辦械馆?那不是無(wú)法通信了胖眷? 答案是的確是這樣的,例如有人控制了你連接互聯(lián)網(wǎng)的路由器霹崎,他的確可以針對(duì)你珊搀。但是一些重要的應(yīng)用,例如軍隊(duì)或者政府的內(nèi)部網(wǎng)絡(luò)尾菇,它們都不使用我們平時(shí)使用的公網(wǎng)境析,因此一般人不會(huì)破壞到他們的通信囚枪。

【問(wèn)題3】

在雙方的通信過(guò)程中,“黑客”除了簡(jiǎn)單的重復(fù)發(fā)送截獲的消息之外簿晓,還可以修改截獲后的密文修改后再發(fā)送眶拉,因?yàn)樾薷牡氖敲芪模m然不能完全控制消息解密后的內(nèi)容憔儿,但是仍然會(huì)破壞解密后的密文忆植。因此發(fā)送過(guò)程如果黑客對(duì)密文進(jìn)行了修改,“客戶(hù)”和“服務(wù)器”是無(wú)法判斷密文是否被修改的谒臼。雖然不一定能達(dá)到目的朝刊,但是“黑客”可以一直這樣碰碰運(yùn)氣。

〖解決方法〗

在每次發(fā)送信息時(shí)蜈缤,先對(duì)信息的內(nèi)容進(jìn)行一個(gè)hash計(jì)算得出一個(gè)hash值拾氓,將信息的內(nèi)容和這個(gè)hash值一起加密后發(fā)送。接收方在收到后進(jìn)行解密得到明文的內(nèi)容和hash值底哥,然后接收方再自己對(duì)收到信息內(nèi)容做一次hash計(jì)算咙鞍,與收到的hash值進(jìn)行對(duì)比看是否匹配,如果匹配就說(shuō)明信息在傳輸過(guò)程中沒(méi)有被修改過(guò)趾徽。如果不匹配說(shuō)明中途有人故意對(duì)加密數(shù)據(jù)進(jìn)行了修改续滋,立刻中斷通話過(guò)程后做其它處理。

3. 證書(shū)的構(gòu)成和原理

3.1 證書(shū)的構(gòu)成和原理

之前已經(jīng)大概說(shuō)了一個(gè)證書(shū)由什么構(gòu)成孵奶,但是沒(méi)有仔細(xì)進(jìn)行介紹疲酌,這里對(duì)證書(shū)的內(nèi)容做一個(gè)詳細(xì)的介紹。先看下一個(gè)證書(shū)到底是個(gè)什么東西了袁,在windows下查看一個(gè)證書(shū)時(shí)朗恳,界面是這樣的,我們主要關(guān)注一下Details Tab頁(yè)载绿,其中的內(nèi)容比較長(zhǎng)粥诫,我滾動(dòng)內(nèi)容后后抓了三個(gè)圖,把完整的信息顯示出來(lái):

里面的內(nèi)容比較多——Version崭庸、Serial number臀脏、Signature algorithm 等等,挑幾個(gè)重要的解釋一下冀自。

◆Issuer (證書(shū)的發(fā)布機(jī)構(gòu))

指出是什么機(jī)構(gòu)發(fā)布的這個(gè)證書(shū)揉稚,也就是指明這個(gè)證書(shū)是哪個(gè)公司創(chuàng)建的(只是創(chuàng)建證書(shū),不是指證書(shū)的使用者)熬粗。對(duì)于上面的這個(gè)證書(shū)來(lái)說(shuō)搀玖,就是指"SecureTrust CA"這個(gè)機(jī)構(gòu)。

◆Valid from , Valid to (證書(shū)的有效期)

也就是證書(shū)的有效時(shí)間驻呐,或者說(shuō)證書(shū)的使用期限灌诅。 過(guò)了有效期限芳来,證書(shū)就會(huì)作廢,不能使用了猜拾。

◆Public key (公鑰)

這個(gè)我們?cè)谇懊娼榻B公鑰密碼體制時(shí)介紹過(guò)即舌,公鑰是用來(lái)對(duì)消息進(jìn)行加密的,第2章的例子中經(jīng)常用到的挎袜。這個(gè)數(shù)字證書(shū)的公鑰是2048位的顽聂,它的值可以在圖的中間的那個(gè)對(duì)話框中看得到,是很長(zhǎng)的一串?dāng)?shù)字盯仪。

◆Subject (主題)

這個(gè)證書(shū)是發(fā)布給誰(shuí)的紊搪,或者說(shuō)證書(shū)的所有者,一般是某個(gè)人或者某個(gè)公司名稱(chēng)全景、機(jī)構(gòu)的名稱(chēng)耀石、公司網(wǎng)站的網(wǎng)址等。 對(duì)于這里的證書(shū)來(lái)說(shuō)爸黄,證書(shū)的所有者是Trustwave這個(gè)公司滞伟。

◆Signature algorithm (簽名所使用的算法)

就是指的這個(gè)數(shù)字證書(shū)的數(shù)字簽名所使用的加密算法,這樣就可以使用證書(shū)發(fā)布機(jī)構(gòu)的證書(shū)里面的公鑰炕贵,根據(jù)這個(gè)算法對(duì)指紋進(jìn)行解密梆奈。指紋的加密結(jié)果就是數(shù)字簽名(第1.5節(jié)中解釋過(guò)數(shù)字簽名)。

◆Thumbprint, Thumbprint algorithm (指紋以及指紋算法)

這個(gè)是用來(lái)保證證書(shū)的完整性的鲁驶,也就是說(shuō)確保證書(shū)沒(méi)有被修改過(guò),這東西的作用和2.7中說(shuō)到的第3個(gè)問(wèn)題類(lèi)似舞骆。 其原理就是在發(fā)布證書(shū)時(shí)钥弯,發(fā)布者根據(jù)指紋算法(一個(gè)hash算法)計(jì)算整個(gè)證書(shū)的hash值(指紋)并和證書(shū)放在一起,使用者在打開(kāi)證書(shū)時(shí)督禽,自己也根據(jù)指紋算法計(jì)算一下證書(shū)的hash值(指紋)脆霎,如果和剛開(kāi)始的值對(duì)得上,就說(shuō)明證書(shū)沒(méi)有被修改過(guò)狈惫,因?yàn)樽C書(shū)的內(nèi)容被修改后睛蛛,根據(jù)證書(shū)的內(nèi)容計(jì)算的出的hash值(指紋)是會(huì)變化的。 注意胧谈,這個(gè)指紋會(huì)使用"SecureTrust CA"這個(gè)證書(shū)機(jī)構(gòu)的私鑰用簽名算法(Signature algorithm)加密后和證書(shū)放在一起忆肾。

注意,為了保證安全菱肖,在證書(shū)的發(fā)布機(jī)構(gòu)發(fā)布證書(shū)時(shí)客冈,證書(shū)的指紋和指紋算法,都會(huì)加密后再和證書(shū)放到一起發(fā)布稳强,以防有人修改指紋后偽造相應(yīng)的數(shù)字證書(shū)场仲。這里問(wèn)題又來(lái)了和悦,證書(shū)的指紋和指紋算法用什么加密呢?他們是用證書(shū)發(fā)布機(jī)構(gòu)的私鑰進(jìn)行加密的渠缕「胨兀可以用證書(shū)發(fā)布機(jī)構(gòu)的公鑰對(duì)指紋和指紋算法解密,也就是說(shuō)證書(shū)發(fā)布機(jī)構(gòu)除了給別人發(fā)布證書(shū)外亦鳞,他自己本身也有自己的證書(shū)馍忽。證書(shū)發(fā)布機(jī)構(gòu)的證書(shū)是哪里來(lái)的呢?蚜迅?舵匾?這個(gè)證書(shū)發(fā)布機(jī)構(gòu)的數(shù)字證書(shū)(一般由他自己生成)在我們的操作系統(tǒng)剛安裝好時(shí)(例如windows xp等操作系統(tǒng)),這些證書(shū)發(fā)布機(jī)構(gòu)的數(shù)字證書(shū)就已經(jīng)被微軟(或者其它操作系統(tǒng)的開(kāi)發(fā)機(jī)構(gòu))安裝在操作系統(tǒng)中了谁不,微軟等公司會(huì)根據(jù)一些權(quán)威安全機(jī)構(gòu)的評(píng)估選取一些信譽(yù)很好并且通過(guò)一定的安全認(rèn)證的證書(shū)發(fā)布機(jī)構(gòu)坐梯,把這些證書(shū)發(fā)布機(jī)構(gòu)的證書(shū)默認(rèn)就安裝在操作系統(tǒng)里面了,并且設(shè)置為操作系統(tǒng)信任的數(shù)字證書(shū)刹帕。這些證書(shū)發(fā)布機(jī)構(gòu)自己持有與他自己的數(shù)字證書(shū)對(duì)應(yīng)的私鑰吵血,他會(huì)用這個(gè)私鑰加密所有他發(fā)布的證書(shū)的指紋作為數(shù)字簽名。

3.2 如何向證書(shū)的發(fā)布機(jī)構(gòu)去申請(qǐng)證書(shū)

舉個(gè)例子方便大家理解偷溺,假設(shè)我們公司"ABC Company"花了1000塊錢(qián)蹋辅,向一個(gè)證書(shū)發(fā)布機(jī)構(gòu)"SecureTrust CA"為我們自己的公司"ABC Company"申請(qǐng)了一張證書(shū),注意挫掏,這個(gè)證書(shū)發(fā)布機(jī)構(gòu)"SecureTrust CA"是一個(gè)大家公認(rèn)并被一些權(quán)威機(jī)構(gòu)接受的證書(shū)發(fā)布機(jī)構(gòu)侦另,我們的操作系統(tǒng)里面已經(jīng)安裝了"SecureTrust CA"的證書(shū)。"SecureTrust CA"在給我們發(fā)布證書(shū)時(shí)尉共,把Issuer,Public key,Subject,Valid from,Valid to等信息以明文的形式寫(xiě)到證書(shū)里面褒傅,然后用一個(gè)指紋算法計(jì)算出這些數(shù)字證書(shū)內(nèi)容的一個(gè)指紋,并把指紋和指紋算法用自己的私鑰進(jìn)行加密袄友,然后和證書(shū)的內(nèi)容一起發(fā)布殿托,同時(shí)"SecureTrust CA"還會(huì)給一個(gè)我們公司"ABC Company"的私鑰給到我們。我們花了1000塊錢(qián)買(mǎi)的這個(gè)證書(shū)的內(nèi)容如下:

×××××××××××××××證書(shū)內(nèi)容開(kāi)始×××××××××××××××××

Issuer : SecureTrust CA

Subject : ABC Company

Valid from : 某個(gè)日期

Valid to: 某個(gè)日期

Public Key : 一串很長(zhǎng)的數(shù)字

…… 其它的一些證書(shū)內(nèi)容……

{證書(shū)的指紋和計(jì)算指紋所使用的指紋算法}[SecureTrust CA的私鑰|RSA] //這個(gè)就是"SecureTrust CA"對(duì)這個(gè)證書(shū)的一個(gè)數(shù)字簽名剧蚣,表示這個(gè)證書(shū)確實(shí)是他發(fā)布的支竹,有什么問(wèn)題他會(huì)負(fù)責(zé)(收了我們1000塊,出了問(wèn)題肯定要負(fù)責(zé)任的)

×××××××××××××××證書(shū)內(nèi)容結(jié)束×××××××××××××××××

           // 記不記得前面的約定鸠按?{} 表示RSA加密后的內(nèi)容礼搁,[ | ]表示用什么密鑰和算法進(jìn)行加密

我們"ABC Company"申請(qǐng)到這個(gè)證書(shū)后,我們把證書(shū)投入使用目尖,我們?cè)谕ㄐ胚^(guò)程開(kāi)始時(shí)會(huì)把證書(shū)發(fā)給對(duì)方叹坦,對(duì)方如何檢查這個(gè)證書(shū)的確是合法的并且是我們"ABC Company"公司的證書(shū)呢?首先應(yīng)用程序(對(duì)方通信用的程序卑雁,例如IE募书、OUTLook等)讀取證書(shū)中的Issuer(發(fā)布機(jī)構(gòu))為"SecureTrust CA" 绪囱,然后會(huì)在操作系統(tǒng)中受信任的發(fā)布機(jī)構(gòu)的證書(shū)中去找"SecureTrust CA"的證書(shū),如果找不到莹捡,那說(shuō)明證書(shū)的發(fā)布機(jī)構(gòu)是個(gè)水貨發(fā)布機(jī)構(gòu)鬼吵,證書(shū)可能有問(wèn)題,程序會(huì)給出一個(gè)錯(cuò)誤信息篮赢。 如果在系統(tǒng)中找到了"SecureTrust CA"的證書(shū)齿椅,那么應(yīng)用程序就會(huì)從證書(shū)中取出"SecureTrust CA"的公鑰,然后對(duì)我們"ABC Company"公司的證書(shū)里面的指紋和指紋算法用這個(gè)公鑰進(jìn)行解密启泣,然后使用這個(gè)指紋算法計(jì)算"ABC Company"證書(shū)的指紋涣脚,將這個(gè)計(jì)算的指紋與放在證書(shū)中的指紋對(duì)比,如果一致寥茫,說(shuō)明"ABC Company"的證書(shū)肯定沒(méi)有被修改過(guò)并且證書(shū)是"SecureTrust CA" 發(fā)布的遣蚀,證書(shū)中的公鑰肯定是"ABC Company"的。對(duì)方然后就可以放心的使用這個(gè)公鑰和我們"ABC Company"進(jìn)行通信了纱耻。

★這個(gè)部分非常重要芭梯,一定要理解,您可以重新回顧一下之前的兩章“1弄喘、基礎(chǔ)知識(shí)”和“ 2玖喘、一個(gè)加密通信過(guò)程的演化”,然后再來(lái)理解這部分的內(nèi)容蘑志。如果您把這節(jié)的內(nèi)容看了幾遍還沒(méi)有搞懂證書(shū)的工作原理累奈,您可以留言指出我沒(méi)有說(shuō)清楚的內(nèi)容,我好方便進(jìn)行修正急但。

3.3 證書(shū)的發(fā)布機(jī)構(gòu)

前面已經(jīng)初步介紹了一下證書(shū)發(fā)布機(jī)構(gòu)澎媒,這里再深入討論一下。

其實(shí)所有的公司都可以發(fā)布證書(shū)羊始,我們自己也可以去注冊(cè)一家公司來(lái)專(zhuān)門(mén)給別人發(fā)布證書(shū)旱幼。但是很明顯查描,我們自己的專(zhuān)門(mén)發(fā)布證書(shū)的公司是不會(huì)被那些國(guó)際上的權(quán)威機(jī)構(gòu)認(rèn)可的突委,人家怎么知道你是不是個(gè)狗屁皮包公司?因此微軟在它的操作系統(tǒng)中冬三,并不會(huì)信任我們這個(gè)證書(shū)發(fā)布機(jī)構(gòu)匀油,當(dāng)應(yīng)用程序在檢查證書(shū)的合法信的時(shí)候,一看證書(shū)的發(fā)布機(jī)構(gòu)并不是操作系統(tǒng)所信任的發(fā)布機(jī)構(gòu)勾笆,就會(huì)拋出錯(cuò)誤信息敌蚜。也就是說(shuō)windows操作系統(tǒng)中不會(huì)預(yù)先安裝好我們這個(gè)證書(shū)發(fā)布機(jī)構(gòu)的證書(shū),不信任我們這個(gè)發(fā)布機(jī)構(gòu)窝爪。

不受信任的證書(shū)發(fā)布機(jī)構(gòu)的危害

為什么一個(gè)證書(shū)發(fā)布機(jī)構(gòu)受不受信任這么重要弛车?我們舉個(gè)例子齐媒。假設(shè)我們開(kāi)了一個(gè)狗屁公司來(lái)為別人發(fā)布證書(shū),并且我和微軟有一腿纷跛,微軟在他們的操作系統(tǒng)中把我設(shè)置為了受信任的證書(shū)發(fā)布機(jī)構(gòu)∮骼ǎ現(xiàn)在如果有個(gè)小公司叫Wicrosoft 花了10塊錢(qián)讓我為他們公司申請(qǐng)了一個(gè)證書(shū),并且公司慢慢壯大贫奠,證書(shū)的應(yīng)用范圍也越來(lái)越廣唬血。然后有個(gè)奸商的公司JS Company想冒充Wicrosoft,于是給了我¥10000唤崭,讓我為他們頒布一個(gè)證書(shū)拷恨,但是證書(shū)的名字(Subject)要寫(xiě)Wicrosoft,假如我為了這¥10000谢肾,真的把證書(shū)給了他們腕侄,那么他們以后就可以使用這個(gè)證書(shū)來(lái)冒充Wicrosoft了。

如果是一個(gè)優(yōu)秀的證書(shū)發(fā)布機(jī)構(gòu)勒叠,比如你要向他申請(qǐng)一個(gè)名字叫Wicrosoft的證書(shū)兜挨,它會(huì)讓你提供很多資料證明你確實(shí)可以代表Wicrosoft這個(gè)公司,也就是說(shuō)他回去核實(shí)你的身份眯分。證書(shū)發(fā)布機(jī)構(gòu)是要為他發(fā)布出的證書(shū)負(fù)法律責(zé)任的拌汇。

到這里,你可能會(huì)想弊决,TMD噪舀,那我們自己就不能發(fā)布證書(shū)嗎?就一定要花錢(qián)去申請(qǐng)飘诗?當(dāng)然不是与倡,我們自己也可以成立證書(shū)發(fā)布機(jī)構(gòu),但是需要通過(guò)一些安全認(rèn)證等等昆稿,只是有點(diǎn)麻煩纺座。另外,如果數(shù)字證書(shū)只是要在公司內(nèi)部使用溉潭,公司可以自己給自己生成一個(gè)證書(shū)净响,在公司的所有機(jī)器上把這個(gè)證書(shū)設(shè)置為操作系統(tǒng)信任的證書(shū)發(fā)布機(jī)構(gòu)的證書(shū)(這句話仔細(xì)看清楚,有點(diǎn)繞口)喳瓣,這樣以后公司發(fā)布的證書(shū)在公司內(nèi)部的所有機(jī)器上就可以通過(guò)驗(yàn)證了(在發(fā)布證書(shū)時(shí)馋贤,把這些證書(shū)的Issuer(發(fā)布機(jī)構(gòu))設(shè)置為我們自己的證書(shū)發(fā)布機(jī)構(gòu)的證書(shū)的Subject(主題)就可以了)。但是這只限于內(nèi)部應(yīng)用畏陕,因?yàn)橹挥形覀児咀约旱臋C(jī)器上設(shè)置了信任我們自己這個(gè)所謂的證書(shū)發(fā)布機(jī)構(gòu)配乓,而其它機(jī)器上并沒(méi)有事先信任我們這個(gè)證書(shū)發(fā)布機(jī)構(gòu),所以在其它機(jī)器上,我們發(fā)布的證書(shū)就無(wú)法通過(guò)安全驗(yàn)證犹芹。

4. 在windows中對(duì)數(shù)字證書(shū)進(jìn)行管理

4.1 查看崎页、刪除、安裝 數(shù)字證書(shū)

我們?cè)谏弦徽轮姓f(shuō)到了腰埂,我們的操作系統(tǒng)中會(huì)預(yù)先安裝好一些證書(shū)發(fā)布機(jī)構(gòu)的證書(shū)实昨,我們看下在windows中如何找到這些證書(shū),步驟如下:

1)開(kāi)始菜單->運(yùn)行盐固,輸入mmc荒给,回車(chē)

2)在打開(kāi)的窗口中選擇 File-> Add/Remove Snap-in…

3)然后在彈出的對(duì)話框的 Standalone Tab頁(yè)里面點(diǎn)擊 Add… 按鈕

4)在彈出的對(duì)對(duì)話框中選擇 certificates 后點(diǎn)擊 Add 按鈕

具體的步驟如下圖所示:

上面的步驟結(jié)束后,會(huì)又彈出一個(gè)對(duì)話框刁卜,里面有三個(gè)單選按鈕如下:

My user account

Service account

Computer account

可以選擇第一或者第三個(gè)選項(xiàng)志电,用來(lái)查看當(dāng)前用戶(hù)的證書(shū)或整個(gè)計(jì)算里面安裝的證書(shū)。我們這里就默認(rèn)選擇第一個(gè)蛔趴,平時(shí)一般安裝證書(shū)的時(shí)候都會(huì)給所有用戶(hù)安裝挑辆,所以選擇第一個(gè)和第三個(gè)選項(xiàng)看到的證書(shū)會(huì)差不多。我們?cè)谧筮叺膶?dǎo)航樹(shù)中選中受信任的證書(shū)發(fā)布機(jī)構(gòu)(Trusted Root Certificate Authorities)孝情,然后點(diǎn)擊下面的證書(shū)(Certificates)鱼蝉,在右邊的區(qū)域中就可以看到所有的受信任的證書(shū)發(fā)布機(jī)構(gòu)的證書(shū)。

注意上面的圖片中箫荡,右邊我們選中的這個(gè)證書(shū)發(fā)布機(jī)構(gòu)"SecureTrust CA"魁亦,我們前面在第3章3.2節(jié)中舉例子的時(shí)候,就是去向這個(gè)證書(shū)發(fā)布機(jī)構(gòu)申請(qǐng)的證書(shū)羔挡,由于我們申請(qǐng)的證書(shū)是這個(gè)機(jī)構(gòu)發(fā)布的洁奈,所以應(yīng)用程序在檢查我們的證書(shū)的發(fā)布機(jī)構(gòu)時(shí)(會(huì)檢查我們證書(shū)的簽名,確認(rèn)是該機(jī)構(gòu)發(fā)布的證書(shū))绞灼,就會(huì)發(fā)現(xiàn)是可以信任的證書(shū)發(fā)布機(jī)構(gòu)利术,從而就會(huì)相信我們證書(shū)的真實(shí)性。

刪除數(shù)字證書(shū)很簡(jiǎn)單低矮,直接在右邊的列表中右鍵然后刪除就可以了印叁。

數(shù)字證書(shū)的安裝也比較簡(jiǎn)單,直接雙擊數(shù)字證書(shū)文件军掂,會(huì)打開(kāi)數(shù)字證書(shū)轮蜕,對(duì)話框下面會(huì)有一個(gè)Install Certificate按鈕,點(diǎn)擊后就可以根據(jù)向?qū)нM(jìn)行安裝良姆,如下圖所示:

這個(gè)證書(shū)是我自己生成的測(cè)試證書(shū)肠虽,在證書(shū)的導(dǎo)入向?qū)Ю锩驷O罚鼤?huì)讓你選擇導(dǎo)入到什么位置玛追,如果是一個(gè)我們自己信任的證書(shū)發(fā)布機(jī)構(gòu)自己的證書(shū),只要導(dǎo)入到Certificate Authorities就可以了。Trusted Root Certificate Authorities, Intermediate Certification Authorities, Third-Party Root Certification Authorities 都是可以的痊剖,他們只是對(duì)證書(shū)的發(fā)布機(jī)構(gòu)做了一個(gè)分類(lèi)韩玩,還有一些其它的證書(shū)類(lèi)型,例如Personal(個(gè)人證書(shū))等等陆馁,具體就不介紹了找颓。安裝的時(shí)候一般來(lái)說(shuō)可以用默認(rèn)的選擇項(xiàng)一直"下一步"到底。

4.2 如何自己創(chuàng)建證書(shū)

每個(gè)證書(shū)發(fā)布機(jī)構(gòu)都有自己的用來(lái)創(chuàng)建證書(shū)的工具叮贩,當(dāng)然击狮,具體他們?cè)趺慈?chuàng)建一個(gè)證書(shū)的我也不太清楚,不同類(lèi)型的證書(shū)都有一定的格式和規(guī)范益老,我沒(méi)有仔細(xì)去研究過(guò)這部分內(nèi)容彪蓬。 微軟為我們提供了一個(gè)用來(lái)創(chuàng)建證書(shū)的工具makecert.exe,在安裝Visual Studio的時(shí)候會(huì)安裝上捺萌。如果沒(méi)有安裝也無(wú)所謂档冬,可以上網(wǎng)去下一個(gè),搜索makecert就可以了桃纯】崾模可以直接從我的博客下載,這是鏈接态坦。

向一些正規(guī)的證書(shū)發(fā)布機(jī)構(gòu)申請(qǐng)證書(shū)一般是要收費(fèi)的(因?yàn)閯e人要花時(shí)間檢查你的身份酪刀,確認(rèn)有沒(méi)有同名的證書(shū)等等),這里我們看下如何自己創(chuàng)建一個(gè)證書(shū)占贫,為后面在IIS中配置Https做準(zhǔn)備同诫。

我們用到的是makecert這個(gè)工具,微軟有很詳細(xì)的使用幫助壮锻,我這里只做一個(gè)簡(jiǎn)單的解釋?zhuān)敿?xì)的各種參數(shù)和使用方法請(qǐng)查看MSDN的makecert的幫助琐旁。但是里面有些參數(shù)說(shuō)得不夠清楚,而且還有遺漏的猜绣,可以參看我后面的解釋作為一個(gè)補(bǔ)充灰殴。

先看下makecert最簡(jiǎn)單的使用方式:

makecert.exe test.cer

上面的命令會(huì)在makecert.exe所在的目錄生成一個(gè)證書(shū)文件test.cer的數(shù)字證書(shū)文件£希可以雙擊證書(shū)打開(kāi)牺陶,看看證書(shū)的內(nèi)容如下:

證書(shū)的發(fā)布機(jī)構(gòu)是"Root Agency",證書(shū)的主題(證書(shū)發(fā)布給誰(shuí))是"Joe’s-Software-Emporium"辣之,因?yàn)槲覀儧](méi)有指定把證書(shū)發(fā)布給誰(shuí)掰伸,makecert自己給我們隨便生成了一個(gè)公司的名字。另外還指定了公鑰怀估、簽名算法(用來(lái)解密簽名)狮鸭、指紋和指紋算法等合搅。

注意,因?yàn)檫@個(gè)證書(shū)是由微軟的工具生成的歧蕉,嚴(yán)格來(lái)說(shuō)它沒(méi)什么發(fā)布機(jī)構(gòu)灾部,所以微軟虛擬了一個(gè)叫做"Root Agency"的發(fā)布機(jī)構(gòu),默認(rèn)情況下惯退,windows里面安裝了這個(gè)所謂的證書(shū)發(fā)布機(jī)構(gòu)的證書(shū)赌髓,但是這證書(shū)默認(rèn)情況下不是受信任的,原因很簡(jiǎn)單催跪,這樣做大家都可以用makecert來(lái)制作合法的數(shù)字證書(shū)了锁蠕。如果我們自己硬是要,也可以把它設(shè)置為受信任的懊蒸。

下面我們看下其它的參數(shù)匿沛,比如我們要給網(wǎng)站 www.jefferysun.com 生成一個(gè)證書(shū)MyCA.cer,假設(shè)我們把makecert.exe放在C:盤(pán)下榛鼎,命令行如下:

makecert -r -pe -n "CN=10.30.146.206" -b 01/01/2000 -e 01/01/2036 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12

C:> makecert.exe –pe -r –n "CN=www.jefferysun.com" -ss my -sr LocalMachine -a sha1 -len 2048 MyCA.cer

解釋一下makecert的常用參數(shù)的意思:

-n 指定主題的名字逃呼,這個(gè)是有固定的格式的, CN=主題名字 者娱,CN應(yīng)該是Certificate Name的縮寫(xiě)抡笼。我這里的主題的名字就是我們的IIS所在機(jī)器的IP。這里可以指定一些主題的其它附加信息黄鳍,例如 O= *** 表示組織信息等等推姻。

-r 創(chuàng)建自簽署證書(shū),意思就是說(shuō)在生成證書(shū)時(shí)框沟,將證書(shū)的發(fā)布機(jī)構(gòu)設(shè)置為自己藏古。

-pe 將所生成的私鑰標(biāo)記為可導(dǎo)出。注意忍燥,服務(wù)器發(fā)送證書(shū)給客戶(hù)端的時(shí)候拧晕,客戶(hù)端只能從證書(shū)里面獲取公鑰,私鑰是無(wú)法獲取的梅垄。如果我們指定了這個(gè)參數(shù)厂捞,證書(shū)在安裝在機(jī)器上后,我們還可以從證書(shū)中導(dǎo)出私鑰队丝,默認(rèn)情況下是不能導(dǎo)出私鑰的靡馁。正規(guī)的途徑發(fā)布的證書(shū),是不可能讓你導(dǎo)出私鑰的机久。

-b –e 證書(shū)的有效期

-ss 證書(shū)的存儲(chǔ)名稱(chēng)臭墨,就是windows證書(shū)存儲(chǔ)區(qū)的目錄名,如果不存在在的話就創(chuàng)建一個(gè)膘盖。

-sr 證書(shū)的存儲(chǔ)位置胧弛,只有currentuser(默認(rèn)值)或 localmachine兩個(gè)值尤误。

-sv 指定保存私鑰的文件,文件里面除了包含私鑰外叶圃,其實(shí)也包含了證書(shū)。這個(gè)文件是需要保密的践图,這個(gè)文件在服務(wù)端配置時(shí)是需要用到的掺冠。

這個(gè)CN=10.30.146.206要與自己的服務(wù)器相對(duì)應(yīng),要不然在配置HTTPS的時(shí)候會(huì)出現(xiàn)錯(cuò)誤

-a 指定簽名算法码党,必須是md5或rsa1德崭。(還記得簽名算法的作用不?可以看一下3章的第1節(jié)中關(guān)于簽名算法的介紹)

-in 指定證書(shū)發(fā)布機(jī)構(gòu)的名稱(chēng)

-len 這個(gè)參數(shù)在中文的幫助文檔中好像沒(méi)有提到揖盘,但是這個(gè)其實(shí)很重要眉厨,用于指定公鑰的位數(shù),越大越安全兽狭,默認(rèn)值是1024憾股,推薦2048。我試了下箕慧,這個(gè)不為1024的倍數(shù)也是可以的服球。

生成證書(shū)后可以進(jìn)行安裝,安裝過(guò)程可以參看4.1節(jié)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末颠焦,一起剝皮案震驚了整個(gè)濱河市斩熊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伐庭,老刑警劉巖粉渠,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異圾另,居然都是意外死亡霸株,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)集乔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)淳衙,“玉大人,你說(shuō)我怎么就攤上這事饺著◇锱剩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵幼衰,是天一觀的道長(zhǎng)靴跛。 經(jīng)常有香客問(wèn)我,道長(zhǎng)渡嚣,這世上最難降的妖魔是什么梢睛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任肥印,我火速辦了婚禮,結(jié)果婚禮上绝葡,老公的妹妹穿的比我還像新娘深碱。我一直安慰自己,他們只是感情好藏畅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布敷硅。 她就那樣靜靜地躺著,像睡著了一般愉阎。 火紅的嫁衣襯著肌膚如雪绞蹦。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天榜旦,我揣著相機(jī)與錄音幽七,去河邊找鬼。 笑死溅呢,一個(gè)胖子當(dāng)著我的面吹牛澡屡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咐旧,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼挪蹭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了休偶?” 一聲冷哼從身側(cè)響起梁厉,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踏兜,沒(méi)想到半個(gè)月后词顾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碱妆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年肉盹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疹尾。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡上忍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纳本,到底是詐尸還是另有隱情窍蓝,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布繁成,位于F島的核電站吓笙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏巾腕。R本人自食惡果不足惜面睛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一絮蒿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叁鉴,春花似錦土涝、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至克锣,卻和暖如春茵肃,著一層夾襖步出監(jiān)牢的瞬間腔长,已是汗流浹背袭祟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捞附,地道東北人巾乳。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鸟召,于是被迫代替她去往敵國(guó)和親胆绊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言 文中首先解釋加密解密的一些基礎(chǔ)知識(shí)和概念,然后通過(guò)一個(gè)加密通信過(guò)程的例子說(shuō)明了加密算法的作用跟继,以及數(shù)字證書(shū)的...
    sunny沖哥閱讀 2,993評(píng)論 0 2
  • 文中首先解釋了加密解密的一些基礎(chǔ)知識(shí)和概念种冬,然后通過(guò)一個(gè)加密通信過(guò)程的例子說(shuō)明了加密算法的作用,以及數(shù)字證書(shū)的出現(xiàn)...
    sunny沖哥閱讀 1,389評(píng)論 0 3
  • 數(shù)字證書(shū)原理 - 無(wú)恙 - 博客園 文中首先解釋了加密解密的一些基礎(chǔ)知識(shí)和概念舔糖,然后通過(guò)一個(gè)加密通信過(guò)程的例子說(shuō)明...
    拉肚閱讀 1,663評(píng)論 0 3
  • 文中首先解釋了加密解密的一些基礎(chǔ)知識(shí)和概念娱两,然后通過(guò)一個(gè)加密通信過(guò)程的例子說(shuō)明了加密算法的作用,以及數(shù)字證書(shū)的出現(xiàn)...
    已認(rèn)證用戶(hù)閱讀 3,841評(píng)論 1 4
  • 原文地址:數(shù)字證書(shū)原理,公鑰私鑰加密原理 文中首先解釋了加密解密的一些基礎(chǔ)知識(shí)和概念金吗,然后通過(guò)一個(gè)加密通信過(guò)程的例...
    淇濱杜隆坦閱讀 4,164評(píng)論 4 46