日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数字证书的原理

發(fā)布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数字证书的原理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

加密和解密

先說加密。
明文P,加上密碼W一混淆之后,變成密文M
如果不知道W,則無法從M反推回P。也就是無法進(jìn)行解密。
類似這種加密方式,稱為對稱加密。也就是加密、解密使用的密碼是一樣的。
實際上加解密并不是直接使用密碼,而是經(jīng)由密碼生成的密鑰。
這種算法有很多,比如AES。

另外還有一種神奇的加解密算法,叫做非對稱加密。比如RSA。
非對稱加密使用的密碼有一對,一個稱為公鑰Pub,一個稱為私鑰Priv。
明文P,經(jīng)過公鑰Pub使用RSA加密算法一混淆之后,變成了密文M。這個密文M,用公鑰Pub是解不開的,需要用私鑰Priv來解密。
同樣地,明文P,經(jīng)過私鑰Priv使用RSA加密算法一混淆之后,變成了密文M。
這個M,也只能用公鑰pub來解密。
所謂公鑰,就是可以公開出去可以供所有人使用的密鑰。不像對稱加密里的密碼,要小心翼翼的存著。

還有一種算法,叫做hash算法。是單向加密。就是只能從明文得到密文,卻無法從密文得到明文。這種算法有一個好處,就是明文哪怕只有一位不一樣,加密后得到的密文也不一樣。所以常用來進(jìn)行比較明文是否被篡改過。

數(shù)字證書

有了以上的基礎(chǔ),就可以開始說數(shù)字證書了。

證書的組成

首先,有一個權(quán)威的證書簽發(fā)機(jī)構(gòu),稱為CA——全球就那么幾個公司比較權(quán)威啦,這個機(jī)構(gòu),先用RSA產(chǎn)生一對公私鑰。
私鑰自己留著藏起來,你要是能偷到手就厲害了。
然后用自己的私鑰對自己的公鑰進(jìn)行簽名,生成所謂的數(shù)字證書。
這個過程大概是這樣的:
先生成一個文件,文件內(nèi)容大概是這樣的:
- 公鑰內(nèi)容
- 簽發(fā)者ID—-誰簽發(fā)的證書
- Subject—-也就是這個證書簽發(fā)給誰。這里subject和簽發(fā)者ID相同。
- 有效期
- 其他信息
以上內(nèi)容都是明文。我們稱為內(nèi)容P。

然后使用hash算法,對內(nèi)容P進(jìn)行hash計算,得到一個hash值H。
然后使用簽發(fā)機(jī)構(gòu)的私鑰對H進(jìn)行RSA加密,得到簽名信息S。這個步驟稱為簽名,就是用私鑰對某公開內(nèi)容的hash值進(jìn)行加密。

然后將P,S連成一個文件,這個文件就是所謂的數(shù)字證書了。所以數(shù)字證書里,包括證書持有者的身份信息,證書信息,證書持有人的公鑰,以及簽名信息。

證書的驗證

現(xiàn)在假設(shè)某人得到了這個證書,如何確認(rèn)這個證書屬于誰的呢?
我們看數(shù)字證書里有些什么?可以得到P,可以得到S。
我們用同樣的hash算法對P進(jìn)行hash計數(shù),得到一個hash值H1。
P里有公鑰,簽發(fā)者ID,Subject,有效期,及其他信息。我們用公鑰解密S,得到了一個值H’。
這個H‘就是制作數(shù)字證書的時候,用私鑰對S加密的H。
現(xiàn)在對比H’和H1是否相等,如果相等,那么就證明這個證書是有簽發(fā)者簽發(fā)給subject的證書。否則就說明:1.內(nèi)容P被篡改過,或者2.證書不是由CA簽發(fā)的。
這個是對自簽發(fā)證書的驗證過程。需要說明的是,這種自簽發(fā)證書的驗證不常使用,但如何驗證證書的原理類似。

證書管理機(jī)構(gòu) - Certificate Authority

既然自己可以給自己簽發(fā)證書,那黑客宣稱自己是某著名CA,然后給自己簽發(fā)一個證書。那驗證者如何來驗證這個證書是黑客自己的呢還是那個著名的CA呢?
如果僅僅按照上文所說的自簽發(fā)證書驗證過程來看,是無法確認(rèn)身份的。這個問題,就是CA存在的意義了。

所謂全球權(quán)威的CA,就那么幾個公司,這幾個公司的證書,被各軟件廠商設(shè)置成“可信任的根證書”了。至于這些CA是怎么把自己的數(shù)字證書交給軟件廠商而且讓他們信任自己,我也不知道。
如果你知道了,你就可以自己給自己簽發(fā)一個證書,交給微軟的IE,或者firefox等,讓他們把你的證書嵌入到軟件里去。這樣一來,你就成了全球權(quán)威的CA之一了!
現(xiàn)在知道了,自簽發(fā)的數(shù)字證書,要被各軟件信任,是不容易的。一旦CA的根證書存在用戶的系統(tǒng)了,就可以用這個根證書來驗證其他證書了。并用被驗證過的證書來認(rèn)證身份。

我們舉一個例子,說明數(shù)字證書用來進(jìn)行身份認(rèn)證,就是https連接某網(wǎng)站的時候的身份認(rèn)證過程。
首先,某網(wǎng)站當(dāng)然是一個web服務(wù)器,它要有一個數(shù)字證書。這個證書,要么是自己簽發(fā)的,要么是由第三方簽發(fā)的,一般這個第三方是全球權(quán)威的CA。
IE或者firefox用https連上web server,這個時候,IE或者firefox最擔(dān)心的是這個web server是冒充的網(wǎng)站,比如我登錄某銀行網(wǎng)站,結(jié)果連上了一個釣魚網(wǎng)站,用戶也沒有發(fā)現(xiàn),就在這個釣魚網(wǎng)站做的和真網(wǎng)站一樣的頁面里,輸入了自己的用戶名密碼,豈不是就這么泄露了機(jī)密信息么?
那么怎么確認(rèn)這個網(wǎng)站是正確的呢?這個就需要瀏覽器要求web server提供自己的數(shù)字證書來證明自己的身份。
網(wǎng)站的身份是什么?域名,比如https://www.zhihu.com。你如果打了https://www.zihu.com,也出現(xiàn)跟知乎一樣的網(wǎng)站,瀏覽器沒有警告你說此網(wǎng)站不合法,結(jié)果你輸入了自己的用戶名和密碼登錄,你覺得這個是什么問題?

繼續(xù)剛才的話題。瀏覽器要求web server的證書來證明我在瀏覽器中輸入的網(wǎng)址,并沒有連接到錯誤的網(wǎng)站上去,于是web server把自己的數(shù)字證書傳給瀏覽器。瀏覽器對之進(jìn)行驗證,確認(rèn)此網(wǎng)站的身份。

請注意兩個情況的區(qū)別:一,我在瀏覽器輸入https://www.zhihu.com,連接到了黑客的釣魚服務(wù)器,而沒有連接到真正的服務(wù)器;二,我在瀏覽器輸入https://www.zihu.com,連接到了一個黑客的釣魚服務(wù)器。

現(xiàn)在我們繼續(xù)看這個數(shù)字證書怎么證明自己的身份。
假設(shè)數(shù)字證書是第三方簽發(fā)的,但這個第三方卻不權(quán)威。也就是說,給網(wǎng)站簽發(fā)證書的這個CA,沒有被IE等瀏覽器認(rèn)可。

一個12306的例子

這個時候,瀏覽器就會警告用戶,說這個網(wǎng)站提供的證書不安全,比如一臺干凈的新系統(tǒng),第一次訪問12306網(wǎng)站的時候,提示:

這個警告的意思是說,證明該網(wǎng)站身份的數(shù)字證書,無法確認(rèn)真假。既然數(shù)字證書無法確認(rèn)真假,那自然也就無法確認(rèn)我輸入的網(wǎng)址是否連接到了真正的服務(wù)器了。

我們也可以在瀏覽器查看此證書。查看12306網(wǎng)站的證書,內(nèi)容是這樣的:

簽發(fā)者是SRCA,這是什么意思呢?
就是說,中鐵數(shù)字認(rèn)證中心簽發(fā)給12306網(wǎng)站的數(shù)字證書,其簽發(fā)者”中鐵數(shù)字認(rèn)證中心“,在IE眼里是不受信任的。那IE自然對一個不受信任的簽發(fā)機(jī)構(gòu)簽發(fā)的數(shù)字證書也認(rèn)為不安全了。那么這個數(shù)字證書到底能不能證明12306的身份呢?答案是不能。

因為這個證書是由SRCA簽發(fā)的。也就是說,12306網(wǎng)站的數(shù)字證書,是用SRCA的私鑰簽名過的。
回憶一下簽名的意思,就是用私鑰對公開內(nèi)容的HASH值進(jìn)行加密。這里的公開內(nèi)容,就是12306的數(shù)字證書中的身份信息,12306網(wǎng)站公鑰,證書信息等內(nèi)容;而簽名,就是SRCA的私鑰對12306的數(shù)字證書部分公開內(nèi)容的HASH值的加密。
既然是用SRCA的私鑰簽名過的,就必須使用SRCA的公鑰來驗證這個簽名。
但是SRCA的公鑰在哪里?怎么能證明這個公鑰就是SRCA的而不是其他黑客的?這就回到了最初的CA存在意義的問題那里了。我們無法證明。
所以IE并沒有SRCA的公鑰。如果SRCA將自己的數(shù)字證書嵌入到IE里了,IE自然就有了。
既然沒有嵌入進(jìn)IE里,那通過手動添加SRCA到IE里可以嗎?當(dāng)然可以,這就是為什么12306要求安裝受信任的根證書的原因。

那么這個安裝動作,就要非常小心了。你怎么能確認(rèn)這個SRCA是一個合法權(quán)威的CA呢,或者說,你怎么能證明你下載的這個CA證書,真的就是SRCA的呢?一旦安裝了這個CA證書,其影響是鏈?zhǔn)降摹?
想想看我們?yōu)槭裁窗惭b了12306網(wǎng)站提供的根證書?是基于對12306網(wǎng)站的信任。這個根證書是網(wǎng)站自身提供的,但是我們從新聞聯(lián)播里,從大眾行為里,信任了這個網(wǎng)站,安裝了根證書。同樣地,IE里內(nèi)嵌的根證書我們?yōu)槭裁聪嘈潘?#xff1f;人為的被逼的相信,不相信就沒有辦法建立完整的安全鏈!

我們看看從12306網(wǎng)站下載的SRCA的CA證書:

簽發(fā)者和簽發(fā)給的人都是SRCA,就是自己給自己簽發(fā)。但是這個證書,沒有人能證明其是否可信任。但是我們,人類,基于對國家的信任,認(rèn)為其可信任。安裝了這個證書之后,在IE里可以查看到它。

那么SRCA是如何驗證12306網(wǎng)站的身份的呢?是如何驗證12306提供的數(shù)字證書的有效性呢?
也就是受信任的根證書,如何來驗證網(wǎng)站的數(shù)字證書的呢?

在以上描述中,對于自簽發(fā)證書中的公鑰的使用,可能對大家有一些誤導(dǎo)。實際上,數(shù)字證書中的公鑰,可以被用來驗證其他數(shù)字證書,也可以被用來進(jìn)行兩個節(jié)點間通信時候的加密密鑰(當(dāng)然實際使用的加密密鑰是另一回事情,這里暫且略過)。大多數(shù)https網(wǎng)站提供的數(shù)字證書的目的,一個是確認(rèn)身份,一個是加密瀏覽器與Web Server之間的通信數(shù)據(jù)。

我們構(gòu)造一個場景:
假設(shè)SRCA的公鑰證書已經(jīng)被用戶添加為受信任的根證書。也就是SRCA的公鑰存于用戶的計算機(jī)系統(tǒng)中了。而SRCA的私鑰存在于SRCA公司董事長的某個保險柜里。

首先是12306網(wǎng)站向SRCA申請數(shù)字證書。
12306網(wǎng)站申請數(shù)字證書的時候,需要提供一些信息,主要包括:12306的URL,12306自己產(chǎn)生的一對RSA公私鑰對中的公鑰,其他一些相關(guān)信息。
SRCA就用自己的私鑰對12306的申請內(nèi)容進(jìn)行簽名,形成一個數(shù)字證書,還給12306網(wǎng)站。
所以這個證書里,包括了:
1. 12306網(wǎng)站的URL
2. 12306網(wǎng)站使用的RSA公私鑰對中的公鑰。
3. 證書簽發(fā)者的信息。
4. 證書簽名。
在12306網(wǎng)站里,于是就有一個數(shù)字證書,還有一份該數(shù)字證書中的公鑰對應(yīng)的私鑰,這對公私鑰是12306自己產(chǎn)生的。其中數(shù)字證書由SRCA的私鑰簽名了。而SRCA的公鑰已經(jīng)存在于用戶瀏覽器中。12306網(wǎng)站的數(shù)字證書中包括了12306中的公私鑰對的公鑰和URL。

當(dāng)瀏覽器連接到12306,要求網(wǎng)站提供證書證明自己身份的時候,網(wǎng)站傳輸數(shù)字證書給瀏覽器(一個小問題,這個傳輸過程安全嗎?)。
瀏覽器得到12306的證書后,發(fā)現(xiàn)證書的簽發(fā)者是SRCA,就用SRCA的公鑰證書驗證證書;確認(rèn)數(shù)字證書確實屬于12306之后,也就是輸入的網(wǎng)址連到上的服務(wù)器是真正的12306網(wǎng)站的服務(wù)器,沒有跑偏,因為這個網(wǎng)站提供了能夠證明身份的數(shù)字證書而且數(shù)字證書中的URL與訪問的URL是一致的;還從12306網(wǎng)站提供的數(shù)字證書中就得到了公鑰,這個公鑰是網(wǎng)站自己產(chǎn)生的,于是瀏覽器有12306網(wǎng)站的公鑰,12306網(wǎng)站自己也有私鑰,二者就可以用這對公私鑰進(jìn)行加密通訊了(當(dāng)然實際通信過程的加密不是這樣的,有一些變化)。
具體流程如下:
1. 當(dāng)用戶在瀏覽器地址欄里輸入了12306的網(wǎng)址后,經(jīng)DNS解析,連接到了12306的網(wǎng)站的某臺服務(wù)器。12306網(wǎng)站傳輸給瀏覽器一份數(shù)字證書CERT_12306。
2. 瀏覽器根據(jù)數(shù)字證書內(nèi)容,發(fā)現(xiàn)該證書簽名者是SRCA。
3. 瀏覽器查找系統(tǒng)中受信任的根證書中是否有SRCA的公鑰證書,找到了。
4. 瀏覽器得到SRCA公鑰證書中的公鑰Pub_SRCA。
5. 用Pub_SRCA解密CERT_12306中的簽名部分,得到hash值H1。
6. 瀏覽器計算CERT_12306中的明文內(nèi)容,得到HASH值H2,對比H1,H2,驗證數(shù)字證書有效性。如果有效,則得到明文內(nèi)容中的URL,發(fā)現(xiàn)正在訪問的URL與證書中得到的URL一致,則此次訪問正常。身份認(rèn)證通過。

所以12306數(shù)字證書的驗證,是使用SRCA公鑰證書中的公鑰驗證的。因為12306網(wǎng)站數(shù)字證書是SRCA簽發(fā)的,就必須用SRCA公鑰驗證。
自簽發(fā)證書,是用自己證書中的公鑰來驗證自己的。因為自簽發(fā)證書是自己的私鑰簽發(fā)的,所以需要使用自己的公鑰驗證。
也就簽名的時候用的什么公私鑰對中的私鑰,則驗證簽名的時候就需要用對應(yīng)的公鑰。

而網(wǎng)站的數(shù)字證書提供了公鑰,網(wǎng)站自己有私鑰。瀏覽器于是產(chǎn)生一個隨機(jī)數(shù)R1,用公鑰加密發(fā)給服務(wù)器,服務(wù)器用私鑰解密后,得到這個隨機(jī)數(shù)R1,后續(xù)兩者就用這個R1作為對稱加密的密鑰來加密傳輸?shù)臄?shù)據(jù),這個大約是SSL協(xié)議的簡單過程。

作者:三一斜狩
鏈接:https://www.zhihu.com/question/24294477/answer/74783418
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

總結(jié)

以上是生活随笔為你收集整理的数字证书的原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。