侵權(quán)投訴
訂閱
糾錯(cuò)
加入自媒體

物聯(lián)網(wǎng)云平臺(tái)加密、證書的那些事

OpenPGP協(xié)議/標(biāo)準(zhǔn)

加密和證書的概念介紹完了,再來(lái)了解一個(gè)行業(yè)標(biāo)準(zhǔn):OpenPGP。

OpenPGP是什么?

OpenPGP是一種非專有協(xié)議,為加密消息、簽名、私鑰和用于交換公鑰的證書定義了統(tǒng)一標(biāo)準(zhǔn)。

OpenPGP協(xié)議的實(shí)現(xiàn)

OpenPGP協(xié)議有2個(gè)實(shí)現(xiàn):

PGP(Pretty Good Privacy)GPG(GNU Privacy Guard)

PGP是一個(gè)加密程序,為數(shù)據(jù)通信提供了加密和驗(yàn)證功能,通常用于簽名、加密和解密文本、電子郵件和文件。

GPG是PGP的開源實(shí)現(xiàn)。

OpenPGP的使用流程

Step1: 公布自己的公鑰
每個(gè)人把自己的公鑰上傳到公鑰服務(wù)器上(subkeys.pgp.net),然后通過(guò)交換機(jī)制,所有的公鑰服務(wù)器最終都會(huì)包含你的公鑰,就類似域名服務(wù)器同步域名解析信息一樣。

由于公鑰服務(wù)器沒(méi)有檢查機(jī)制,任何人都可以用我的名義上傳公鑰,所以沒(méi)有辦法來(lái)保證服務(wù)器上的公鑰一定是可靠性。通常,我可以在網(wǎng)站上公布一個(gè)公鑰指紋,讓其他人下載我的公鑰之后,計(jì)算一下公鑰指紋,然后與我公布的指紋進(jìn)行比對(duì),以此來(lái)確認(rèn)證書的有效性。

Step2: 獲取別人的公鑰
為了獲得別人的公鑰,可以讓對(duì)方直接發(fā)給我,也可以從公鑰服務(wù)器上下載。為了安全起見(jiàn),需要對(duì)下載的公鑰使用其他機(jī)制進(jìn)行安全認(rèn)證,例如剛才說(shuō)的指紋。

Step3: 用于加密
用對(duì)方的公鑰加密文件,發(fā)送給對(duì)方,對(duì)方用他自己的私鑰進(jìn)行解密。

Step4: 用于簽名
用我的私鑰進(jìn)行加密,把加密后文件發(fā)送給對(duì)方,對(duì)方用我的公鑰進(jìn)行解密,只要能正確解密,就證明這個(gè)文件的確是我加密的。

SSL/TLS

SSL全稱是Secure Socket Layer(安全套階層協(xié)議),它是一個(gè)安全協(xié)議,目的是用來(lái)為互聯(lián)網(wǎng)提供安全的數(shù)據(jù)傳輸。

SSL在工作過(guò)程中,就利用了前面描述的概念:對(duì)稱加密、非對(duì)稱加密、證書等。如果前面的概念都梳理清楚了,那么理解SSL也就不成問(wèn)題了。

SSL協(xié)議有1,2,3這個(gè)三個(gè)版本,TLS是SSL V3標(biāo)準(zhǔn)化之后的產(chǎn)物。事實(shí)上現(xiàn)在用的都是TLS,但是大家都習(xí)慣了SSL這個(gè)稱呼。

協(xié)議分層

SSL協(xié)議最大的優(yōu)點(diǎn)就是與應(yīng)用層無(wú)關(guān),在SSL協(xié)議的上層,可以運(yùn)行一些高層應(yīng)用協(xié)議,例如:HTTP, FTP, TELNET...,也就是說(shuō)這些高層協(xié)議可以透明的建立在SSL協(xié)議層之上。

握手過(guò)程

SSL使用X.509標(biāo)準(zhǔn),握手就是指客戶端與服務(wù)端在通信的開始階段進(jìn)行鑒權(quán)和協(xié)商,最終目的是:

確認(rèn)對(duì)方是合法的通信對(duì)象;與對(duì)方協(xié)商得到對(duì)稱加密秘鑰。

我們來(lái)一步一步梳理握手過(guò)程:

Step1
Client向Server發(fā)送如下信息:

隨機(jī)數(shù)1;
Client端支持的SSL版本號(hào);
Client端支持的加密算法列表。

Step2
Server分析接收到的信息,返回如下信息給Client:

隨機(jī)數(shù)2;
選擇的加密算法;
Server證書

Step3
Client端驗(yàn)證Server發(fā)來(lái)的證書是否有效,具體過(guò)程上面已經(jīng)描述過(guò)。

如果驗(yàn)證失敗,通信結(jié)束;如果驗(yàn)證通過(guò),就產(chǎn)生隨機(jī)數(shù)3,并使用剛才的隨機(jī)數(shù)1、隨機(jī)數(shù)2,然后用選擇的算法生成一個(gè)對(duì)稱加密秘鑰,這個(gè)秘鑰就用于后面正常的數(shù)據(jù)通信中。

然后發(fā)送如下信息給Server:

隨機(jī)數(shù)3,并且用server證書中的公鑰進(jìn)行加密;

此時(shí),Cliend端的握手流程結(jié)束,因?yàn)橐呀?jīng)達(dá)到了握手的最終目的:確認(rèn)Server合法,得到對(duì)稱加密秘鑰。

Step4
Server端在接收到加密后的隨機(jī)數(shù)3時(shí),用自己的私鑰進(jìn)行解密,然后和之前的隨機(jī)數(shù)1、隨機(jī)數(shù)2一起,使用相同的算法生成對(duì)稱加密秘鑰。

至此,Server端的握手過(guò)程也就結(jié)束,下面就可以用對(duì)稱加密秘鑰來(lái)對(duì)數(shù)據(jù)進(jìn)行加密了。

注意:上面描述的握手過(guò)程中是單向認(rèn)證,也就是Client端驗(yàn)證Server是否合法的。如果需要雙向認(rèn)證,那么客戶端也應(yīng)該把自己的證書發(fā)送給Server,然后Server來(lái)驗(yàn)證這個(gè)證書是否合法,確認(rèn)證書合法之后才繼續(xù)執(zhí)行后面面的握手流程。

HTTPS與SSL的關(guān)系

HTTPS拆開來(lái)就是:HTTP+SSL,就是在HTTP的下面增加了SSL安全傳輸協(xié)議層,在瀏覽器連接到服務(wù)器之后,就執(zhí)行上面描述的SSL握手過(guò)程。握手結(jié)束之后,雙方得到對(duì)稱加密秘鑰,在HTTP協(xié)議看來(lái)是明文傳輸數(shù)據(jù),下面的SSL層對(duì)數(shù)據(jù)進(jìn)行加密和解密。

OpenSSL OpenSSL是什么?

上面描述的SSL中這么多的東西都是協(xié)議(或者稱為標(biāo)準(zhǔn)),協(xié)議只是規(guī)定了應(yīng)該怎么做,但是具體的代碼實(shí)現(xiàn)應(yīng)該由誰(shuí)來(lái)做呢?我們?cè)趯懴嚓P(guān)的SSL程序時(shí)好像從來(lái)沒(méi)有實(shí)現(xiàn)過(guò)這個(gè)協(xié)議,都是直接調(diào)用第三方提供的庫(kù)就達(dá)到了加密傳輸?shù)哪康。?dāng)然了,如果你實(shí)現(xiàn)過(guò)SSL協(xié)議,請(qǐng)?jiān)试S我對(duì)你表示佩服,給你一萬(wàn)個(gè)贊!

在編程領(lǐng)域,永遠(yuǎn)都存在熱心腸的人!OpenSSL就是一個(gè)免費(fèi)的SSL/TLS實(shí)現(xiàn),就是說(shuō):OpenSSL實(shí)現(xiàn)了SSL/TLS協(xié)議中定義的所有功能,包括:

SSL2
SSL3
TLSv1
TLSv1.1
TLSv1.2

而且,OpenSSL是用C語(yǔ)言開發(fā)的,具有優(yōu)秀的跨平臺(tái)特性,在Linux、Windows、BSD、MAC等平臺(tái)上可以執(zhí)行。

具體來(lái)說(shuō),OpenSSL實(shí)現(xiàn)中,包括下面幾個(gè)功能模塊:

密碼算法庫(kù)

密碼算法庫(kù)中包括:

對(duì)稱加密算法: AES、DES等。非對(duì)稱加密算法: DH、RSA、DSA、EC等。

信息摘要算法

信息摘要算法包括:MD5、SHA等。

秘鑰和證書管理

OpenSSL提供的CA應(yīng)用程序就是一個(gè)小型的證書管理中心,實(shí)現(xiàn)了證書簽發(fā)的整個(gè)流程和證書管理的大部分機(jī)制,我們?cè)趯W(xué)習(xí)的時(shí)候一般都會(huì)用OpenSSL中提供的CA程序來(lái)生成秘鑰對(duì)、自簽名等等。具體的內(nèi)容包括:

證書秘鑰產(chǎn)生、請(qǐng)求產(chǎn)生、證書簽發(fā)、吊銷和驗(yàn)證功能;
對(duì)證書的X.509標(biāo)準(zhǔn)解碼、PKCS#12/PKCS#7格式的編解碼;
提供了產(chǎn)生各種秘鑰對(duì)的函數(shù);

SSL協(xié)議庫(kù)

實(shí)現(xiàn)了SSLv2、SSLv3、TLSv1.0協(xié)議。

應(yīng)用程序

OpenSSL的應(yīng)用程序是基于密碼算法庫(kù)和SSL協(xié)議庫(kù)實(shí)現(xiàn)的,是非常好的OpenSSL的API函數(shù)使用范例,主要包括:秘鑰生成、證書管理、格式轉(zhuǎn)換、數(shù)據(jù)加密和簽名、SSL測(cè)試以及其他輔助配置功能。

OpenSSH又是什么? SSH

首先說(shuō)一下SSH:Secure Shell(安全外殼協(xié)議),又是一個(gè)協(xié)議,用來(lái)實(shí)現(xiàn)遠(yuǎn)程登錄系統(tǒng),我們通常利用SSH來(lái)傳輸命令行界面和遠(yuǎn)程執(zhí)行命令。

比如:在調(diào)試一個(gè)ARM系統(tǒng)時(shí),可以通過(guò)串口助手連接到ARM板子上;但是更常用的調(diào)試場(chǎng)景是在PC機(jī)上遠(yuǎn)程登錄到ARM系統(tǒng)中,執(zhí)行ARM中的任何指令,這就是利用SSH來(lái)實(shí)現(xiàn)的。

SSH提供2種級(jí)別的安全驗(yàn)證:

基于密碼;
基于秘鑰。

SSH中基于口令的安全驗(yàn)證

只需要知道賬號(hào)和密碼,就可以遠(yuǎn)程登錄到系統(tǒng),我們一般常用的就是這用方式。但是不能保證我正在連接的設(shè)備就是我想連接的那臺(tái)設(shè)備,可能會(huì)有別的服務(wù)器冒充真正的服務(wù)器,也就是受到“中間人”這種方式的攻擊。

當(dāng)然還經(jīng)常遇到另一種錯(cuò)誤:在局域網(wǎng)中有多臺(tái)設(shè)備,本想遠(yuǎn)程連接到設(shè)備A中,由于IP地址記錯(cuò)了,結(jié)果遠(yuǎn)程登錄到另外一臺(tái)設(shè)備B上了,如果你的同事也正在調(diào)試設(shè)備B,接下來(lái)就是悲劇發(fā)生的時(shí)刻!

SSH中基于秘鑰的安全認(rèn)證

Step1
首先為自己創(chuàng)建一個(gè)秘鑰對(duì),并提前把公鑰放在需要訪問(wèn)的服務(wù)器上,例如:放在賬號(hào)的家目錄中。

Step2
通過(guò)客戶端遠(yuǎn)程登錄到服務(wù)器,把自己的公鑰發(fā)給服務(wù)器,并請(qǐng)服務(wù)器進(jìn)行安全驗(yàn)證。

Step3
服務(wù)器接收到請(qǐng)求后,在登錄賬號(hào)的家目錄下查找公鑰,然后與接收到的公鑰進(jìn)行比對(duì)。

Step4
如果比對(duì)不一致,通信結(jié)束;如果比對(duì)一致,服務(wù)器就用公鑰加密一段數(shù)據(jù)(challenge),并發(fā)送給客戶端。

Step5
客戶端接收到challenge,用私鑰進(jìn)行解密,然后把結(jié)果發(fā)給服務(wù)器。

Step6
服務(wù)器把接收到的結(jié)果與Step4中的數(shù)據(jù)進(jìn)行比對(duì),如果一致則驗(yàn)證通過(guò)。

SSH協(xié)議的實(shí)現(xiàn)

既然SSH是一個(gè)協(xié)議,那么就一定存在對(duì)應(yīng)的實(shí)現(xiàn),這就是OpenSSH,它是一個(gè)免費(fèi)開源的SSH實(shí)現(xiàn)。

OpenSSH實(shí)現(xiàn)中,利用了OpenSSL中的加密和算法庫(kù)函數(shù),這就是它倆之間的關(guān)系。

總結(jié)

到這里,與加密、證書相關(guān)的基礎(chǔ)概念都介紹完畢了,一不小心超過(guò)了一萬(wàn)字,不知道你是否有所收獲。

如果你是初次接觸到這些東西,敬請(qǐng)放心,即使現(xiàn)在明白了,一個(gè)星期之后肯定忘記一多半了。只有經(jīng)歷過(guò)幾個(gè)項(xiàng)目的歷練之后,才會(huì)有更深刻的理解和記憶,最后,祝您好運(yùn)!

<上一頁(yè)  1  2  3  
聲明: 本文由入駐維科號(hào)的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場(chǎng)。如有侵權(quán)或其他問(wèn)題,請(qǐng)聯(lián)系舉報(bào)。

發(fā)表評(píng)論

0條評(píng)論,0人參與

請(qǐng)輸入評(píng)論內(nèi)容...

請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字

您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無(wú)評(píng)論

暫無(wú)評(píng)論

安防 獵頭職位 更多
文章糾錯(cuò)
x
*文字標(biāo)題:
*糾錯(cuò)內(nèi)容:
聯(lián)系郵箱:
*驗(yàn) 證 碼:

粵公網(wǎng)安備 44030502002758號(hào)