溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

ssl原理及ssl配置

發(fā)布時(shí)間:2020-06-05 15:06:18 來(lái)源:網(wǎng)絡(luò) 閱讀:196 作者:大屁孩兒 欄目:系統(tǒng)運(yùn)維

先來(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ù))。

ssl原理及ssl配置

處于最頂上的樹(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ò)程

ssl原理及ssl配置

首先要有一個(gè)CA根證書(shū),然后用CA根證書(shū)來(lái)簽發(fā)用戶(hù)證書(shū)。
用戶(hù)進(jìn)行證書(shū)申請(qǐng):

  1. 先生成一個(gè)私鑰
  2. 用私鑰生成證書(shū)請(qǐng)求(證書(shū)請(qǐng)求里應(yīng)含有公鑰信息)
  3. 利用證書(shū)服務(wù)器的CA根證書(shū)來(lái)簽發(fā)證書(shū)

這樣最終拿到一個(gè)由CA根證書(shū)簽發(fā)的證書(shū),其實(shí)證書(shū)里僅有公鑰,而私鑰是在用戶(hù)手里的。

SSL工作流程(單向)

ssl原理及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ū)

mkdir /etc/pki/ca_test //創(chuàng)建CA更證書(shū)的目錄

cd /etc/pki/ca_test

mkdir root server client newcerts //創(chuàng)建幾個(gè)相關(guān)的目錄

echo 01 > serial //定義序列號(hào)為01

echo 01 > crlnumber //定義crl號(hào)為01

touch index.txt //創(chuàng)建index.txt

cd ..

vi tls/openssl.cnf //改配置文件

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

openssl genrsa -out /etc/pki/ca_test/root/ca.key //生成私鑰

openssl req -new -key /etc/pki/ca_test/root/ca.key -out /etc/pki/ca_test/root/ca.csr

//生成請(qǐng)求文件,會(huì)讓我們填寫(xiě)一些指標(biāo),這里要注意:如果在這一步填寫(xiě)了相應(yīng)的指標(biāo),
比如Country Name、State or Province Name、hostname。

openssl x509 -req -days 3650 -in /etc/pki/ca_test/root/ca.csr -signkey /etc/pki/ca_test/root/ca.key -out /etc/pki/ca_test/root/ca.crt

生成crt文件

生成server端證書(shū)

cd /etc/pki/ca_test/server

openssl genrsa -out server.key //生成私鑰文件

openssl req -new -key server.key -out server.csr//生成證書(shū)請(qǐng)求文件,填寫(xiě)信息需要和ca.csr中的Organization Name保持一致

openssl ca -in server.csr -cert /etc/pki/ca_test/root/ca.crt -keyfile /etc/pki/ca_test/root/ca.key -out server.crt -days 3650

//用根證書(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ū),步驟和上面的基本一致

cd /etc/pki/ca_test/client

openssl genrsa -out client.key //生成私鑰文件

openssl req -new -key client.key -out client.csr //生成請(qǐng)求文件,填寫(xiě)信息需要和ca.csr中的Organization Name保持一致

openssl ca -in client.csr -cert /etc/pki/ca_test/root/ca.crt -keyfile /etc/pki/ca_test/root/ca.key -out client.crt -days 3650

//簽名client.csr, 生成client.crt,此步如果出現(xiàn)
failed to update database
TXT_DB error number 2

需執(zhí)行:

sed -i 's/unique_subject = yes/unique_subject = no/' /etc/pki/ca_test/index.txt.attr

執(zhí)行完,再次重復(fù)執(zhí)行簽名client.csr那個(gè)操作

如上操作如下結(jié)果
ssl原理及ssl配置

向AI問(wèn)一下細(xì)節(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)容。

AI