您好,登錄后才能下訂單哦!
先來(lái)掃盲
CA證書(shū) https://coding.net/u/aminglinux/p/nginx/git/blob/master/ssl/ca.md
先來(lái)一個(gè)例子
A公司的小華被派到B公司辦事情。B公司如何信任小華是A公司派來(lái)的呢?
普通介紹信
為了讓B公司信任小華,A公司特意給小華開(kāi)了一封介紹信,在信件中詳細(xì)說(shuō)明了小華的特征以及小華過(guò)來(lái)的目的,
并且聲明這個(gè)小華確實(shí)是A公司派來(lái)的,除此之外還要有一個(gè)A公司的公章。
這樣B公司前臺(tái)姐拿到介紹信后,通過(guò)信件內(nèi)容和A公司公章就能判斷出小華確實(shí)是A公司派來(lái)的員工。
那萬(wàn)一A公司公章是假的呢?畢竟公章偽造太容易了,這樣豈不是會(huì)存在問(wèn)題。咱們就暫且認(rèn)為公章這種東西很難偽造,
否則故事無(wú)法繼續(xù)嘍。
引入第三方中介公司
好,回到剛才的話(huà)題。如果和B公司有業(yè)務(wù)往來(lái)的公司很多,每個(gè)公司的公章都不同,那B公司的前臺(tái)姐就要懂得分辨各種公章,
非常滴麻煩。所以,有某個(gè)中介公司C,發(fā)現(xiàn)了這個(gè)商機(jī)。C公司專(zhuān)門(mén)開(kāi)設(shè)了一項(xiàng)“代理公章”的業(yè)務(wù)。
于是今后,A公司的業(yè)務(wù)員去B公司,需要帶2個(gè)介紹信:
介紹信1(含有C公司的公章及A公司的公章。并且特地注明:C公司信任A公司。)
介紹信2(僅含有A公司的公章,然后寫(xiě)上:茲有xxx先生/女士前往貴公司辦理業(yè)務(wù),請(qǐng)給予接洽......。)
這樣不是增加麻煩了嗎?有啥好處呢?
主要的好處在于,對(duì)于接待公司的前臺(tái),就不需要記住各個(gè)公司的公章分別是啥樣子的,她只要記住中介公司C的公章即可。
當(dāng)她拿到兩份介紹信之后,先對(duì)介紹信1的C公章驗(yàn)明正身,確認(rèn)無(wú)誤之后,再比對(duì)“介紹信1”和“介紹信2”的兩個(gè)A公章是否一致。
如果是一樣的,那就可以證明“介紹信2”是可以信任的了。
相關(guān)專(zhuān)業(yè)術(shù)語(yǔ)的解釋
下面就著上面的例子,把相關(guān)的名詞,作一些解釋。
什么是證書(shū)?
證書(shū),洋文也叫“digital certificate”或“public key certificate”。
它是用來(lái)證明某某東西確實(shí)是某某的東西,通俗地說(shuō),證書(shū)就好比例子里面的公章。通過(guò)公章,
可以證明該介紹信確實(shí)是對(duì)應(yīng)的公司發(fā)出的。
理論上,人人都可以找個(gè)證書(shū)工具,自己做一個(gè)證書(shū)。那如何防止壞人自己制作證書(shū)出來(lái)呢?
什么是CA?
CA 是“Certificate Authority”的縮寫(xiě),也叫“證書(shū)授權(quán)中心”。它是負(fù)責(zé)管理和簽發(fā)證書(shū)的第三方機(jī)構(gòu),
就好比例子里面的中介C公司。
一般來(lái)說(shuō),CA必須是所有行業(yè)和所有公眾都信任的、認(rèn)可的。因此它必須具有足夠的權(quán)威性。
就好比A、B兩公司都必須信任C公司,才會(huì)找C公司作為公章的中介。
什么是CA證書(shū)?
CA證書(shū),顧名思義,就是CA頒發(fā)的證書(shū)。
前面已經(jīng)說(shuō)了,人人都可以找工具制作證書(shū)。但是你一個(gè)小破孩制作出來(lái)的證書(shū)是沒(méi)啥用處的。
因?yàn)槟悴皇菣?quán)威的CA機(jī)關(guān),你自己搞的證書(shū)不具有權(quán)威性。
這就好比上述的例子里,某個(gè)壞人自己刻了一個(gè)公章,蓋到介紹信上。但是別人一看,
不是受信任的中介公司的公章,就不予理睬。
什么是證書(shū)之間的信任關(guān)系?
在開(kāi)篇的例子里談到,引入中介后,業(yè)務(wù)員要同時(shí)帶兩個(gè)介紹信。第一個(gè)介紹信包含了兩個(gè)公章,并注明,公章C信任公章A。
證書(shū)間的信任關(guān)系,就和這個(gè)類(lèi)似。就是用一個(gè)證書(shū)來(lái)證明另一個(gè)證書(shū)是真實(shí)可信滴。
什么是證書(shū)信任鏈?
實(shí)際上,證書(shū)之間的信任關(guān)系,是可以嵌套的。
比如,C信任A1,A1信任A2,A2信任A3......這個(gè)叫做證書(shū)的信任鏈。
只要你信任鏈上的頭一個(gè)證書(shū),那后續(xù)的證書(shū),都是可以信任滴。
什么是根證書(shū)?
根證書(shū)的洋文叫“root certificate”,為了說(shuō)清楚根證書(shū)是咋回事,再來(lái)看個(gè)稍微復(fù)雜點(diǎn)的例子。
假設(shè)C證書(shū)信任A和B;然后A信任A1和A2;B信任B1和B2。則它們之間,構(gòu)成如下的一個(gè)樹(shù)形關(guān)系(一個(gè)倒立的樹(shù))。
處于最頂上的樹(shù)根位置的那個(gè)證書(shū),就是“根證書(shū)”。除了根證書(shū),其它證書(shū)都要依靠上一級(jí)的證書(shū),來(lái)證明自己。
那誰(shuí)來(lái)證明“根證書(shū)”可靠呢?
實(shí)際上,根證書(shū)自己證明自己是可靠滴(或者換句話(huà)說(shuō),根證書(shū)是不需要被證明滴)。
聰明的同學(xué)此刻應(yīng)該意識(shí)到了:根證書(shū)是整個(gè)證書(shū)體系安全的根本。
所以,如果某個(gè)證書(shū)體系中,根證書(shū)出了問(wèn)題(不再可信了),那么所有被根證書(shū)所信任的其它證書(shū),也就不再可信了。
證書(shū)有啥用?
CA證書(shū)的作用有很多,只列出常用的幾個(gè)。
驗(yàn)證網(wǎng)站是否可信(針對(duì)HTTPS)
通常,我們?nèi)绻L問(wèn)某些敏感的網(wǎng)頁(yè)(比如用戶(hù)登錄的頁(yè)面),其協(xié)議都會(huì)使用HTTPS而不是HTTP,因?yàn)镠TTP協(xié)議是明文的,
一旦有壞人在偷窺你的網(wǎng)絡(luò)通訊,他/她就可以看到網(wǎng)絡(luò)通訊的內(nèi)容(比如你的密碼、銀行帳號(hào)、等)。
而 HTTPS 是加密的協(xié)議,可以保證你的傳輸過(guò)程中,壞蛋無(wú)法偷窺。
但是,千萬(wàn)不要以為,HTTPS協(xié)議有了加密,就可高枕無(wú)憂(yōu)了。
假設(shè)有一個(gè)壞人,搞了一個(gè)假的網(wǎng)銀的站點(diǎn),然后誘騙你上這個(gè)站點(diǎn)。
假設(shè)你又比較單純,一不留神,就把你的帳號(hào),口令都輸入進(jìn)去了。那這個(gè)壞蛋的陰謀就得逞了。
為了防止壞人這么干,HTTPS 協(xié)議除了有加密的機(jī)制,還有一套證書(shū)的機(jī)制。通過(guò)證書(shū)來(lái)確保,某個(gè)站點(diǎn)確實(shí)就是某個(gè)站點(diǎn)。
有了證書(shū)之后,當(dāng)你的瀏覽器在訪問(wèn)某個(gè)HTTPS網(wǎng)站時(shí),會(huì)驗(yàn)證該站點(diǎn)上的CA證書(shū)(類(lèi)似于驗(yàn)證介紹信的公章)。
如果瀏覽器發(fā)現(xiàn)該證書(shū)沒(méi)有問(wèn)題(證書(shū)被某個(gè)根證書(shū)信任、證書(shū)上綁定的域名和該網(wǎng)站的域名一致、證書(shū)沒(méi)有過(guò)期),
那么頁(yè)面就直接打開(kāi),否則的話(huà),瀏覽器會(huì)給出一個(gè)警告,告訴你該網(wǎng)站的證書(shū)存在某某問(wèn)題,是否繼續(xù)訪問(wèn)該站點(diǎn)。
驗(yàn)證文件是否可信
SSL原理
https://coding.net/u/aminglinux/p/nginx/git/blob/master/ssl/ssl.md
SSL原理
要想弄明白SSL認(rèn)證原理,首先要對(duì)CA有有所了解,它在SSL認(rèn)證過(guò)程中有非常重要的作用。
說(shuō)白了,CA就是一個(gè)組織,專(zhuān)門(mén)為網(wǎng)絡(luò)服務(wù)器頒發(fā)證書(shū)的,國(guó)際知名的CA機(jī)構(gòu)有VeriSign、Symantec,國(guó)內(nèi)的有GlobalSign。
每一家CA都有自己的根證書(shū),用來(lái)對(duì)它所簽發(fā)過(guò)的服務(wù)器端證書(shū)進(jìn)行驗(yàn)證。
如果服務(wù)器提供方想為自己的服務(wù)器申請(qǐng)證書(shū),它就需要向CA機(jī)構(gòu)提出申請(qǐng)。
服務(wù)器提供方向CA提供自己的身份信息,CA判明申請(qǐng)者的身份后,就為它分配一個(gè)公鑰,
并且CA將該公鑰和服務(wù)器身份綁定在一起,并為之簽字,這就形成了一個(gè)服務(wù)器端證書(shū)。
如果一個(gè)用戶(hù)想鑒別另一個(gè)證書(shū)的真?zhèn)危陀肅A的公鑰對(duì)那個(gè)證書(shū)上的簽字進(jìn)行驗(yàn)證,一旦驗(yàn)證通過(guò),該證書(shū)就被認(rèn)為是有效的。
證書(shū)實(shí)際是由證書(shū)簽證機(jī)關(guān)(CA)簽發(fā)的對(duì)用戶(hù)的公鑰的認(rèn)證。
證書(shū)的內(nèi)容包括:電子簽證機(jī)關(guān)的信息、公鑰用戶(hù)信息、公鑰、權(quán)威機(jī)構(gòu)的簽字和有效期等等。
目前,證書(shū)的格式和驗(yàn)證方法普遍遵循X.509國(guó)際標(biāo)準(zhǔn)。
申請(qǐng)證書(shū)過(guò)程
首先要有一個(gè)CA根證書(shū),然后用CA根證書(shū)來(lái)簽發(fā)用戶(hù)證書(shū)。
用戶(hù)進(jìn)行證書(shū)申請(qǐng):
這樣最終拿到一個(gè)由CA根證書(shū)簽發(fā)的證書(shū),其實(shí)證書(shū)里僅有公鑰,而私鑰是在用戶(hù)手里的。
SSL工作流程(單向)
1.客戶(hù)端say hello 服務(wù)端
2.服務(wù)端將證書(shū)、公鑰等發(fā)給客戶(hù)端
3.客戶(hù)端CA驗(yàn)證證書(shū),成功繼續(xù)、不成功彈出選擇頁(yè)面
4.客戶(hù)端告知服務(wù)端所支持的加密算法
5.服務(wù)端選擇最高級(jí)別加密算法明文通知客戶(hù)端
6.客戶(hù)端生成隨機(jī)對(duì)稱(chēng)密鑰key,使用服務(wù)端公鑰加密發(fā)送給服務(wù)端
7.服務(wù)端使用私鑰解密,獲取對(duì)稱(chēng)密鑰key
8.后續(xù)客戶(hù)端與服務(wù)端使用該密鑰key進(jìn)行加密通信
SSL工作流程(雙向)
單向認(rèn)證,僅僅是客戶(hù)端需要檢驗(yàn)服務(wù)端證書(shū)是否是正確的,而服務(wù)端不會(huì)檢驗(yàn)客戶(hù)端證書(shū)是否是正確的。 雙向認(rèn)證,指客戶(hù)端驗(yàn)證服務(wù)器端證書(shū),而服務(wù)器也需要通過(guò)CA的公鑰證書(shū)來(lái)驗(yàn)證客戶(hù)端證書(shū)。
雙向驗(yàn)證的過(guò)程:
1.客戶(hù)端say hello 服務(wù)端
2.服務(wù)端將證書(shū)、公鑰等發(fā)給客戶(hù)端
3.客戶(hù)端CA驗(yàn)證證書(shū),成功繼續(xù)、不成功彈出選擇頁(yè)面
4.客戶(hù)端將自己的證書(shū)和公鑰發(fā)送給服務(wù)端
5.服務(wù)端驗(yàn)證客戶(hù)端證書(shū),如不通過(guò)直接斷開(kāi)連接
6.客戶(hù)端告知服務(wù)端所支持的加密算法
7.服務(wù)端選擇最高級(jí)別加密算法使用客戶(hù)端公鑰加密后發(fā)送給客戶(hù)端
8.客戶(hù)端收到后使用私鑰解密并生成隨機(jī)對(duì)稱(chēng)密鑰key,使用服務(wù)端公鑰加密發(fā)送給服務(wù)端
9.服務(wù)端使用私鑰解密,獲取對(duì)稱(chēng)密鑰key
10.后續(xù)客戶(hù)端與服務(wù)端使用該密鑰key進(jìn)行加密通信
在Linux機(jī)器上生成SSL密鑰對(duì)
https://coding.net/u/aminglinux/p/nginx/git/blob/master/ssl/key.md
生成CA根證書(shū)
default_ca = CA_default 改為 default_ca = CA_test
[ CA_default ] 改為 [ CA_test ]
dir = /etc/pki/CA 改為 dir = /etc/pki/ca_test
certificate = $dir/cacert.pem 改為 certificate = $dir/root/ca.crt
private_key = $dir/private/cakey.pe 改為 private_key = $dir/root/ca.key
//生成請(qǐng)求文件,會(huì)讓我們填寫(xiě)一些指標(biāo),這里要注意:如果在這一步填寫(xiě)了相應(yīng)的指標(biāo),
比如Country Name、State or Province Name、hostname。
生成crt文件
生成server端證書(shū)
//用根證書(shū)簽名server.csr,最后生成公鑰文件server.crt,此步驟會(huì)有兩個(gè)地方需要輸入y
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
生成客戶(hù)端證書(shū)
如果做ssl的雙向認(rèn)證,還需要給客戶(hù)端生成一個(gè)證書(shū),步驟和上面的基本一致
//簽名client.csr, 生成client.crt,此步如果出現(xiàn)
failed to update database
TXT_DB error number 2
需執(zhí)行:
執(zhí)行完,再次重復(fù)執(zhí)行簽名client.csr那個(gè)操作
如上操作如下結(jié)果
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。