物聯(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)!
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
最新活動(dòng)更多
-
12月19日立即報(bào)名>> 【線下會(huì)議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
精彩回顧立即查看>> 2024中國(guó)國(guó)際工業(yè)博覽會(huì)維科網(wǎng)·激光VIP企業(yè)展臺(tái)直播
-
精彩回顧立即查看>> 【產(chǎn)品試用】RSE30/60在線紅外熱像儀免費(fèi)試用
-
精彩回顧立即查看>> 2024(第五屆)全球數(shù)字經(jīng)濟(jì)產(chǎn)業(yè)大會(huì)暨展覽會(huì)
-
精彩回顧立即查看>> 【線下會(huì)議】全數(shù)會(huì)2024電子元器件展覽會(huì)
-
精彩回顧立即查看>> 三菱電機(jī)紅外傳感器的特性以及相關(guān)應(yīng)用領(lǐng)域
編輯推薦
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市